Lines Matching refs:cli

142 	struct nouveau_cli *cli = container_of(w, typeof(*cli), work);
144 mutex_lock(&cli->lock);
145 list_for_each_entry_safe(work, wtmp, &cli->worker, head) {
151 mutex_unlock(&cli->lock);
158 schedule_work(&work->cli->work);
162 nouveau_cli_work_queue(struct nouveau_cli *cli, struct dma_fence *fence,
166 work->cli = cli;
167 mutex_lock(&cli->lock);
168 list_add_tail(&work->head, &cli->worker);
171 mutex_unlock(&cli->lock);
175 nouveau_cli_fini(struct nouveau_cli *cli)
182 flush_work(&cli->work);
183 WARN_ON(!list_empty(&cli->worker));
185 usif_client_fini(cli);
186 nouveau_vmm_fini(&cli->svm);
187 nouveau_vmm_fini(&cli->vmm);
188 nvif_mmu_dtor(&cli->mmu);
189 nvif_device_dtor(&cli->device);
190 mutex_lock(&cli->drm->master.lock);
191 nvif_client_dtor(&cli->base);
192 mutex_unlock(&cli->drm->master.lock);
197 struct nouveau_cli *cli)
225 snprintf(cli->name, sizeof(cli->name), "%s", sname);
226 cli->drm = drm;
227 mutex_init(&cli->mutex);
228 usif_client_init(cli);
230 INIT_WORK(&cli->work, nouveau_cli_work);
231 INIT_LIST_HEAD(&cli->worker);
232 mutex_init(&cli->lock);
234 if (cli == &drm->master) {
236 cli->name, device, &cli->base);
239 ret = nvif_client_ctor(&drm->master.base, cli->name, device,
240 &cli->base);
244 NV_PRINTK(err, cli, "Client allocation failed: %d\n", ret);
248 ret = nvif_device_ctor(&cli->base.object, "drmDevice", 0, NV_DEVICE,
252 &cli->device);
254 NV_PRINTK(err, cli, "Device allocation failed: %d\n", ret);
258 ret = nvif_mclass(&cli->device.object, mmus);
260 NV_PRINTK(err, cli, "No supported MMU class\n");
264 ret = nvif_mmu_ctor(&cli->device.object, "drmMmu", mmus[ret].oclass,
265 &cli->mmu);
267 NV_PRINTK(err, cli, "MMU allocation failed: %d\n", ret);
271 ret = nvif_mclass(&cli->mmu.object, vmms);
273 NV_PRINTK(err, cli, "No supported VMM class\n");
277 ret = nouveau_vmm_init(cli, vmms[ret].oclass, &cli->vmm);
279 NV_PRINTK(err, cli, "VMM allocation failed: %d\n", ret);
283 ret = nvif_mclass(&cli->mmu.object, mems);
285 NV_PRINTK(err, cli, "No supported MEM class\n");
289 cli->mem = &mems[ret];
293 nouveau_cli_fini(cli);
637 struct nouveau_cli *cli, *temp_cli;
669 list_for_each_entry_safe(cli, temp_cli, &drm->clients, head) {
670 list_del(&cli->head);
671 mutex_lock(&cli->mutex);
672 if (cli->abi16)
673 nouveau_abi16_fini(cli->abi16);
674 mutex_unlock(&cli->mutex);
675 nouveau_cli_fini(cli);
676 kfree(cli);
1089 struct nouveau_cli *cli;
1103 if (!(cli = kzalloc(sizeof(*cli), GFP_KERNEL))) {
1108 ret = nouveau_cli_init(drm, name, cli);
1112 cli->base.super = false;
1114 fpriv->driver_priv = cli;
1117 list_add(&cli->head, &drm->clients);
1121 if (ret && cli) {
1122 nouveau_cli_fini(cli);
1123 kfree(cli);
1134 struct nouveau_cli *cli = nouveau_cli(fpriv);
1149 mutex_lock(&cli->mutex);
1150 if (cli->abi16)
1151 nouveau_abi16_fini(cli->abi16);
1152 mutex_unlock(&cli->mutex);
1155 list_del(&cli->head);
1158 nouveau_cli_fini(cli);
1159 kfree(cli);