Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/nouveau/core/client: destroy client objects over nvif

Preparation for supporting subclients, and also good for consistency.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>

+10 -19
-10
drivers/gpu/drm/nouveau/nouveau_nvif.c
··· 71 71 return nvkm_object_fini(&client->object, true); 72 72 } 73 73 74 - static void 75 - nvkm_client_driver_fini(void *priv) 76 - { 77 - struct nvkm_client *client = priv; 78 - struct nvkm_object *object = &client->object; 79 - nvkm_object_fini(object, false); 80 - nvkm_object_del(&object); 81 - } 82 - 83 74 static int 84 75 nvkm_client_ntfy(const void *header, u32 length, const void *data, u32 size) 85 76 { ··· 119 128 nvif_driver_nvkm = { 120 129 .name = "nvkm", 121 130 .init = nvkm_client_driver_init, 122 - .fini = nvkm_client_driver_fini, 123 131 .suspend = nvkm_client_suspend, 124 132 .resume = nvkm_client_resume, 125 133 .ioctl = nvkm_client_ioctl,
+3 -3
drivers/gpu/drm/nouveau/nvif/client.c
··· 47 47 void 48 48 nvif_client_fini(struct nvif_client *client) 49 49 { 50 + nvif_object_fini(&client->object); 50 51 if (client->driver) { 51 - client->driver->fini(client->object.priv); 52 + if (client->driver->fini) 53 + client->driver->fini(client->object.priv); 52 54 client->driver = NULL; 53 - client->object.client = NULL; 54 - nvif_object_fini(&client->object); 55 55 } 56 56 } 57 57
+7 -6
drivers/gpu/drm/nouveau/nvkm/core/ioctl.c
··· 158 158 nvkm_object_del(&object); 159 159 } 160 160 161 - return ret; 161 + return ret ? ret : 1; 162 162 } 163 163 164 164 static int ··· 441 441 &args->v0.route, &args->v0.token); 442 442 } 443 443 444 - nvif_ioctl(object, "return %d\n", ret); 445 - if (hack) { 446 - *hack = client->data; 447 - client->data = NULL; 444 + if (ret != 1) { 445 + nvif_ioctl(object, "return %d\n", ret); 446 + if (hack) { 447 + *hack = client->data; 448 + client->data = NULL; 449 + } 448 450 } 449 451 450 - client->super = false; 451 452 return ret; 452 453 }