drm/nouveau/nvif: simplify and tidy library interfaces
A variety of tweaks to the NVIF library interfaces, mostly ripping out things that turned out to be not so useful. - Removed refcounting from nvif_object, callers are expected to not be stupid instead. - nvif_client is directly reachable from anything derived from nvif_object, removing the need for heuristics to locate it - _new() versions of interfaces, that allocate memory for the object they construct, have been removed. The vast majority of callers used the embedded _init() interfaces. - No longer storing constructor arguments (and the data returned from nvkm) inside nvif_object, it's more or less unused and just wastes memory. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
@@ -33,52 +33,19 @@ nvif_device_time(struct nvif_device *device)
|
||||
void
|
||||
nvif_device_fini(struct nvif_device *device)
|
||||
{
|
||||
nvif_object_fini(&device->base);
|
||||
nvif_object_fini(&device->object);
|
||||
}
|
||||
|
||||
int
|
||||
nvif_device_init(struct nvif_object *parent, void (*dtor)(struct nvif_device *),
|
||||
u32 handle, u32 oclass, void *data, u32 size,
|
||||
struct nvif_device *device)
|
||||
nvif_device_init(struct nvif_object *parent, u32 handle, u32 oclass,
|
||||
void *data, u32 size, struct nvif_device *device)
|
||||
{
|
||||
int ret = nvif_object_init(parent, (void *)dtor, handle, oclass,
|
||||
data, size, &device->base);
|
||||
int ret = nvif_object_init(parent, handle, oclass, data, size,
|
||||
&device->object);
|
||||
if (ret == 0) {
|
||||
device->object = &device->base;
|
||||
device->info.version = 0;
|
||||
ret = nvif_object_mthd(&device->base, NV_DEVICE_V0_INFO,
|
||||
ret = nvif_object_mthd(&device->object, NV_DEVICE_V0_INFO,
|
||||
&device->info, sizeof(device->info));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
nvif_device_del(struct nvif_device *device)
|
||||
{
|
||||
nvif_device_fini(device);
|
||||
kfree(device);
|
||||
}
|
||||
|
||||
int
|
||||
nvif_device_new(struct nvif_object *parent, u32 handle, u32 oclass,
|
||||
void *data, u32 size, struct nvif_device **pdevice)
|
||||
{
|
||||
struct nvif_device *device = kzalloc(sizeof(*device), GFP_KERNEL);
|
||||
if (device) {
|
||||
int ret = nvif_device_init(parent, nvif_device_del, handle,
|
||||
oclass, data, size, device);
|
||||
if (ret) {
|
||||
kfree(device);
|
||||
device = NULL;
|
||||
}
|
||||
*pdevice = device;
|
||||
return ret;
|
||||
}
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
void
|
||||
nvif_device_ref(struct nvif_device *device, struct nvif_device **pdevice)
|
||||
{
|
||||
nvif_object_ref(&device->base, (struct nvif_object **)pdevice);
|
||||
}
|
||||
|
Reference in New Issue
Block a user