summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2016-05-25 10:02:11 +0300
committerBen Skeggs <bskeggs@redhat.com>2017-02-17 08:14:59 +0300
commit05da248bbe91fecb29e1f2fb9b978c4d2ee6da8e (patch)
treeeadfc286e9baca4ba0cee2d9e71cd6fd733ba1ae
parent2c3af924fbee23544a6adc81a2bbe398132b472f (diff)
downloadlinux-05da248bbe91fecb29e1f2fb9b978c4d2ee6da8e.tar.xz
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>
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_nvif.c10
-rw-r--r--drivers/gpu/drm/nouveau/nvif/client.c6
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/core/ioctl.c13
3 files changed, 10 insertions, 19 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_nvif.c b/drivers/gpu/drm/nouveau/nouveau_nvif.c
index 5219da4805b5..69341a65dc42 100644
--- a/drivers/gpu/drm/nouveau/nouveau_nvif.c
+++ b/drivers/gpu/drm/nouveau/nouveau_nvif.c
@@ -71,15 +71,6 @@ nvkm_client_suspend(void *priv)
return nvkm_object_fini(&client->object, true);
}
-static void
-nvkm_client_driver_fini(void *priv)
-{
- struct nvkm_client *client = priv;
- struct nvkm_object *object = &client->object;
- nvkm_object_fini(object, false);
- nvkm_object_del(&object);
-}
-
static int
nvkm_client_ntfy(const void *header, u32 length, const void *data, u32 size)
{
@@ -128,7 +119,6 @@ const struct nvif_driver
nvif_driver_nvkm = {
.name = "nvkm",
.init = nvkm_client_driver_init,
- .fini = nvkm_client_driver_fini,
.suspend = nvkm_client_suspend,
.resume = nvkm_client_resume,
.ioctl = nvkm_client_ioctl,
diff --git a/drivers/gpu/drm/nouveau/nvif/client.c b/drivers/gpu/drm/nouveau/nvif/client.c
index 29c20dfd894d..ad1307b6f783 100644
--- a/drivers/gpu/drm/nouveau/nvif/client.c
+++ b/drivers/gpu/drm/nouveau/nvif/client.c
@@ -47,11 +47,11 @@ nvif_client_resume(struct nvif_client *client)
void
nvif_client_fini(struct nvif_client *client)
{
+ nvif_object_fini(&client->object);
if (client->driver) {
- client->driver->fini(client->object.priv);
+ if (client->driver->fini)
+ client->driver->fini(client->object.priv);
client->driver = NULL;
- client->object.client = NULL;
- nvif_object_fini(&client->object);
}
}
diff --git a/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c b/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c
index 25c800b426ca..be19bbe56bba 100644
--- a/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c
+++ b/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c
@@ -158,7 +158,7 @@ nvkm_ioctl_del(struct nvkm_client *client,
nvkm_object_del(&object);
}
- return ret;
+ return ret ? ret : 1;
}
static int
@@ -441,12 +441,13 @@ nvkm_ioctl(struct nvkm_client *client, bool supervisor,
&args->v0.route, &args->v0.token);
}
- nvif_ioctl(object, "return %d\n", ret);
- if (hack) {
- *hack = client->data;
- client->data = NULL;
+ if (ret != 1) {
+ nvif_ioctl(object, "return %d\n", ret);
+ if (hack) {
+ *hack = client->data;
+ client->data = NULL;
+ }
}
- client->super = false;
return ret;
}