Lines Matching refs:cli
138 struct nouveau_cli *cli = container_of(w, typeof(*cli), work); in nouveau_cli_work() local
140 mutex_lock(&cli->lock); in nouveau_cli_work()
141 list_for_each_entry_safe(work, wtmp, &cli->worker, head) { in nouveau_cli_work()
147 mutex_unlock(&cli->lock); in nouveau_cli_work()
154 schedule_work(&work->cli->work); in nouveau_cli_work_fence()
158 nouveau_cli_work_queue(struct nouveau_cli *cli, struct dma_fence *fence, in nouveau_cli_work_queue() argument
162 work->cli = cli; in nouveau_cli_work_queue()
163 mutex_lock(&cli->lock); in nouveau_cli_work_queue()
164 list_add_tail(&work->head, &cli->worker); in nouveau_cli_work_queue()
167 mutex_unlock(&cli->lock); in nouveau_cli_work_queue()
171 nouveau_cli_fini(struct nouveau_cli *cli) in nouveau_cli_fini() argument
178 flush_work(&cli->work); in nouveau_cli_fini()
179 WARN_ON(!list_empty(&cli->worker)); in nouveau_cli_fini()
181 usif_client_fini(cli); in nouveau_cli_fini()
182 nouveau_vmm_fini(&cli->svm); in nouveau_cli_fini()
183 nouveau_vmm_fini(&cli->vmm); in nouveau_cli_fini()
184 nvif_mmu_dtor(&cli->mmu); in nouveau_cli_fini()
185 nvif_device_dtor(&cli->device); in nouveau_cli_fini()
186 mutex_lock(&cli->drm->master.lock); in nouveau_cli_fini()
187 nvif_client_dtor(&cli->base); in nouveau_cli_fini()
188 mutex_unlock(&cli->drm->master.lock); in nouveau_cli_fini()
193 struct nouveau_cli *cli) in nouveau_cli_init() argument
221 snprintf(cli->name, sizeof(cli->name), "%s", sname); in nouveau_cli_init()
222 cli->drm = drm; in nouveau_cli_init()
223 mutex_init(&cli->mutex); in nouveau_cli_init()
224 usif_client_init(cli); in nouveau_cli_init()
226 INIT_WORK(&cli->work, nouveau_cli_work); in nouveau_cli_init()
227 INIT_LIST_HEAD(&cli->worker); in nouveau_cli_init()
228 mutex_init(&cli->lock); in nouveau_cli_init()
230 if (cli == &drm->master) { in nouveau_cli_init()
232 cli->name, device, &cli->base); in nouveau_cli_init()
235 ret = nvif_client_ctor(&drm->master.base, cli->name, device, in nouveau_cli_init()
236 &cli->base); in nouveau_cli_init()
240 NV_PRINTK(err, cli, "Client allocation failed: %d\n", ret); in nouveau_cli_init()
244 ret = nvif_device_ctor(&cli->base.object, "drmDevice", 0, NV_DEVICE, in nouveau_cli_init()
249 &cli->device); in nouveau_cli_init()
251 NV_PRINTK(err, cli, "Device allocation failed: %d\n", ret); in nouveau_cli_init()
255 ret = nvif_mclass(&cli->device.object, mmus); in nouveau_cli_init()
257 NV_PRINTK(err, cli, "No supported MMU class\n"); in nouveau_cli_init()
261 ret = nvif_mmu_ctor(&cli->device.object, "drmMmu", mmus[ret].oclass, in nouveau_cli_init()
262 &cli->mmu); in nouveau_cli_init()
264 NV_PRINTK(err, cli, "MMU allocation failed: %d\n", ret); in nouveau_cli_init()
268 ret = nvif_mclass(&cli->mmu.object, vmms); in nouveau_cli_init()
270 NV_PRINTK(err, cli, "No supported VMM class\n"); in nouveau_cli_init()
274 ret = nouveau_vmm_init(cli, vmms[ret].oclass, &cli->vmm); in nouveau_cli_init()
276 NV_PRINTK(err, cli, "VMM allocation failed: %d\n", ret); in nouveau_cli_init()
280 ret = nvif_mclass(&cli->mmu.object, mems); in nouveau_cli_init()
282 NV_PRINTK(err, cli, "No supported MEM class\n"); in nouveau_cli_init()
286 cli->mem = &mems[ret]; in nouveau_cli_init()
290 nouveau_cli_fini(cli); in nouveau_cli_init()
636 struct nouveau_cli *cli, *temp_cli; in nouveau_drm_device_fini() local
668 list_for_each_entry_safe(cli, temp_cli, &drm->clients, head) { in nouveau_drm_device_fini()
669 list_del(&cli->head); in nouveau_drm_device_fini()
670 mutex_lock(&cli->mutex); in nouveau_drm_device_fini()
671 if (cli->abi16) in nouveau_drm_device_fini()
672 nouveau_abi16_fini(cli->abi16); in nouveau_drm_device_fini()
673 mutex_unlock(&cli->mutex); in nouveau_drm_device_fini()
674 nouveau_cli_fini(cli); in nouveau_drm_device_fini()
675 kfree(cli); in nouveau_drm_device_fini()
1089 struct nouveau_cli *cli; in nouveau_drm_open() local
1103 if (!(cli = kzalloc(sizeof(*cli), GFP_KERNEL))) { in nouveau_drm_open()
1108 ret = nouveau_cli_init(drm, name, cli); in nouveau_drm_open()
1112 fpriv->driver_priv = cli; in nouveau_drm_open()
1115 list_add(&cli->head, &drm->clients); in nouveau_drm_open()
1119 if (ret && cli) { in nouveau_drm_open()
1120 nouveau_cli_fini(cli); in nouveau_drm_open()
1121 kfree(cli); in nouveau_drm_open()
1132 struct nouveau_cli *cli = nouveau_cli(fpriv); in nouveau_drm_postclose() local
1147 mutex_lock(&cli->mutex); in nouveau_drm_postclose()
1148 if (cli->abi16) in nouveau_drm_postclose()
1149 nouveau_abi16_fini(cli->abi16); in nouveau_drm_postclose()
1150 mutex_unlock(&cli->mutex); in nouveau_drm_postclose()
1153 list_del(&cli->head); in nouveau_drm_postclose()
1156 nouveau_cli_fini(cli); in nouveau_drm_postclose()
1157 kfree(cli); in nouveau_drm_postclose()