Lines Matching refs:cli
136 struct nouveau_cli *cli = container_of(w, typeof(*cli), work); in nouveau_cli_work() local
138 mutex_lock(&cli->lock); in nouveau_cli_work()
139 list_for_each_entry_safe(work, wtmp, &cli->worker, head) { in nouveau_cli_work()
145 mutex_unlock(&cli->lock); in nouveau_cli_work()
152 schedule_work(&work->cli->work); in nouveau_cli_work_fence()
156 nouveau_cli_work_queue(struct nouveau_cli *cli, struct dma_fence *fence, in nouveau_cli_work_queue() argument
160 work->cli = cli; in nouveau_cli_work_queue()
161 mutex_lock(&cli->lock); in nouveau_cli_work_queue()
162 list_add_tail(&work->head, &cli->worker); in nouveau_cli_work_queue()
165 mutex_unlock(&cli->lock); in nouveau_cli_work_queue()
169 nouveau_cli_fini(struct nouveau_cli *cli) in nouveau_cli_fini() argument
176 flush_work(&cli->work); in nouveau_cli_fini()
177 WARN_ON(!list_empty(&cli->worker)); in nouveau_cli_fini()
179 usif_client_fini(cli); in nouveau_cli_fini()
180 nouveau_vmm_fini(&cli->svm); in nouveau_cli_fini()
181 nouveau_vmm_fini(&cli->vmm); in nouveau_cli_fini()
182 nvif_mmu_dtor(&cli->mmu); in nouveau_cli_fini()
183 nvif_device_dtor(&cli->device); in nouveau_cli_fini()
184 mutex_lock(&cli->drm->master.lock); in nouveau_cli_fini()
185 nvif_client_dtor(&cli->base); in nouveau_cli_fini()
186 mutex_unlock(&cli->drm->master.lock); in nouveau_cli_fini()
191 struct nouveau_cli *cli) in nouveau_cli_init() argument
219 snprintf(cli->name, sizeof(cli->name), "%s", sname); in nouveau_cli_init()
220 cli->drm = drm; in nouveau_cli_init()
221 mutex_init(&cli->mutex); in nouveau_cli_init()
222 usif_client_init(cli); in nouveau_cli_init()
224 INIT_WORK(&cli->work, nouveau_cli_work); in nouveau_cli_init()
225 INIT_LIST_HEAD(&cli->worker); in nouveau_cli_init()
226 mutex_init(&cli->lock); in nouveau_cli_init()
228 if (cli == &drm->master) { in nouveau_cli_init()
230 cli->name, device, &cli->base); in nouveau_cli_init()
233 ret = nvif_client_ctor(&drm->master.base, cli->name, device, in nouveau_cli_init()
234 &cli->base); in nouveau_cli_init()
238 NV_PRINTK(err, cli, "Client allocation failed: %d\n", ret); in nouveau_cli_init()
242 ret = nvif_device_ctor(&cli->base.object, "drmDevice", 0, NV_DEVICE, in nouveau_cli_init()
246 &cli->device); in nouveau_cli_init()
248 NV_PRINTK(err, cli, "Device allocation failed: %d\n", ret); in nouveau_cli_init()
252 ret = nvif_mclass(&cli->device.object, mmus); in nouveau_cli_init()
254 NV_PRINTK(err, cli, "No supported MMU class\n"); in nouveau_cli_init()
258 ret = nvif_mmu_ctor(&cli->device.object, "drmMmu", mmus[ret].oclass, in nouveau_cli_init()
259 &cli->mmu); in nouveau_cli_init()
261 NV_PRINTK(err, cli, "MMU allocation failed: %d\n", ret); in nouveau_cli_init()
265 ret = nvif_mclass(&cli->mmu.object, vmms); in nouveau_cli_init()
267 NV_PRINTK(err, cli, "No supported VMM class\n"); in nouveau_cli_init()
271 ret = nouveau_vmm_init(cli, vmms[ret].oclass, &cli->vmm); in nouveau_cli_init()
273 NV_PRINTK(err, cli, "VMM allocation failed: %d\n", ret); in nouveau_cli_init()
277 ret = nvif_mclass(&cli->mmu.object, mems); in nouveau_cli_init()
279 NV_PRINTK(err, cli, "No supported MEM class\n"); in nouveau_cli_init()
283 cli->mem = &mems[ret]; in nouveau_cli_init()
287 nouveau_cli_fini(cli); in nouveau_cli_init()
1062 struct nouveau_cli *cli; in nouveau_drm_open() local
1076 if (!(cli = kzalloc(sizeof(*cli), GFP_KERNEL))) { in nouveau_drm_open()
1081 ret = nouveau_cli_init(drm, name, cli); in nouveau_drm_open()
1085 cli->base.super = false; in nouveau_drm_open()
1087 fpriv->driver_priv = cli; in nouveau_drm_open()
1090 list_add(&cli->head, &drm->clients); in nouveau_drm_open()
1094 if (ret && cli) { in nouveau_drm_open()
1095 nouveau_cli_fini(cli); in nouveau_drm_open()
1096 kfree(cli); in nouveau_drm_open()
1107 struct nouveau_cli *cli = nouveau_cli(fpriv); in nouveau_drm_postclose() local
1112 mutex_lock(&cli->mutex); in nouveau_drm_postclose()
1113 if (cli->abi16) in nouveau_drm_postclose()
1114 nouveau_abi16_fini(cli->abi16); in nouveau_drm_postclose()
1115 mutex_unlock(&cli->mutex); in nouveau_drm_postclose()
1118 list_del(&cli->head); in nouveau_drm_postclose()
1121 nouveau_cli_fini(cli); in nouveau_drm_postclose()
1122 kfree(cli); in nouveau_drm_postclose()