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)
{
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,
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);
}
}
nvkm_object_del(&object);
}
- return ret;
+ return ret ? ret : 1;
}
static int
&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;
}