[PATCH 02/34] drm/nouveau: store nvkm_device pointer in nouveau_drm
Ben Skeggs
bskeggs at nvidia.com
Mon Jun 10 08:02:07 UTC 2024
On 4/6/24 20:20, Danilo Krummrich wrote:
> On 5/27/24 16:19, Ben Skeggs wrote:
>> There's various different places in the drm code that get at the
>> nvkm_device via various creative (and not very type-safe) means.
>>
>> One of those being via nvif_device.object.priv.
>>
>> Another patch series is going to entirely remove the ioctl-like
>> interfaces beween the drm code and nvkm, and that field will no
>> longer exist.
>>
>> This provides a safer replacement for accessing the nvkm_device,
>> and will used more in upcoming patches to cleanup other cases.
>>
>> Signed-off-by: Ben Skeggs <bskeggs at nvidia.com>
>> ---
>> drivers/gpu/drm/nouveau/nouveau_drm.c | 13 +++++--------
>> drivers/gpu/drm/nouveau/nouveau_drv.h | 1 +
>> 2 files changed, 6 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c
>> b/drivers/gpu/drm/nouveau/nouveau_drm.c
>> index c37798b507ea..e6ed68dcef78 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_drm.c
>> +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c
>> @@ -579,7 +579,7 @@ nouveau_parent = {
>> };
>> static int
>> -nouveau_drm_device_init(struct drm_device *dev)
>> +nouveau_drm_device_init(struct drm_device *dev, struct nvkm_device
>> *nvkm)
>> {
>> struct nouveau_drm *drm;
>> int ret;
>> @@ -588,6 +588,7 @@ nouveau_drm_device_init(struct drm_device *dev)
>> return -ENOMEM;
>> dev->dev_private = drm;
>> drm->dev = dev;
>> + drm->nvkm = nvkm;
>> nvif_parent_ctor(&nouveau_parent, &drm->parent);
>> drm->master.base.object.parent = &drm->parent;
>> @@ -830,7 +831,7 @@ static int nouveau_drm_probe(struct pci_dev *pdev,
>> pci_set_drvdata(pdev, drm_dev);
>> - ret = nouveau_drm_device_init(drm_dev);
>> + ret = nouveau_drm_device_init(drm_dev, device);
>
> NIT (and actually not directly related to this patch): It seems that we
> randomly switch between 'dev', 'drm_dev' for struct drm_device and
> 'device', 'nvkm' for nvkm_device. Since this is a cleanup series, mind
> adding a patch to get this straight?
Yeah, this was annoying me (again) recently. I haven't fixed all of it,
but I pulled in a patch from another series, and added another, to
address a bunch of the "drm_dev" usage. I think it'd be good to look at
this again after landing all the various other cleanups (some of which
end up removing other cases), and cleaning up whatever's left then.
>
>> if (ret)
>> goto fail_pci;
>> @@ -861,14 +862,10 @@ void
>> nouveau_drm_device_remove(struct drm_device *dev)
>> {
>> struct nouveau_drm *drm = nouveau_drm(dev);
>> - struct nvkm_client *client;
>> - struct nvkm_device *device;
>> + struct nvkm_device *device = drm->nvkm;
>> drm_dev_unplug(dev);
>> - client = nvxx_client(&drm->client.base);
>> - device = nvkm_device_find(client->device);
>> -
>> nouveau_drm_device_fini(dev);
>> drm_dev_put(dev);
>> nvkm_device_del(&device);
>> @@ -1376,7 +1373,7 @@ nouveau_platform_device_create(const struct
>> nvkm_device_tegra_func *func,
>> goto err_free;
>> }
>> - err = nouveau_drm_device_init(drm);
>> + err = nouveau_drm_device_init(drm, *pdevice);
>
> Same here, 'pdev' for struct platform_device and 'pdevice' for a ** to a
> struct nvkm_device seems confusing.
>
>> if (err)
>> goto err_put;
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.h
>> b/drivers/gpu/drm/nouveau/nouveau_drv.h
>> index e239c6bf4afa..b711e994407b 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_drv.h
>> +++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
>> @@ -201,6 +201,7 @@ u_memcpya(uint64_t user, unsigned int nmemb,
>> unsigned int size)
>> #include <nvif/parent.h>
>> struct nouveau_drm {
>> + struct nvkm_device *nvkm;
>> struct nvif_parent parent;
>> struct nouveau_cli master;
>> struct nouveau_cli client;
>
More information about the Nouveau
mailing list