mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-13 14:14:37 +00:00
drm/nouveau/client: store default device by handle, not reference
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
102b49da15
commit
4e7e62d607
4 changed files with 9 additions and 16 deletions
|
@ -5,7 +5,7 @@
|
||||||
struct nvkm_client {
|
struct nvkm_client {
|
||||||
struct nvkm_namedb namedb;
|
struct nvkm_namedb namedb;
|
||||||
struct nvkm_handle *root;
|
struct nvkm_handle *root;
|
||||||
struct nvkm_device *device;
|
u64 device;
|
||||||
char name[32];
|
char name[32];
|
||||||
u32 debug;
|
u32 debug;
|
||||||
struct nvkm_vm *vm;
|
struct nvkm_vm *vm;
|
||||||
|
|
|
@ -507,7 +507,7 @@ nouveau_drm_device_remove(struct drm_device *dev)
|
||||||
|
|
||||||
dev->irq_enabled = false;
|
dev->irq_enabled = false;
|
||||||
client = nvxx_client(&drm->client.base);
|
client = nvxx_client(&drm->client.base);
|
||||||
device = client->device;
|
device = nvkm_device_find(client->device);
|
||||||
drm_put_dev(dev);
|
drm_put_dev(dev);
|
||||||
|
|
||||||
nvkm_device_del(&device);
|
nvkm_device_del(&device);
|
||||||
|
|
|
@ -219,7 +219,6 @@ nvkm_client_del(struct nvkm_client **pclient)
|
||||||
nvkm_client_fini(client, false);
|
nvkm_client_fini(client, false);
|
||||||
for (i = 0; i < ARRAY_SIZE(client->notify); i++)
|
for (i = 0; i < ARRAY_SIZE(client->notify); i++)
|
||||||
nvkm_client_notify_del(client, i);
|
nvkm_client_notify_del(client, i);
|
||||||
nvkm_object_ref(NULL, (struct nvkm_object **)&client->device);
|
|
||||||
nvkm_handle_destroy(client->root);
|
nvkm_handle_destroy(client->root);
|
||||||
nvkm_namedb_destroy(&client->namedb);
|
nvkm_namedb_destroy(&client->namedb);
|
||||||
*pclient = NULL;
|
*pclient = NULL;
|
||||||
|
@ -233,17 +232,12 @@ nvkm_client_sclass[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
int
|
int
|
||||||
nvkm_client_new(const char *name, u64 devname, const char *cfg,
|
nvkm_client_new(const char *name, u64 device, const char *cfg,
|
||||||
const char *dbg, struct nvkm_client **pclient)
|
const char *dbg, struct nvkm_client **pclient)
|
||||||
{
|
{
|
||||||
struct nvkm_device *device;
|
|
||||||
struct nvkm_client *client;
|
struct nvkm_client *client;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
device = nvkm_device_find(devname);
|
|
||||||
if (!device)
|
|
||||||
return -ENODEV;
|
|
||||||
|
|
||||||
ret = nvkm_namedb_create(NULL, NULL, &nvkm_client_oclass,
|
ret = nvkm_namedb_create(NULL, NULL, &nvkm_client_oclass,
|
||||||
NV_CLIENT_CLASS, nvkm_client_sclass,
|
NV_CLIENT_CLASS, nvkm_client_sclass,
|
||||||
0, &client);
|
0, &client);
|
||||||
|
@ -259,8 +253,7 @@ nvkm_client_new(const char *name, u64 devname, const char *cfg,
|
||||||
/* prevent init/fini being called, os in in charge of this */
|
/* prevent init/fini being called, os in in charge of this */
|
||||||
atomic_set(&nv_object(client)->usecount, 2);
|
atomic_set(&nv_object(client)->usecount, 2);
|
||||||
|
|
||||||
nvkm_object_ref(&device->engine.subdev.object,
|
client->device = device;
|
||||||
(struct nvkm_object **)&client->device);
|
|
||||||
snprintf(client->name, sizeof(client->name), "%s", name);
|
snprintf(client->name, sizeof(client->name), "%s", name);
|
||||||
client->debug = nvkm_dbgopt(dbg, "CLIENT");
|
client->debug = nvkm_dbgopt(dbg, "CLIENT");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -258,12 +258,12 @@ nvkm_udevice_ctor(struct nvkm_object *parent, struct nvkm_object *engine,
|
||||||
oclass = &nvkm_udevice_oclass_super;
|
oclass = &nvkm_udevice_oclass_super;
|
||||||
|
|
||||||
/* find the device subdev that matches what the client requested */
|
/* find the device subdev that matches what the client requested */
|
||||||
device = client->device;
|
if (args->v0.device != ~0)
|
||||||
if (args->v0.device != ~0) {
|
|
||||||
device = nvkm_device_find(args->v0.device);
|
device = nvkm_device_find(args->v0.device);
|
||||||
|
else
|
||||||
|
device = nvkm_device_find(client->device);
|
||||||
if (!device)
|
if (!device)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
|
||||||
|
|
||||||
ret = nvkm_parent_create(parent, NULL, oclass, 0, nvkm_control_oclass,
|
ret = nvkm_parent_create(parent, NULL, oclass, 0, nvkm_control_oclass,
|
||||||
(1ULL << NVDEV_ENGINE_DMAOBJ) |
|
(1ULL << NVDEV_ENGINE_DMAOBJ) |
|
||||||
|
|
Loading…
Reference in a new issue