Lines Matching refs:cli
174 struct nouveau_cli *cli = container_of(w, typeof(*cli), work);
176 mutex_lock(&cli->lock);
177 list_for_each_entry_safe(work, wtmp, &cli->worker, head) {
183 mutex_unlock(&cli->lock);
190 schedule_work(&work->cli->work);
194 nouveau_cli_work_queue(struct nouveau_cli *cli, struct dma_fence *fence,
198 work->cli = cli;
199 mutex_lock(&cli->lock);
200 list_add_tail(&work->head, &cli->worker);
203 mutex_unlock(&cli->lock);
207 nouveau_cli_fini(struct nouveau_cli *cli)
209 struct nouveau_uvmm *uvmm = nouveau_cli_uvmm_locked(cli);
216 flush_work(&cli->work);
217 WARN_ON(!list_empty(&cli->worker));
219 if (cli->sched)
220 nouveau_sched_destroy(&cli->sched);
223 nouveau_vmm_fini(&cli->svm);
224 nouveau_vmm_fini(&cli->vmm);
225 nvif_mmu_dtor(&cli->mmu);
226 cli->device.object.map.ptr = NULL;
227 nvif_device_dtor(&cli->device);
228 mutex_lock(&cli->drm->client_mutex);
229 nvif_client_dtor(&cli->base);
230 mutex_unlock(&cli->drm->client_mutex);
235 struct nouveau_cli *cli)
255 snprintf(cli->name, sizeof(cli->name), "%s", sname);
256 cli->drm = drm;
257 mutex_init(&cli->mutex);
259 INIT_WORK(&cli->work, nouveau_cli_work);
260 INIT_LIST_HEAD(&cli->worker);
261 mutex_init(&cli->lock);
264 ret = nvif_client_ctor(&drm->_client, cli->name, &cli->base);
267 NV_PRINTK(err, cli, "Client allocation failed: %d\n", ret);
271 ret = nvif_device_ctor(&cli->base, "drmDevice", &cli->device);
273 NV_PRINTK(err, cli, "Device allocation failed: %d\n", ret);
277 cli->device.object.map.ptr = drm->device.object.map.ptr;
279 ret = nvif_mmu_ctor(&cli->device.object, "drmMmu", drm->mmu.object.oclass,
280 &cli->mmu);
282 NV_PRINTK(err, cli, "MMU allocation failed: %d\n", ret);
286 ret = nvif_mclass(&cli->mmu.object, vmms);
288 NV_PRINTK(err, cli, "No supported VMM class\n");
292 ret = nouveau_vmm_init(cli, vmms[ret].oclass, &cli->vmm);
294 NV_PRINTK(err, cli, "VMM allocation failed: %d\n", ret);
298 ret = nvif_mclass(&cli->mmu.object, mems);
300 NV_PRINTK(err, cli, "No supported MEM class\n");
304 cli->mem = &mems[ret];
316 ret = nouveau_sched_create(&cli->sched, drm, NULL, 1);
323 nouveau_cli_fini(cli);
582 struct nouveau_cli *cli, *temp_cli;
612 list_for_each_entry_safe(cli, temp_cli, &drm->clients, head) {
613 list_del(&cli->head);
614 mutex_lock(&cli->mutex);
615 if (cli->abi16)
616 nouveau_abi16_fini(cli->abi16);
617 mutex_unlock(&cli->mutex);
618 nouveau_cli_fini(cli);
619 kfree(cli);
1190 struct nouveau_cli *cli;
1206 if (!(cli = kzalloc(sizeof(*cli), GFP_KERNEL))) {
1211 ret = nouveau_cli_init(drm, name, cli);
1215 fpriv->driver_priv = cli;
1218 list_add(&cli->head, &drm->clients);
1222 if (ret && cli) {
1223 nouveau_cli_fini(cli);
1224 kfree(cli);
1235 struct nouveau_cli *cli = nouveau_cli(fpriv);
1250 mutex_lock(&cli->mutex);
1251 if (cli->abi16)
1252 nouveau_abi16_fini(cli->abi16);
1253 mutex_unlock(&cli->mutex);
1256 list_del(&cli->head);
1259 nouveau_cli_fini(cli);
1260 kfree(cli);