Re: [PATCH 02/34] drm/nouveau: store nvkm_device pointer in nouveau_drm

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]<

 



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@xxxxxxxxxx>
---
  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?

  	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;




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux