Lines Matching refs:cli
158 struct nouveau_cli *cli = container_of(w, typeof(*cli), work);
160 mutex_lock(&cli->lock);
161 list_for_each_entry_safe(work, wtmp, &cli->worker, head) {
167 mutex_unlock(&cli->lock);
174 schedule_work(&work->cli->work);
178 nouveau_cli_work_queue(struct nouveau_cli *cli, struct dma_fence *fence,
182 work->cli = cli;
183 mutex_lock(&cli->lock);
184 list_add_tail(&work->head, &cli->worker);
187 mutex_unlock(&cli->lock);
191 nouveau_cli_fini(struct nouveau_cli *cli)
198 flush_work(&cli->work);
199 WARN_ON(!list_empty(&cli->worker));
201 usif_client_fini(cli);
202 nouveau_uvmm_fini(&cli->uvmm);
203 nouveau_sched_entity_fini(&cli->sched_entity);
204 nouveau_vmm_fini(&cli->svm);
205 nouveau_vmm_fini(&cli->vmm);
206 nvif_mmu_dtor(&cli->mmu);
207 nvif_device_dtor(&cli->device);
208 mutex_lock(&cli->drm->master.lock);
209 nvif_client_dtor(&cli->base);
210 mutex_unlock(&cli->drm->master.lock);
215 struct nouveau_cli *cli)
243 snprintf(cli->name, sizeof(cli->name), "%s", sname);
244 cli->drm = drm;
245 mutex_init(&cli->mutex);
246 usif_client_init(cli);
248 INIT_WORK(&cli->work, nouveau_cli_work);
249 INIT_LIST_HEAD(&cli->worker);
250 mutex_init(&cli->lock);
252 if (cli == &drm->master) {
254 cli->name, device, &cli->base);
257 ret = nvif_client_ctor(&drm->master.base, cli->name, device,
258 &cli->base);
262 NV_PRINTK(err, cli, "Client allocation failed: %d\n", ret);
266 ret = nvif_device_ctor(&cli->base.object, "drmDevice", 0, NV_DEVICE,
271 &cli->device);
273 NV_PRINTK(err, cli, "Device allocation failed: %d\n", ret);
277 ret = nvif_mclass(&cli->device.object, mmus);
279 NV_PRINTK(err, cli, "No supported MMU class\n");
283 ret = nvif_mmu_ctor(&cli->device.object, "drmMmu", mmus[ret].oclass,
284 &cli->mmu);
286 NV_PRINTK(err, cli, "MMU allocation failed: %d\n", ret);
290 ret = nvif_mclass(&cli->mmu.object, vmms);
292 NV_PRINTK(err, cli, "No supported VMM class\n");
296 ret = nouveau_vmm_init(cli, vmms[ret].oclass, &cli->vmm);
298 NV_PRINTK(err, cli, "VMM allocation failed: %d\n", ret);
302 ret = nvif_mclass(&cli->mmu.object, mems);
304 NV_PRINTK(err, cli, "No supported MEM class\n");
308 cli->mem = &mems[ret];
310 ret = nouveau_sched_entity_init(&cli->sched_entity, &drm->sched,
318 nouveau_cli_fini(cli);
669 struct nouveau_cli *cli, *temp_cli;
700 list_for_each_entry_safe(cli, temp_cli, &drm->clients, head) {
701 list_del(&cli->head);
702 mutex_lock(&cli->mutex);
703 if (cli->abi16)
704 nouveau_abi16_fini(cli->abi16);
705 mutex_unlock(&cli->mutex);
706 nouveau_cli_fini(cli);
707 kfree(cli);
1125 struct nouveau_cli *cli;
1142 if (!(cli = kzalloc(sizeof(*cli), GFP_KERNEL))) {
1147 ret = nouveau_cli_init(drm, name, cli);
1151 fpriv->driver_priv = cli;
1154 list_add(&cli->head, &drm->clients);
1158 if (ret && cli) {
1159 nouveau_cli_fini(cli);
1160 kfree(cli);
1171 struct nouveau_cli *cli = nouveau_cli(fpriv);
1186 mutex_lock(&cli->mutex);
1187 if (cli->abi16)
1188 nouveau_abi16_fini(cli->abi16);
1189 mutex_unlock(&cli->mutex);
1192 list_del(&cli->head);
1195 nouveau_cli_fini(cli);
1196 kfree(cli);