public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc
@ 2024-06-30 16:59 Wu Hoi Pok
  2024-06-30 16:59 ` [PATCH v3 1/6] drm/radeon: change variable name "dev" to "ddev" for consistency Wu Hoi Pok
                   ` (6 more replies)
  0 siblings, 7 replies; 29+ messages in thread
From: Wu Hoi Pok @ 2024-06-30 16:59 UTC (permalink / raw)
  Cc: Thomas Zimmermann, Wu Hoi Pok, Alex Deucher, Christian König,
	Pan, Xinhui, David Airlie, Daniel Vetter, amd-gfx, dri-devel,
	linux-kernel

.load and drm_dev_alloc are deprecated. These patch series aims to
remove them.

v3: Both v1 and v2 sucks. v3 improves greatly on readability.

Wu Hoi Pok (6):
  drm/radeon: change variable name "dev" to "ddev" for consistency
  drm/radeon: remove load callback from kms_driver
  drm/radeon: use variable flags as parameter
  drm/radeon: add helper rdev_to_drm(rdev)
  drm/radeon: change rdev->ddev to rdev_to_drm(rdev)
  drm/radeon: change drm_dev_alloc to devm_drm_dev_alloc

 drivers/gpu/drm/radeon/atombios_encoders.c |  2 +-
 drivers/gpu/drm/radeon/cik.c               | 14 ++--
 drivers/gpu/drm/radeon/dce6_afmt.c         |  2 +-
 drivers/gpu/drm/radeon/evergreen.c         | 12 ++--
 drivers/gpu/drm/radeon/ni.c                |  2 +-
 drivers/gpu/drm/radeon/r100.c              | 24 +++----
 drivers/gpu/drm/radeon/r300.c              |  6 +-
 drivers/gpu/drm/radeon/r420.c              |  6 +-
 drivers/gpu/drm/radeon/r520.c              |  2 +-
 drivers/gpu/drm/radeon/r600.c              | 12 ++--
 drivers/gpu/drm/radeon/r600_cs.c           |  2 +-
 drivers/gpu/drm/radeon/r600_dpm.c          |  4 +-
 drivers/gpu/drm/radeon/r600_hdmi.c         |  2 +-
 drivers/gpu/drm/radeon/radeon.h            |  7 +-
 drivers/gpu/drm/radeon/radeon_acpi.c       | 10 +--
 drivers/gpu/drm/radeon/radeon_agp.c        |  2 +-
 drivers/gpu/drm/radeon/radeon_atombios.c   |  2 +-
 drivers/gpu/drm/radeon/radeon_audio.c      |  4 +-
 drivers/gpu/drm/radeon/radeon_combios.c    | 12 ++--
 drivers/gpu/drm/radeon/radeon_device.c     | 13 ++--
 drivers/gpu/drm/radeon/radeon_display.c    | 74 +++++++++++-----------
 drivers/gpu/drm/radeon/radeon_drv.c        | 27 +++++---
 drivers/gpu/drm/radeon/radeon_fbdev.c      | 26 ++++----
 drivers/gpu/drm/radeon/radeon_fence.c      |  8 +--
 drivers/gpu/drm/radeon/radeon_gem.c        |  2 +-
 drivers/gpu/drm/radeon/radeon_i2c.c        |  2 +-
 drivers/gpu/drm/radeon/radeon_ib.c         |  2 +-
 drivers/gpu/drm/radeon/radeon_irq_kms.c    | 12 ++--
 drivers/gpu/drm/radeon/radeon_kms.c        |  8 +--
 drivers/gpu/drm/radeon/radeon_object.c     |  2 +-
 drivers/gpu/drm/radeon/radeon_pm.c         | 20 +++---
 drivers/gpu/drm/radeon/radeon_ring.c       |  2 +-
 drivers/gpu/drm/radeon/radeon_ttm.c        |  6 +-
 drivers/gpu/drm/radeon/rs400.c             |  6 +-
 drivers/gpu/drm/radeon/rs600.c             | 14 ++--
 drivers/gpu/drm/radeon/rs690.c             |  2 +-
 drivers/gpu/drm/radeon/rv515.c             |  4 +-
 drivers/gpu/drm/radeon/rv770.c             |  2 +-
 drivers/gpu/drm/radeon/si.c                |  4 +-
 39 files changed, 184 insertions(+), 179 deletions(-)

-- 
2.45.2


^ permalink raw reply	[flat|nested] 29+ messages in thread

* [PATCH v3 1/6] drm/radeon: change variable name "dev" to "ddev" for consistency
  2024-06-30 16:59 [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc Wu Hoi Pok
@ 2024-06-30 16:59 ` Wu Hoi Pok
  2024-07-03  8:42   ` Thomas Zimmermann
  2024-06-30 16:59 ` [PATCH v3 2/6] drm/radeon: remove load callback from kms_driver Wu Hoi Pok
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 29+ messages in thread
From: Wu Hoi Pok @ 2024-06-30 16:59 UTC (permalink / raw)
  Cc: Thomas Zimmermann, Wu Hoi Pok, Alex Deucher, Christian König,
	Pan, Xinhui, David Airlie, Daniel Vetter, amd-gfx, dri-devel,
	linux-kernel

In the probe function of amdgpu, it uses "ddev" as the name of "struct drm_device *",
so I suggest renaming it to be consistent.

Signed-off-by: Wu Hoi Pok <wuhoipok@gmail.com>
---
 drivers/gpu/drm/radeon/radeon_drv.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index 7bf08164140e..739bb1da9dcc 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -259,7 +259,7 @@ static int radeon_pci_probe(struct pci_dev *pdev,
 			    const struct pci_device_id *ent)
 {
 	unsigned long flags = 0;
-	struct drm_device *dev;
+	struct drm_device *ddev;
 	int ret;
 
 	if (!ent)
@@ -300,28 +300,28 @@ static int radeon_pci_probe(struct pci_dev *pdev,
 	if (ret)
 		return ret;
 
-	dev = drm_dev_alloc(&kms_driver, &pdev->dev);
-	if (IS_ERR(dev))
-		return PTR_ERR(dev);
+	ddev = drm_dev_alloc(&kms_driver, &pdev->dev);
+	if (IS_ERR(ddev))
+		return PTR_ERR(ddev);
 
 	ret = pci_enable_device(pdev);
 	if (ret)
 		goto err_free;
 
-	pci_set_drvdata(pdev, dev);
+	pci_set_drvdata(pdev, ddev);
 
-	ret = drm_dev_register(dev, ent->driver_data);
+	ret = drm_dev_register(ddev, ent->driver_data);
 	if (ret)
 		goto err_agp;
 
-	radeon_fbdev_setup(dev->dev_private);
+	radeon_fbdev_setup(ddev->dev_private);
 
 	return 0;
 
 err_agp:
 	pci_disable_device(pdev);
 err_free:
-	drm_dev_put(dev);
+	drm_dev_put(ddev);
 	return ret;
 }
 
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v3 2/6] drm/radeon: remove load callback from kms_driver
  2024-06-30 16:59 [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc Wu Hoi Pok
  2024-06-30 16:59 ` [PATCH v3 1/6] drm/radeon: change variable name "dev" to "ddev" for consistency Wu Hoi Pok
@ 2024-06-30 16:59 ` Wu Hoi Pok
  2024-07-03  8:43   ` Thomas Zimmermann
  2024-09-19 16:56   ` Arthur Marsh
  2024-06-30 16:59 ` [PATCH v3 3/6] drm/radeon: use variable flags as parameter Wu Hoi Pok
                   ` (4 subsequent siblings)
  6 siblings, 2 replies; 29+ messages in thread
From: Wu Hoi Pok @ 2024-06-30 16:59 UTC (permalink / raw)
  Cc: Thomas Zimmermann, Wu Hoi Pok, Alex Deucher, Christian König,
	Pan, Xinhui, David Airlie, Daniel Vetter, amd-gfx, dri-devel,
	linux-kernel

The ".load" callback in "struct drm_driver" is deprecated. In order to remove
the callback, we have to manually call "radeon_driver_load_kms" instead.

Signed-off-by: Wu Hoi Pok <wuhoipok@gmail.com>
---
 drivers/gpu/drm/radeon/radeon_drv.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index 739bb1da9dcc..88d3de2a79f8 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -310,6 +310,10 @@ static int radeon_pci_probe(struct pci_dev *pdev,
 
 	pci_set_drvdata(pdev, ddev);
 
+	ret = radeon_driver_load_kms(ddev, flags);
+	if (ret)
+		goto err_agp;
+
 	ret = drm_dev_register(ddev, ent->driver_data);
 	if (ret)
 		goto err_agp;
@@ -569,7 +573,6 @@ static const struct drm_ioctl_desc radeon_ioctls_kms[] = {
 static const struct drm_driver kms_driver = {
 	.driver_features =
 	    DRIVER_GEM | DRIVER_RENDER | DRIVER_MODESET,
-	.load = radeon_driver_load_kms,
 	.open = radeon_driver_open_kms,
 	.postclose = radeon_driver_postclose_kms,
 	.unload = radeon_driver_unload_kms,
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v3 3/6] drm/radeon: use variable flags as parameter
  2024-06-30 16:59 [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc Wu Hoi Pok
  2024-06-30 16:59 ` [PATCH v3 1/6] drm/radeon: change variable name "dev" to "ddev" for consistency Wu Hoi Pok
  2024-06-30 16:59 ` [PATCH v3 2/6] drm/radeon: remove load callback from kms_driver Wu Hoi Pok
@ 2024-06-30 16:59 ` Wu Hoi Pok
  2024-07-03  8:44   ` Thomas Zimmermann
  2024-06-30 16:59 ` [PATCH v3 4/6] drm/radeon: add helper rdev_to_drm(rdev) Wu Hoi Pok
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 29+ messages in thread
From: Wu Hoi Pok @ 2024-06-30 16:59 UTC (permalink / raw)
  Cc: Thomas Zimmermann, Wu Hoi Pok, Alex Deucher, Christian König,
	Pan, Xinhui, David Airlie, Daniel Vetter, amd-gfx, dri-devel,
	linux-kernel

To be consistent with amdgpu driver, use "flags" as the parameter because
it is already assigned as "ent->driver_data".

Signed-off-by: Wu Hoi Pok <wuhoipok@gmail.com>
---
 drivers/gpu/drm/radeon/radeon_drv.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index 88d3de2a79f8..7b8aa8406751 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -314,7 +314,7 @@ static int radeon_pci_probe(struct pci_dev *pdev,
 	if (ret)
 		goto err_agp;
 
-	ret = drm_dev_register(ddev, ent->driver_data);
+	ret = drm_dev_register(ddev, flags);
 	if (ret)
 		goto err_agp;
 
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v3 4/6] drm/radeon: add helper rdev_to_drm(rdev)
  2024-06-30 16:59 [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc Wu Hoi Pok
                   ` (2 preceding siblings ...)
  2024-06-30 16:59 ` [PATCH v3 3/6] drm/radeon: use variable flags as parameter Wu Hoi Pok
@ 2024-06-30 16:59 ` Wu Hoi Pok
  2024-07-03  8:44   ` Thomas Zimmermann
  2024-06-30 16:59 ` [PATCH v3 5/6] drm/radeon: change rdev->ddev to rdev_to_drm(rdev) Wu Hoi Pok
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 29+ messages in thread
From: Wu Hoi Pok @ 2024-06-30 16:59 UTC (permalink / raw)
  Cc: Thomas Zimmermann, Wu Hoi Pok, Alex Deucher, Christian König,
	Pan, Xinhui, David Airlie, Daniel Vetter, amd-gfx, dri-devel,
	linux-kernel

Add helper rdev_to_drm(rdev), similar to amdgpu, most function should
access the "drm_device" with "rdev_to_drm(rdev)" instead, where amdgpu has
"adev_to_drm(adev)". It also makes changing from "*drm_device" to "drm_device"
in "radeon_devicce" later on easier.

Signed-off-by: Wu Hoi Pok <wuhoipok@gmail.com>
---
 drivers/gpu/drm/radeon/radeon.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index 0999c8eaae94..ae35c102a487 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -2476,6 +2476,11 @@ void r100_io_wreg(struct radeon_device *rdev, u32 reg, u32 v);
 u32 cik_mm_rdoorbell(struct radeon_device *rdev, u32 index);
 void cik_mm_wdoorbell(struct radeon_device *rdev, u32 index, u32 v);
 
+static inline struct drm_device *rdev_to_drm(struct radeon_device *rdev)
+{
+	return rdev->ddev;
+}
+
 /*
  * Cast helper
  */
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v3 5/6] drm/radeon: change rdev->ddev to rdev_to_drm(rdev)
  2024-06-30 16:59 [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc Wu Hoi Pok
                   ` (3 preceding siblings ...)
  2024-06-30 16:59 ` [PATCH v3 4/6] drm/radeon: add helper rdev_to_drm(rdev) Wu Hoi Pok
@ 2024-06-30 16:59 ` Wu Hoi Pok
  2024-07-03  8:46   ` Thomas Zimmermann
  2024-06-30 16:59 ` [PATCH v3 6/6] drm/radeon: change drm_dev_alloc to devm_drm_dev_alloc Wu Hoi Pok
  2024-07-03  8:52 ` [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc Thomas Zimmermann
  6 siblings, 1 reply; 29+ messages in thread
From: Wu Hoi Pok @ 2024-06-30 16:59 UTC (permalink / raw)
  Cc: Thomas Zimmermann, Wu Hoi Pok, Alex Deucher, Christian König,
	Pan, Xinhui, David Airlie, Daniel Vetter, amd-gfx, dri-devel,
	linux-kernel

This patch changes the way "drm_device" is accessed. It uses "rdev_to_drm(rdev)"
instead of accessing the struct member directly.

Signed-off-by: Wu Hoi Pok <wuhoipok@gmail.com>
---
 drivers/gpu/drm/radeon/atombios_encoders.c |  2 +-
 drivers/gpu/drm/radeon/cik.c               | 14 ++--
 drivers/gpu/drm/radeon/dce6_afmt.c         |  2 +-
 drivers/gpu/drm/radeon/evergreen.c         | 12 ++--
 drivers/gpu/drm/radeon/ni.c                |  2 +-
 drivers/gpu/drm/radeon/r100.c              | 24 +++----
 drivers/gpu/drm/radeon/r300.c              |  6 +-
 drivers/gpu/drm/radeon/r420.c              |  6 +-
 drivers/gpu/drm/radeon/r520.c              |  2 +-
 drivers/gpu/drm/radeon/r600.c              | 12 ++--
 drivers/gpu/drm/radeon/r600_cs.c           |  2 +-
 drivers/gpu/drm/radeon/r600_dpm.c          |  4 +-
 drivers/gpu/drm/radeon/r600_hdmi.c         |  2 +-
 drivers/gpu/drm/radeon/radeon_acpi.c       | 10 +--
 drivers/gpu/drm/radeon/radeon_agp.c        |  2 +-
 drivers/gpu/drm/radeon/radeon_atombios.c   |  2 +-
 drivers/gpu/drm/radeon/radeon_audio.c      |  4 +-
 drivers/gpu/drm/radeon/radeon_combios.c    | 12 ++--
 drivers/gpu/drm/radeon/radeon_device.c     | 10 +--
 drivers/gpu/drm/radeon/radeon_display.c    | 74 +++++++++++-----------
 drivers/gpu/drm/radeon/radeon_fbdev.c      | 26 ++++----
 drivers/gpu/drm/radeon/radeon_fence.c      |  8 +--
 drivers/gpu/drm/radeon/radeon_gem.c        |  2 +-
 drivers/gpu/drm/radeon/radeon_i2c.c        |  2 +-
 drivers/gpu/drm/radeon/radeon_ib.c         |  2 +-
 drivers/gpu/drm/radeon/radeon_irq_kms.c    | 12 ++--
 drivers/gpu/drm/radeon/radeon_object.c     |  2 +-
 drivers/gpu/drm/radeon/radeon_pm.c         | 20 +++---
 drivers/gpu/drm/radeon/radeon_ring.c       |  2 +-
 drivers/gpu/drm/radeon/radeon_ttm.c        |  6 +-
 drivers/gpu/drm/radeon/rs400.c             |  6 +-
 drivers/gpu/drm/radeon/rs600.c             | 14 ++--
 drivers/gpu/drm/radeon/rs690.c             |  2 +-
 drivers/gpu/drm/radeon/rv515.c             |  4 +-
 drivers/gpu/drm/radeon/rv770.c             |  2 +-
 drivers/gpu/drm/radeon/si.c                |  4 +-
 36 files changed, 159 insertions(+), 159 deletions(-)

diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
index 03e6871b3065..c82e0fbc49b4 100644
--- a/drivers/gpu/drm/radeon/atombios_encoders.c
+++ b/drivers/gpu/drm/radeon/atombios_encoders.c
@@ -2179,7 +2179,7 @@ int radeon_atom_pick_dig_encoder(struct drm_encoder *encoder, int fe_idx)
 void
 radeon_atom_encoder_init(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct drm_encoder *encoder;
 
 	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
index b5e96a8fc2c1..11a492f21157 100644
--- a/drivers/gpu/drm/radeon/cik.c
+++ b/drivers/gpu/drm/radeon/cik.c
@@ -7585,7 +7585,7 @@ int cik_irq_process(struct radeon_device *rdev)
 					DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
 
 				if (rdev->irq.crtc_vblank_int[0]) {
-					drm_handle_vblank(rdev->ddev, 0);
+					drm_handle_vblank(rdev_to_drm(rdev), 0);
 					rdev->pm.vblank_sync = true;
 					wake_up(&rdev->irq.vblank_queue);
 				}
@@ -7615,7 +7615,7 @@ int cik_irq_process(struct radeon_device *rdev)
 					DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
 
 				if (rdev->irq.crtc_vblank_int[1]) {
-					drm_handle_vblank(rdev->ddev, 1);
+					drm_handle_vblank(rdev_to_drm(rdev), 1);
 					rdev->pm.vblank_sync = true;
 					wake_up(&rdev->irq.vblank_queue);
 				}
@@ -7645,7 +7645,7 @@ int cik_irq_process(struct radeon_device *rdev)
 					DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
 
 				if (rdev->irq.crtc_vblank_int[2]) {
-					drm_handle_vblank(rdev->ddev, 2);
+					drm_handle_vblank(rdev_to_drm(rdev), 2);
 					rdev->pm.vblank_sync = true;
 					wake_up(&rdev->irq.vblank_queue);
 				}
@@ -7675,7 +7675,7 @@ int cik_irq_process(struct radeon_device *rdev)
 					DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
 
 				if (rdev->irq.crtc_vblank_int[3]) {
-					drm_handle_vblank(rdev->ddev, 3);
+					drm_handle_vblank(rdev_to_drm(rdev), 3);
 					rdev->pm.vblank_sync = true;
 					wake_up(&rdev->irq.vblank_queue);
 				}
@@ -7705,7 +7705,7 @@ int cik_irq_process(struct radeon_device *rdev)
 					DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
 
 				if (rdev->irq.crtc_vblank_int[4]) {
-					drm_handle_vblank(rdev->ddev, 4);
+					drm_handle_vblank(rdev_to_drm(rdev), 4);
 					rdev->pm.vblank_sync = true;
 					wake_up(&rdev->irq.vblank_queue);
 				}
@@ -7735,7 +7735,7 @@ int cik_irq_process(struct radeon_device *rdev)
 					DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
 
 				if (rdev->irq.crtc_vblank_int[5]) {
-					drm_handle_vblank(rdev->ddev, 5);
+					drm_handle_vblank(rdev_to_drm(rdev), 5);
 					rdev->pm.vblank_sync = true;
 					wake_up(&rdev->irq.vblank_queue);
 				}
@@ -8581,7 +8581,7 @@ int cik_init(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 
 	/* Fence driver */
 	radeon_fence_driver_init(rdev);
diff --git a/drivers/gpu/drm/radeon/dce6_afmt.c b/drivers/gpu/drm/radeon/dce6_afmt.c
index 4c06f47453fd..d6ab93ed9ec4 100644
--- a/drivers/gpu/drm/radeon/dce6_afmt.c
+++ b/drivers/gpu/drm/radeon/dce6_afmt.c
@@ -91,7 +91,7 @@ struct r600_audio_pin *dce6_audio_get_pin(struct radeon_device *rdev)
 			pin = &rdev->audio.pin[i];
 			pin_count = 0;
 
-			list_for_each_entry(encoder, &rdev->ddev->mode_config.encoder_list, head) {
+			list_for_each_entry(encoder, &rdev_to_drm(rdev)->mode_config.encoder_list, head) {
 				if (radeon_encoder_is_digital(encoder)) {
 					radeon_encoder = to_radeon_encoder(encoder);
 					dig = radeon_encoder->enc_priv;
diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
index c634dc28e6c3..bc4ab71613a5 100644
--- a/drivers/gpu/drm/radeon/evergreen.c
+++ b/drivers/gpu/drm/radeon/evergreen.c
@@ -1673,7 +1673,7 @@ void evergreen_pm_misc(struct radeon_device *rdev)
  */
 void evergreen_pm_prepare(struct radeon_device *rdev)
 {
-	struct drm_device *ddev = rdev->ddev;
+	struct drm_device *ddev = rdev_to_drm(rdev);
 	struct drm_crtc *crtc;
 	struct radeon_crtc *radeon_crtc;
 	u32 tmp;
@@ -1698,7 +1698,7 @@ void evergreen_pm_prepare(struct radeon_device *rdev)
  */
 void evergreen_pm_finish(struct radeon_device *rdev)
 {
-	struct drm_device *ddev = rdev->ddev;
+	struct drm_device *ddev = rdev_to_drm(rdev);
 	struct drm_crtc *crtc;
 	struct radeon_crtc *radeon_crtc;
 	u32 tmp;
@@ -1763,7 +1763,7 @@ void evergreen_hpd_set_polarity(struct radeon_device *rdev,
  */
 void evergreen_hpd_init(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct drm_connector *connector;
 	unsigned enabled = 0;
 	u32 tmp = DC_HPDx_CONNECTION_TIMER(0x9c4) |
@@ -1804,7 +1804,7 @@ void evergreen_hpd_init(struct radeon_device *rdev)
  */
 void evergreen_hpd_fini(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct drm_connector *connector;
 	unsigned disabled = 0;
 
@@ -4753,7 +4753,7 @@ int evergreen_irq_process(struct radeon_device *rdev)
 				event_name = "vblank";
 
 				if (rdev->irq.crtc_vblank_int[crtc_idx]) {
-					drm_handle_vblank(rdev->ddev, crtc_idx);
+					drm_handle_vblank(rdev_to_drm(rdev), crtc_idx);
 					rdev->pm.vblank_sync = true;
 					wake_up(&rdev->irq.vblank_queue);
 				}
@@ -5211,7 +5211,7 @@ int evergreen_init(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 	/* Fence driver */
 	radeon_fence_driver_init(rdev);
 	/* initialize AGP */
diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
index 77aee99e473a..3890911fe693 100644
--- a/drivers/gpu/drm/radeon/ni.c
+++ b/drivers/gpu/drm/radeon/ni.c
@@ -2360,7 +2360,7 @@ int cayman_init(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 	/* Fence driver */
 	radeon_fence_driver_init(rdev);
 	/* initialize memory controller */
diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
index 0b1e19345f43..d7d7d23bf9a1 100644
--- a/drivers/gpu/drm/radeon/r100.c
+++ b/drivers/gpu/drm/radeon/r100.c
@@ -459,7 +459,7 @@ void r100_pm_misc(struct radeon_device *rdev)
  */
 void r100_pm_prepare(struct radeon_device *rdev)
 {
-	struct drm_device *ddev = rdev->ddev;
+	struct drm_device *ddev = rdev_to_drm(rdev);
 	struct drm_crtc *crtc;
 	struct radeon_crtc *radeon_crtc;
 	u32 tmp;
@@ -490,7 +490,7 @@ void r100_pm_prepare(struct radeon_device *rdev)
  */
 void r100_pm_finish(struct radeon_device *rdev)
 {
-	struct drm_device *ddev = rdev->ddev;
+	struct drm_device *ddev = rdev_to_drm(rdev);
 	struct drm_crtc *crtc;
 	struct radeon_crtc *radeon_crtc;
 	u32 tmp;
@@ -603,7 +603,7 @@ void r100_hpd_set_polarity(struct radeon_device *rdev,
  */
 void r100_hpd_init(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct drm_connector *connector;
 	unsigned enable = 0;
 
@@ -626,7 +626,7 @@ void r100_hpd_init(struct radeon_device *rdev)
  */
 void r100_hpd_fini(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct drm_connector *connector;
 	unsigned disable = 0;
 
@@ -798,7 +798,7 @@ int r100_irq_process(struct radeon_device *rdev)
 		/* Vertical blank interrupts */
 		if (status & RADEON_CRTC_VBLANK_STAT) {
 			if (rdev->irq.crtc_vblank_int[0]) {
-				drm_handle_vblank(rdev->ddev, 0);
+				drm_handle_vblank(rdev_to_drm(rdev), 0);
 				rdev->pm.vblank_sync = true;
 				wake_up(&rdev->irq.vblank_queue);
 			}
@@ -807,7 +807,7 @@ int r100_irq_process(struct radeon_device *rdev)
 		}
 		if (status & RADEON_CRTC2_VBLANK_STAT) {
 			if (rdev->irq.crtc_vblank_int[1]) {
-				drm_handle_vblank(rdev->ddev, 1);
+				drm_handle_vblank(rdev_to_drm(rdev), 1);
 				rdev->pm.vblank_sync = true;
 				wake_up(&rdev->irq.vblank_queue);
 			}
@@ -1471,7 +1471,7 @@ int r100_cs_packet_parse_vline(struct radeon_cs_parser *p)
 	header = radeon_get_ib_value(p, h_idx);
 	crtc_id = radeon_get_ib_value(p, h_idx + 5);
 	reg = R100_CP_PACKET0_GET_REG(header);
-	crtc = drm_crtc_find(p->rdev->ddev, p->filp, crtc_id);
+	crtc = drm_crtc_find(rdev_to_drm(p->rdev), p->filp, crtc_id);
 	if (!crtc) {
 		DRM_ERROR("cannot find crtc %d\n", crtc_id);
 		return -ENOENT;
@@ -3059,7 +3059,7 @@ DEFINE_SHOW_ATTRIBUTE(r100_debugfs_mc_info);
 void  r100_debugfs_rbbm_init(struct radeon_device *rdev)
 {
 #if defined(CONFIG_DEBUG_FS)
-	struct dentry *root = rdev->ddev->primary->debugfs_root;
+	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
 
 	debugfs_create_file("r100_rbbm_info", 0444, root, rdev,
 			    &r100_debugfs_rbbm_info_fops);
@@ -3069,7 +3069,7 @@ void  r100_debugfs_rbbm_init(struct radeon_device *rdev)
 void r100_debugfs_cp_init(struct radeon_device *rdev)
 {
 #if defined(CONFIG_DEBUG_FS)
-	struct dentry *root = rdev->ddev->primary->debugfs_root;
+	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
 
 	debugfs_create_file("r100_cp_ring_info", 0444, root, rdev,
 			    &r100_debugfs_cp_ring_info_fops);
@@ -3081,7 +3081,7 @@ void r100_debugfs_cp_init(struct radeon_device *rdev)
 void  r100_debugfs_mc_info_init(struct radeon_device *rdev)
 {
 #if defined(CONFIG_DEBUG_FS)
-	struct dentry *root = rdev->ddev->primary->debugfs_root;
+	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
 
 	debugfs_create_file("r100_mc_info", 0444, root, rdev,
 			    &r100_debugfs_mc_info_fops);
@@ -3947,7 +3947,7 @@ int r100_resume(struct radeon_device *rdev)
 			RREG32(R_0007C0_CP_STAT));
 	}
 	/* post */
-	radeon_combios_asic_init(rdev->ddev);
+	radeon_combios_asic_init(rdev_to_drm(rdev));
 	/* Resume clock after posting */
 	r100_clock_startup(rdev);
 	/* Initialize surface registers */
@@ -4056,7 +4056,7 @@ int r100_init(struct radeon_device *rdev)
 	/* Set asic errata */
 	r100_errata(rdev);
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 	/* initialize AGP */
 	if (rdev->flags & RADEON_IS_AGP) {
 		r = radeon_agp_init(rdev);
diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
index 1620f534f55f..05c13102a8cb 100644
--- a/drivers/gpu/drm/radeon/r300.c
+++ b/drivers/gpu/drm/radeon/r300.c
@@ -616,7 +616,7 @@ DEFINE_SHOW_ATTRIBUTE(rv370_debugfs_pcie_gart_info);
 static void rv370_debugfs_pcie_gart_info_init(struct radeon_device *rdev)
 {
 #if defined(CONFIG_DEBUG_FS)
-	struct dentry *root = rdev->ddev->primary->debugfs_root;
+	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
 
 	debugfs_create_file("rv370_pcie_gart_info", 0444, root, rdev,
 			    &rv370_debugfs_pcie_gart_info_fops);
@@ -1452,7 +1452,7 @@ int r300_resume(struct radeon_device *rdev)
 			RREG32(R_0007C0_CP_STAT));
 	}
 	/* post */
-	radeon_combios_asic_init(rdev->ddev);
+	radeon_combios_asic_init(rdev_to_drm(rdev));
 	/* Resume clock after posting */
 	r300_clock_startup(rdev);
 	/* Initialize surface registers */
@@ -1538,7 +1538,7 @@ int r300_init(struct radeon_device *rdev)
 	/* Set asic errata */
 	r300_errata(rdev);
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 	/* initialize AGP */
 	if (rdev->flags & RADEON_IS_AGP) {
 		r = radeon_agp_init(rdev);
diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c
index a979662eaa73..9a31cdec6415 100644
--- a/drivers/gpu/drm/radeon/r420.c
+++ b/drivers/gpu/drm/radeon/r420.c
@@ -322,7 +322,7 @@ int r420_resume(struct radeon_device *rdev)
 	if (rdev->is_atom_bios) {
 		atom_asic_init(rdev->mode_info.atom_context);
 	} else {
-		radeon_combios_asic_init(rdev->ddev);
+		radeon_combios_asic_init(rdev_to_drm(rdev));
 	}
 	/* Resume clock after posting */
 	r420_clock_resume(rdev);
@@ -414,7 +414,7 @@ int r420_init(struct radeon_device *rdev)
 		return -EINVAL;
 
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 	/* initialize AGP */
 	if (rdev->flags & RADEON_IS_AGP) {
 		r = radeon_agp_init(rdev);
@@ -493,7 +493,7 @@ DEFINE_SHOW_ATTRIBUTE(r420_debugfs_pipes_info);
 void r420_debugfs_pipes_info_init(struct radeon_device *rdev)
 {
 #if defined(CONFIG_DEBUG_FS)
-	struct dentry *root = rdev->ddev->primary->debugfs_root;
+	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
 
 	debugfs_create_file("r420_pipes_info", 0444, root, rdev,
 			    &r420_debugfs_pipes_info_fops);
diff --git a/drivers/gpu/drm/radeon/r520.c b/drivers/gpu/drm/radeon/r520.c
index 6cbcaa845192..08e127b3249a 100644
--- a/drivers/gpu/drm/radeon/r520.c
+++ b/drivers/gpu/drm/radeon/r520.c
@@ -287,7 +287,7 @@ int r520_init(struct radeon_device *rdev)
 		atom_asic_init(rdev->mode_info.atom_context);
 	}
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 	/* initialize AGP */
 	if (rdev->flags & RADEON_IS_AGP) {
 		r = radeon_agp_init(rdev);
diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
index 087d41e370fd..8b62f7faa5b9 100644
--- a/drivers/gpu/drm/radeon/r600.c
+++ b/drivers/gpu/drm/radeon/r600.c
@@ -950,7 +950,7 @@ void r600_hpd_set_polarity(struct radeon_device *rdev,
 
 void r600_hpd_init(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct drm_connector *connector;
 	unsigned enable = 0;
 
@@ -1017,7 +1017,7 @@ void r600_hpd_init(struct radeon_device *rdev)
 
 void r600_hpd_fini(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct drm_connector *connector;
 	unsigned disable = 0;
 
@@ -3280,7 +3280,7 @@ int r600_init(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 	/* Fence driver */
 	radeon_fence_driver_init(rdev);
 	if (rdev->flags & RADEON_IS_AGP) {
@@ -4136,7 +4136,7 @@ int r600_irq_process(struct radeon_device *rdev)
 					DRM_DEBUG("IH: D1 vblank - IH event w/o asserted irq bit?\n");
 
 				if (rdev->irq.crtc_vblank_int[0]) {
-					drm_handle_vblank(rdev->ddev, 0);
+					drm_handle_vblank(rdev_to_drm(rdev), 0);
 					rdev->pm.vblank_sync = true;
 					wake_up(&rdev->irq.vblank_queue);
 				}
@@ -4166,7 +4166,7 @@ int r600_irq_process(struct radeon_device *rdev)
 					DRM_DEBUG("IH: D2 vblank - IH event w/o asserted irq bit?\n");
 
 				if (rdev->irq.crtc_vblank_int[1]) {
-					drm_handle_vblank(rdev->ddev, 1);
+					drm_handle_vblank(rdev_to_drm(rdev), 1);
 					rdev->pm.vblank_sync = true;
 					wake_up(&rdev->irq.vblank_queue);
 				}
@@ -4358,7 +4358,7 @@ DEFINE_SHOW_ATTRIBUTE(r600_debugfs_mc_info);
 static void r600_debugfs_mc_info_init(struct radeon_device *rdev)
 {
 #if defined(CONFIG_DEBUG_FS)
-	struct dentry *root = rdev->ddev->primary->debugfs_root;
+	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
 
 	debugfs_create_file("r600_mc_info", 0444, root, rdev,
 			    &r600_debugfs_mc_info_fops);
diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c
index 6cf54a747749..1b2d31c4d77c 100644
--- a/drivers/gpu/drm/radeon/r600_cs.c
+++ b/drivers/gpu/drm/radeon/r600_cs.c
@@ -884,7 +884,7 @@ int r600_cs_common_vline_parse(struct radeon_cs_parser *p,
 	crtc_id = radeon_get_ib_value(p, h_idx + 2 + 7 + 1);
 	reg = R600_CP_PACKET0_GET_REG(header);
 
-	crtc = drm_crtc_find(p->rdev->ddev, p->filp, crtc_id);
+	crtc = drm_crtc_find(rdev_to_drm(p->rdev), p->filp, crtc_id);
 	if (!crtc) {
 		DRM_ERROR("cannot find crtc %d\n", crtc_id);
 		return -ENOENT;
diff --git a/drivers/gpu/drm/radeon/r600_dpm.c b/drivers/gpu/drm/radeon/r600_dpm.c
index 64980a61d38a..81d58ef667dd 100644
--- a/drivers/gpu/drm/radeon/r600_dpm.c
+++ b/drivers/gpu/drm/radeon/r600_dpm.c
@@ -153,7 +153,7 @@ void r600_dpm_print_ps_status(struct radeon_device *rdev,
 
 u32 r600_dpm_get_vblank_time(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct drm_crtc *crtc;
 	struct radeon_crtc *radeon_crtc;
 	u32 vblank_in_pixels;
@@ -180,7 +180,7 @@ u32 r600_dpm_get_vblank_time(struct radeon_device *rdev)
 
 u32 r600_dpm_get_vrefresh(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct drm_crtc *crtc;
 	struct radeon_crtc *radeon_crtc;
 	u32 vrefresh = 0;
diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
index f3551ebaa2f0..661f374f5f27 100644
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
@@ -116,7 +116,7 @@ void r600_audio_update_hdmi(struct work_struct *work)
 {
 	struct radeon_device *rdev = container_of(work, struct radeon_device,
 						  audio_work);
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct r600_audio_pin audio_status = r600_audio_status(rdev);
 	struct drm_encoder *encoder;
 	bool changed = false;
diff --git a/drivers/gpu/drm/radeon/radeon_acpi.c b/drivers/gpu/drm/radeon/radeon_acpi.c
index 603a78e41ba5..22ce61bdfc06 100644
--- a/drivers/gpu/drm/radeon/radeon_acpi.c
+++ b/drivers/gpu/drm/radeon/radeon_acpi.c
@@ -405,11 +405,11 @@ static int radeon_atif_handler(struct radeon_device *rdev,
 	if (req.pending & ATIF_DGPU_DISPLAY_EVENT) {
 		if ((rdev->flags & RADEON_IS_PX) &&
 		    radeon_atpx_dgpu_req_power_for_displays()) {
-			pm_runtime_get_sync(rdev->ddev->dev);
+			pm_runtime_get_sync(rdev_to_drm(rdev)->dev);
 			/* Just fire off a uevent and let userspace tell us what to do */
-			drm_helper_hpd_irq_event(rdev->ddev);
-			pm_runtime_mark_last_busy(rdev->ddev->dev);
-			pm_runtime_put_autosuspend(rdev->ddev->dev);
+			drm_helper_hpd_irq_event(rdev_to_drm(rdev));
+			pm_runtime_mark_last_busy(rdev_to_drm(rdev)->dev);
+			pm_runtime_put_autosuspend(rdev_to_drm(rdev)->dev);
 		}
 	}
 	/* TODO: check other events */
@@ -736,7 +736,7 @@ int radeon_acpi_init(struct radeon_device *rdev)
 		struct radeon_encoder *target = NULL;
 
 		/* Find the encoder controlling the brightness */
-		list_for_each_entry(tmp, &rdev->ddev->mode_config.encoder_list,
+		list_for_each_entry(tmp, &rdev_to_drm(rdev)->mode_config.encoder_list,
 				head) {
 			struct radeon_encoder *enc = to_radeon_encoder(tmp);
 
diff --git a/drivers/gpu/drm/radeon/radeon_agp.c b/drivers/gpu/drm/radeon/radeon_agp.c
index a3d749e350f9..89d7b0e9e79f 100644
--- a/drivers/gpu/drm/radeon/radeon_agp.c
+++ b/drivers/gpu/drm/radeon/radeon_agp.c
@@ -161,7 +161,7 @@ struct radeon_agp_head *radeon_agp_head_init(struct drm_device *dev)
 
 static int radeon_agp_head_acquire(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct pci_dev *pdev = to_pci_dev(dev->dev);
 
 	if (!rdev->agp)
diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
index 10793a433bf5..97c4e10d0550 100644
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
@@ -187,7 +187,7 @@ void radeon_atombios_i2c_init(struct radeon_device *rdev)
 
 			if (i2c.valid) {
 				sprintf(stmp, "0x%x", i2c.i2c_id);
-				rdev->i2c_bus[i] = radeon_i2c_create(rdev->ddev, &i2c, stmp);
+				rdev->i2c_bus[i] = radeon_i2c_create(rdev_to_drm(rdev), &i2c, stmp);
 			}
 			gpio = (ATOM_GPIO_I2C_ASSIGMENT *)
 				((u8 *)gpio + sizeof(ATOM_GPIO_I2C_ASSIGMENT));
diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c
index 0bcd767b9f47..47aa06a9a942 100644
--- a/drivers/gpu/drm/radeon/radeon_audio.c
+++ b/drivers/gpu/drm/radeon/radeon_audio.c
@@ -196,7 +196,7 @@ static void radeon_audio_enable(struct radeon_device *rdev,
 		return;
 
 	if (rdev->mode_info.mode_config_initialized) {
-		list_for_each_entry(encoder, &rdev->ddev->mode_config.encoder_list, head) {
+		list_for_each_entry(encoder, &rdev_to_drm(rdev)->mode_config.encoder_list, head) {
 			if (radeon_encoder_is_digital(encoder)) {
 				radeon_encoder = to_radeon_encoder(encoder);
 				dig = radeon_encoder->enc_priv;
@@ -760,7 +760,7 @@ static int radeon_audio_component_get_eld(struct device *kdev, int port,
 	if (!rdev->audio.enabled || !rdev->mode_info.mode_config_initialized)
 		return 0;
 
-	list_for_each_entry(encoder, &rdev->ddev->mode_config.encoder_list, head) {
+	list_for_each_entry(encoder, &rdev_to_drm(rdev)->mode_config.encoder_list, head) {
 		if (!radeon_encoder_is_digital(encoder))
 			continue;
 		radeon_encoder = to_radeon_encoder(encoder);
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
index 6952b1273b0f..41ddc576f8f8 100644
--- a/drivers/gpu/drm/radeon/radeon_combios.c
+++ b/drivers/gpu/drm/radeon/radeon_combios.c
@@ -372,7 +372,7 @@ bool radeon_combios_check_hardcoded_edid(struct radeon_device *rdev)
 	int edid_info, size;
 	struct edid *edid;
 	unsigned char *raw;
-	edid_info = combios_get_table_offset(rdev->ddev, COMBIOS_HARDCODED_EDID_TABLE);
+	edid_info = combios_get_table_offset(rdev_to_drm(rdev), COMBIOS_HARDCODED_EDID_TABLE);
 	if (!edid_info)
 		return false;
 
@@ -642,7 +642,7 @@ static struct radeon_i2c_bus_rec combios_setup_i2c_bus(struct radeon_device *rde
 
 static struct radeon_i2c_bus_rec radeon_combios_get_i2c_info_from_table(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct radeon_i2c_bus_rec i2c;
 	u16 offset;
 	u8 id, blocks, clk, data;
@@ -670,7 +670,7 @@ static struct radeon_i2c_bus_rec radeon_combios_get_i2c_info_from_table(struct r
 
 void radeon_combios_i2c_init(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct radeon_i2c_bus_rec i2c;
 
 	/* actual hw pads
@@ -812,7 +812,7 @@ bool radeon_combios_get_clock_info(struct drm_device *dev)
 
 bool radeon_combios_sideport_present(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	u16 igp_info;
 
 	/* sideport is AMD only */
@@ -915,7 +915,7 @@ struct radeon_encoder_primary_dac *radeon_combios_get_primary_dac_info(struct
 enum radeon_tv_std
 radeon_combios_get_tv_info(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	uint16_t tv_info;
 	enum radeon_tv_std tv_std = TV_STD_NTSC;
 
@@ -2637,7 +2637,7 @@ static const char *thermal_controller_names[] = {
 
 void radeon_combios_get_power_modes(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	u16 offset, misc, misc2 = 0;
 	u8 rev, tmp;
 	int state_index = 0;
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index afbb3a80c0c6..32851632643d 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -760,7 +760,7 @@ bool radeon_boot_test_post_card(struct radeon_device *rdev)
 		if (rdev->is_atom_bios)
 			atom_asic_init(rdev->mode_info.atom_context);
 		else
-			radeon_combios_asic_init(rdev->ddev);
+			radeon_combios_asic_init(rdev_to_drm(rdev));
 		return true;
 	} else {
 		dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n");
@@ -980,7 +980,7 @@ int radeon_atombios_init(struct radeon_device *rdev)
 		return -ENOMEM;
 
 	rdev->mode_info.atom_card_info = atom_card_info;
-	atom_card_info->dev = rdev->ddev;
+	atom_card_info->dev = rdev_to_drm(rdev);
 	atom_card_info->reg_read = cail_reg_read;
 	atom_card_info->reg_write = cail_reg_write;
 	/* needed for iio ops */
@@ -1005,7 +1005,7 @@ int radeon_atombios_init(struct radeon_device *rdev)
 
 	mutex_init(&rdev->mode_info.atom_context->mutex);
 	mutex_init(&rdev->mode_info.atom_context->scratch_mutex);
-	radeon_atom_initialize_bios_scratch_regs(rdev->ddev);
+	radeon_atom_initialize_bios_scratch_regs(rdev_to_drm(rdev));
 	atom_allocate_fb_scratch(rdev->mode_info.atom_context);
 	return 0;
 }
@@ -1049,7 +1049,7 @@ void radeon_atombios_fini(struct radeon_device *rdev)
  */
 int radeon_combios_init(struct radeon_device *rdev)
 {
-	radeon_combios_initialize_bios_scratch_regs(rdev->ddev);
+	radeon_combios_initialize_bios_scratch_regs(rdev_to_drm(rdev));
 	return 0;
 }
 
@@ -1847,7 +1847,7 @@ int radeon_gpu_reset(struct radeon_device *rdev)
 
 	downgrade_write(&rdev->exclusive_lock);
 
-	drm_helper_resume_force_mode(rdev->ddev);
+	drm_helper_resume_force_mode(rdev_to_drm(rdev));
 
 	/* set the power state here in case we are a PX system or headless */
 	if ((rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled)
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index 843383f7237f..829d44cf6759 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -302,13 +302,13 @@ void radeon_crtc_handle_vblank(struct radeon_device *rdev, int crtc_id)
 	if ((radeon_use_pflipirq == 2) && ASIC_IS_DCE4(rdev))
 		return;
 
-	spin_lock_irqsave(&rdev->ddev->event_lock, flags);
+	spin_lock_irqsave(&rdev_to_drm(rdev)->event_lock, flags);
 	if (radeon_crtc->flip_status != RADEON_FLIP_SUBMITTED) {
 		DRM_DEBUG_DRIVER("radeon_crtc->flip_status = %d != "
 				 "RADEON_FLIP_SUBMITTED(%d)\n",
 				 radeon_crtc->flip_status,
 				 RADEON_FLIP_SUBMITTED);
-		spin_unlock_irqrestore(&rdev->ddev->event_lock, flags);
+		spin_unlock_irqrestore(&rdev_to_drm(rdev)->event_lock, flags);
 		return;
 	}
 
@@ -334,7 +334,7 @@ void radeon_crtc_handle_vblank(struct radeon_device *rdev, int crtc_id)
 	 */
 	if (update_pending &&
 	    (DRM_SCANOUTPOS_VALID &
-	     radeon_get_crtc_scanoutpos(rdev->ddev, crtc_id,
+	     radeon_get_crtc_scanoutpos(rdev_to_drm(rdev), crtc_id,
 					GET_DISTANCE_TO_VBLANKSTART,
 					&vpos, &hpos, NULL, NULL,
 					&rdev->mode_info.crtcs[crtc_id]->base.hwmode)) &&
@@ -347,7 +347,7 @@ void radeon_crtc_handle_vblank(struct radeon_device *rdev, int crtc_id)
 		 */
 		update_pending = 0;
 	}
-	spin_unlock_irqrestore(&rdev->ddev->event_lock, flags);
+	spin_unlock_irqrestore(&rdev_to_drm(rdev)->event_lock, flags);
 	if (!update_pending)
 		radeon_crtc_handle_flip(rdev, crtc_id);
 }
@@ -370,14 +370,14 @@ void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id)
 	if (radeon_crtc == NULL)
 		return;
 
-	spin_lock_irqsave(&rdev->ddev->event_lock, flags);
+	spin_lock_irqsave(&rdev_to_drm(rdev)->event_lock, flags);
 	work = radeon_crtc->flip_work;
 	if (radeon_crtc->flip_status != RADEON_FLIP_SUBMITTED) {
 		DRM_DEBUG_DRIVER("radeon_crtc->flip_status = %d != "
 				 "RADEON_FLIP_SUBMITTED(%d)\n",
 				 radeon_crtc->flip_status,
 				 RADEON_FLIP_SUBMITTED);
-		spin_unlock_irqrestore(&rdev->ddev->event_lock, flags);
+		spin_unlock_irqrestore(&rdev_to_drm(rdev)->event_lock, flags);
 		return;
 	}
 
@@ -389,7 +389,7 @@ void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id)
 	if (work->event)
 		drm_crtc_send_vblank_event(&radeon_crtc->base, work->event);
 
-	spin_unlock_irqrestore(&rdev->ddev->event_lock, flags);
+	spin_unlock_irqrestore(&rdev_to_drm(rdev)->event_lock, flags);
 
 	drm_crtc_vblank_put(&radeon_crtc->base);
 	radeon_irq_kms_pflip_irq_put(rdev, work->crtc_id);
@@ -408,7 +408,7 @@ static void radeon_flip_work_func(struct work_struct *__work)
 	struct radeon_flip_work *work =
 		container_of(__work, struct radeon_flip_work, flip_work);
 	struct radeon_device *rdev = work->rdev;
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[work->crtc_id];
 
 	struct drm_crtc *crtc = &radeon_crtc->base;
@@ -1401,7 +1401,7 @@ static int radeon_modeset_create_props(struct radeon_device *rdev)
 
 	if (rdev->is_atom_bios) {
 		rdev->mode_info.coherent_mode_property =
-			drm_property_create_range(rdev->ddev, 0 , "coherent", 0, 1);
+			drm_property_create_range(rdev_to_drm(rdev), 0, "coherent", 0, 1);
 		if (!rdev->mode_info.coherent_mode_property)
 			return -ENOMEM;
 	}
@@ -1409,57 +1409,57 @@ static int radeon_modeset_create_props(struct radeon_device *rdev)
 	if (!ASIC_IS_AVIVO(rdev)) {
 		sz = ARRAY_SIZE(radeon_tmds_pll_enum_list);
 		rdev->mode_info.tmds_pll_property =
-			drm_property_create_enum(rdev->ddev, 0,
+			drm_property_create_enum(rdev_to_drm(rdev), 0,
 					    "tmds_pll",
 					    radeon_tmds_pll_enum_list, sz);
 	}
 
 	rdev->mode_info.load_detect_property =
-		drm_property_create_range(rdev->ddev, 0, "load detection", 0, 1);
+		drm_property_create_range(rdev_to_drm(rdev), 0, "load detection", 0, 1);
 	if (!rdev->mode_info.load_detect_property)
 		return -ENOMEM;
 
-	drm_mode_create_scaling_mode_property(rdev->ddev);
+	drm_mode_create_scaling_mode_property(rdev_to_drm(rdev));
 
 	sz = ARRAY_SIZE(radeon_tv_std_enum_list);
 	rdev->mode_info.tv_std_property =
-		drm_property_create_enum(rdev->ddev, 0,
+		drm_property_create_enum(rdev_to_drm(rdev), 0,
 				    "tv standard",
 				    radeon_tv_std_enum_list, sz);
 
 	sz = ARRAY_SIZE(radeon_underscan_enum_list);
 	rdev->mode_info.underscan_property =
-		drm_property_create_enum(rdev->ddev, 0,
+		drm_property_create_enum(rdev_to_drm(rdev), 0,
 				    "underscan",
 				    radeon_underscan_enum_list, sz);
 
 	rdev->mode_info.underscan_hborder_property =
-		drm_property_create_range(rdev->ddev, 0,
+		drm_property_create_range(rdev_to_drm(rdev), 0,
 					"underscan hborder", 0, 128);
 	if (!rdev->mode_info.underscan_hborder_property)
 		return -ENOMEM;
 
 	rdev->mode_info.underscan_vborder_property =
-		drm_property_create_range(rdev->ddev, 0,
+		drm_property_create_range(rdev_to_drm(rdev), 0,
 					"underscan vborder", 0, 128);
 	if (!rdev->mode_info.underscan_vborder_property)
 		return -ENOMEM;
 
 	sz = ARRAY_SIZE(radeon_audio_enum_list);
 	rdev->mode_info.audio_property =
-		drm_property_create_enum(rdev->ddev, 0,
+		drm_property_create_enum(rdev_to_drm(rdev), 0,
 					 "audio",
 					 radeon_audio_enum_list, sz);
 
 	sz = ARRAY_SIZE(radeon_dither_enum_list);
 	rdev->mode_info.dither_property =
-		drm_property_create_enum(rdev->ddev, 0,
+		drm_property_create_enum(rdev_to_drm(rdev), 0,
 					 "dither",
 					 radeon_dither_enum_list, sz);
 
 	sz = ARRAY_SIZE(radeon_output_csc_enum_list);
 	rdev->mode_info.output_csc_property =
-		drm_property_create_enum(rdev->ddev, 0,
+		drm_property_create_enum(rdev_to_drm(rdev), 0,
 					 "output_csc",
 					 radeon_output_csc_enum_list, sz);
 
@@ -1578,29 +1578,29 @@ int radeon_modeset_init(struct radeon_device *rdev)
 	int i;
 	int ret;
 
-	drm_mode_config_init(rdev->ddev);
+	drm_mode_config_init(rdev_to_drm(rdev));
 	rdev->mode_info.mode_config_initialized = true;
 
-	rdev->ddev->mode_config.funcs = &radeon_mode_funcs;
+	rdev_to_drm(rdev)->mode_config.funcs = &radeon_mode_funcs;
 
 	if (radeon_use_pflipirq == 2 && rdev->family >= CHIP_R600)
-		rdev->ddev->mode_config.async_page_flip = true;
+		rdev_to_drm(rdev)->mode_config.async_page_flip = true;
 
 	if (ASIC_IS_DCE5(rdev)) {
-		rdev->ddev->mode_config.max_width = 16384;
-		rdev->ddev->mode_config.max_height = 16384;
+		rdev_to_drm(rdev)->mode_config.max_width = 16384;
+		rdev_to_drm(rdev)->mode_config.max_height = 16384;
 	} else if (ASIC_IS_AVIVO(rdev)) {
-		rdev->ddev->mode_config.max_width = 8192;
-		rdev->ddev->mode_config.max_height = 8192;
+		rdev_to_drm(rdev)->mode_config.max_width = 8192;
+		rdev_to_drm(rdev)->mode_config.max_height = 8192;
 	} else {
-		rdev->ddev->mode_config.max_width = 4096;
-		rdev->ddev->mode_config.max_height = 4096;
+		rdev_to_drm(rdev)->mode_config.max_width = 4096;
+		rdev_to_drm(rdev)->mode_config.max_height = 4096;
 	}
 
-	rdev->ddev->mode_config.preferred_depth = 24;
-	rdev->ddev->mode_config.prefer_shadow = 1;
+	rdev_to_drm(rdev)->mode_config.preferred_depth = 24;
+	rdev_to_drm(rdev)->mode_config.prefer_shadow = 1;
 
-	rdev->ddev->mode_config.fb_modifiers_not_supported = true;
+	rdev_to_drm(rdev)->mode_config.fb_modifiers_not_supported = true;
 
 	ret = radeon_modeset_create_props(rdev);
 	if (ret) {
@@ -1618,11 +1618,11 @@ int radeon_modeset_init(struct radeon_device *rdev)
 
 	/* allocate crtcs */
 	for (i = 0; i < rdev->num_crtc; i++) {
-		radeon_crtc_init(rdev->ddev, i);
+		radeon_crtc_init(rdev_to_drm(rdev), i);
 	}
 
 	/* okay we should have all the bios connectors */
-	ret = radeon_setup_enc_conn(rdev->ddev);
+	ret = radeon_setup_enc_conn(rdev_to_drm(rdev));
 	if (!ret) {
 		return ret;
 	}
@@ -1639,7 +1639,7 @@ int radeon_modeset_init(struct radeon_device *rdev)
 	/* setup afmt */
 	radeon_afmt_init(rdev);
 
-	drm_kms_helper_poll_init(rdev->ddev);
+	drm_kms_helper_poll_init(rdev_to_drm(rdev));
 
 	/* do pm late init */
 	ret = radeon_pm_late_init(rdev);
@@ -1650,11 +1650,11 @@ int radeon_modeset_init(struct radeon_device *rdev)
 void radeon_modeset_fini(struct radeon_device *rdev)
 {
 	if (rdev->mode_info.mode_config_initialized) {
-		drm_kms_helper_poll_fini(rdev->ddev);
+		drm_kms_helper_poll_fini(rdev_to_drm(rdev));
 		radeon_hpd_fini(rdev);
-		drm_helper_force_disable_all(rdev->ddev);
+		drm_helper_force_disable_all(rdev_to_drm(rdev));
 		radeon_afmt_fini(rdev);
-		drm_mode_config_cleanup(rdev->ddev);
+		drm_mode_config_cleanup(rdev_to_drm(rdev));
 		rdev->mode_info.mode_config_initialized = false;
 	}
 
diff --git a/drivers/gpu/drm/radeon/radeon_fbdev.c b/drivers/gpu/drm/radeon/radeon_fbdev.c
index 02bf25759059..fb70de29545c 100644
--- a/drivers/gpu/drm/radeon/radeon_fbdev.c
+++ b/drivers/gpu/drm/radeon/radeon_fbdev.c
@@ -67,7 +67,7 @@ static int radeon_fbdev_create_pinned_object(struct drm_fb_helper *fb_helper,
 	int height = mode_cmd->height;
 	u32 cpp;
 
-	info = drm_get_format_info(rdev->ddev, mode_cmd);
+	info = drm_get_format_info(rdev_to_drm(rdev), mode_cmd);
 	cpp = info->cpp[0];
 
 	/* need to align pitch with crtc limits */
@@ -148,15 +148,15 @@ static int radeon_fbdev_fb_open(struct fb_info *info, int user)
 	struct radeon_device *rdev = fb_helper->dev->dev_private;
 	int ret;
 
-	ret = pm_runtime_get_sync(rdev->ddev->dev);
+	ret = pm_runtime_get_sync(rdev_to_drm(rdev)->dev);
 	if (ret < 0 && ret != -EACCES)
 		goto err_pm_runtime_mark_last_busy;
 
 	return 0;
 
 err_pm_runtime_mark_last_busy:
-	pm_runtime_mark_last_busy(rdev->ddev->dev);
-	pm_runtime_put_autosuspend(rdev->ddev->dev);
+	pm_runtime_mark_last_busy(rdev_to_drm(rdev)->dev);
+	pm_runtime_put_autosuspend(rdev_to_drm(rdev)->dev);
 	return ret;
 }
 
@@ -165,8 +165,8 @@ static int radeon_fbdev_fb_release(struct fb_info *info, int user)
 	struct drm_fb_helper *fb_helper = info->par;
 	struct radeon_device *rdev = fb_helper->dev->dev_private;
 
-	pm_runtime_mark_last_busy(rdev->ddev->dev);
-	pm_runtime_put_autosuspend(rdev->ddev->dev);
+	pm_runtime_mark_last_busy(rdev_to_drm(rdev)->dev);
+	pm_runtime_put_autosuspend(rdev_to_drm(rdev)->dev);
 
 	return 0;
 }
@@ -236,7 +236,7 @@ static int radeon_fbdev_fb_helper_fb_probe(struct drm_fb_helper *fb_helper,
 		ret = -ENOMEM;
 		goto err_radeon_fbdev_destroy_pinned_object;
 	}
-	ret = radeon_framebuffer_init(rdev->ddev, fb, &mode_cmd, gobj);
+	ret = radeon_framebuffer_init(rdev_to_drm(rdev), fb, &mode_cmd, gobj);
 	if (ret) {
 		DRM_ERROR("failed to initialize framebuffer %d\n", ret);
 		goto err_kfree;
@@ -374,12 +374,12 @@ void radeon_fbdev_setup(struct radeon_device *rdev)
 	fb_helper = kzalloc(sizeof(*fb_helper), GFP_KERNEL);
 	if (!fb_helper)
 		return;
-	drm_fb_helper_prepare(rdev->ddev, fb_helper, bpp_sel, &radeon_fbdev_fb_helper_funcs);
+	drm_fb_helper_prepare(rdev_to_drm(rdev), fb_helper, bpp_sel, &radeon_fbdev_fb_helper_funcs);
 
-	ret = drm_client_init(rdev->ddev, &fb_helper->client, "radeon-fbdev",
+	ret = drm_client_init(rdev_to_drm(rdev), &fb_helper->client, "radeon-fbdev",
 			      &radeon_fbdev_client_funcs);
 	if (ret) {
-		drm_err(rdev->ddev, "Failed to register client: %d\n", ret);
+		drm_err(rdev_to_drm(rdev), "Failed to register client: %d\n", ret);
 		goto err_drm_client_init;
 	}
 
@@ -394,13 +394,13 @@ void radeon_fbdev_setup(struct radeon_device *rdev)
 
 void radeon_fbdev_set_suspend(struct radeon_device *rdev, int state)
 {
-	if (rdev->ddev->fb_helper)
-		drm_fb_helper_set_suspend(rdev->ddev->fb_helper, state);
+	if (rdev_to_drm(rdev)->fb_helper)
+		drm_fb_helper_set_suspend(rdev_to_drm(rdev)->fb_helper, state);
 }
 
 bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj)
 {
-	struct drm_fb_helper *fb_helper = rdev->ddev->fb_helper;
+	struct drm_fb_helper *fb_helper = rdev_to_drm(rdev)->fb_helper;
 	struct drm_gem_object *gobj;
 
 	if (!fb_helper)
diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c
index 4fb780d96f32..daff61586be5 100644
--- a/drivers/gpu/drm/radeon/radeon_fence.c
+++ b/drivers/gpu/drm/radeon/radeon_fence.c
@@ -150,7 +150,7 @@ int radeon_fence_emit(struct radeon_device *rdev,
 		       rdev->fence_context + ring,
 		       seq);
 	radeon_fence_ring_emit(rdev, ring, *fence);
-	trace_radeon_fence_emit(rdev->ddev, ring, (*fence)->seq);
+	trace_radeon_fence_emit(rdev_to_drm(rdev), ring, (*fence)->seq);
 	radeon_fence_schedule_check(rdev, ring);
 	return 0;
 }
@@ -489,7 +489,7 @@ static long radeon_fence_wait_seq_timeout(struct radeon_device *rdev,
 		if (!target_seq[i])
 			continue;
 
-		trace_radeon_fence_wait_begin(rdev->ddev, i, target_seq[i]);
+		trace_radeon_fence_wait_begin(rdev_to_drm(rdev), i, target_seq[i]);
 		radeon_irq_kms_sw_irq_get(rdev, i);
 	}
 
@@ -511,7 +511,7 @@ static long radeon_fence_wait_seq_timeout(struct radeon_device *rdev,
 			continue;
 
 		radeon_irq_kms_sw_irq_put(rdev, i);
-		trace_radeon_fence_wait_end(rdev->ddev, i, target_seq[i]);
+		trace_radeon_fence_wait_end(rdev_to_drm(rdev), i, target_seq[i]);
 	}
 
 	return r;
@@ -995,7 +995,7 @@ DEFINE_DEBUGFS_ATTRIBUTE(radeon_debugfs_gpu_reset_fops,
 void radeon_debugfs_fence_init(struct radeon_device *rdev)
 {
 #if defined(CONFIG_DEBUG_FS)
-	struct dentry *root = rdev->ddev->primary->debugfs_root;
+	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
 
 	debugfs_create_file("radeon_gpu_reset", 0444, root, rdev,
 			    &radeon_debugfs_gpu_reset_fops);
diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
index 2ef201a072f1..9dd4ff09d562 100644
--- a/drivers/gpu/drm/radeon/radeon_gem.c
+++ b/drivers/gpu/drm/radeon/radeon_gem.c
@@ -899,7 +899,7 @@ DEFINE_SHOW_ATTRIBUTE(radeon_debugfs_gem_info);
 void radeon_gem_debugfs_init(struct radeon_device *rdev)
 {
 #if defined(CONFIG_DEBUG_FS)
-	struct dentry *root = rdev->ddev->primary->debugfs_root;
+	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
 
 	debugfs_create_file("radeon_gem_info", 0444, root, rdev,
 			    &radeon_debugfs_gem_info_fops);
diff --git a/drivers/gpu/drm/radeon/radeon_i2c.c b/drivers/gpu/drm/radeon/radeon_i2c.c
index 3d174390a8af..1f16619ed06e 100644
--- a/drivers/gpu/drm/radeon/radeon_i2c.c
+++ b/drivers/gpu/drm/radeon/radeon_i2c.c
@@ -1011,7 +1011,7 @@ void radeon_i2c_add(struct radeon_device *rdev,
 		    struct radeon_i2c_bus_rec *rec,
 		    const char *name)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	int i;
 
 	for (i = 0; i < RADEON_MAX_I2C_BUS; i++) {
diff --git a/drivers/gpu/drm/radeon/radeon_ib.c b/drivers/gpu/drm/radeon/radeon_ib.c
index 63d914f3414d..1aa41cc3f991 100644
--- a/drivers/gpu/drm/radeon/radeon_ib.c
+++ b/drivers/gpu/drm/radeon/radeon_ib.c
@@ -309,7 +309,7 @@ DEFINE_SHOW_ATTRIBUTE(radeon_debugfs_sa_info);
 static void radeon_debugfs_sa_init(struct radeon_device *rdev)
 {
 #if defined(CONFIG_DEBUG_FS)
-	struct dentry *root = rdev->ddev->primary->debugfs_root;
+	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
 
 	debugfs_create_file("radeon_sa_info", 0444, root, rdev,
 			    &radeon_debugfs_sa_info_fops);
diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
index c4dda908666c..9961251b44ba 100644
--- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
@@ -80,7 +80,7 @@ static void radeon_hotplug_work_func(struct work_struct *work)
 {
 	struct radeon_device *rdev = container_of(work, struct radeon_device,
 						  hotplug_work.work);
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct drm_mode_config *mode_config = &dev->mode_config;
 	struct drm_connector *connector;
 
@@ -101,7 +101,7 @@ static void radeon_dp_work_func(struct work_struct *work)
 {
 	struct radeon_device *rdev = container_of(work, struct radeon_device,
 						  dp_work);
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct drm_mode_config *mode_config = &dev->mode_config;
 	struct drm_connector *connector;
 
@@ -197,7 +197,7 @@ static void radeon_driver_irq_uninstall_kms(struct drm_device *dev)
 
 static int radeon_irq_install(struct radeon_device *rdev, int irq)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	int ret;
 
 	if (irq == IRQ_NOTCONNECTED)
@@ -218,7 +218,7 @@ static int radeon_irq_install(struct radeon_device *rdev, int irq)
 
 static void radeon_irq_uninstall(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct pci_dev *pdev = to_pci_dev(dev->dev);
 
 	radeon_driver_irq_uninstall_kms(dev);
@@ -322,9 +322,9 @@ int radeon_irq_kms_init(struct radeon_device *rdev)
 	spin_lock_init(&rdev->irq.lock);
 
 	/* Disable vblank irqs aggressively for power-saving */
-	rdev->ddev->vblank_disable_immediate = true;
+	rdev_to_drm(rdev)->vblank_disable_immediate = true;
 
-	r = drm_vblank_init(rdev->ddev, rdev->num_crtc);
+	r = drm_vblank_init(rdev_to_drm(rdev), rdev->num_crtc);
 	if (r) {
 		return r;
 	}
diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
index a955f8a2f7fe..450ff7daa46c 100644
--- a/drivers/gpu/drm/radeon/radeon_object.c
+++ b/drivers/gpu/drm/radeon/radeon_object.c
@@ -150,7 +150,7 @@ int radeon_bo_create(struct radeon_device *rdev,
 	bo = kzalloc(sizeof(struct radeon_bo), GFP_KERNEL);
 	if (bo == NULL)
 		return -ENOMEM;
-	drm_gem_private_object_init(rdev->ddev, &bo->tbo.base, size);
+	drm_gem_private_object_init(rdev_to_drm(rdev), &bo->tbo.base, size);
 	bo->rdev = rdev;
 	bo->surface_reg = -1;
 	INIT_LIST_HEAD(&bo->list);
diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
index 2d9d9f46f243..b4fb7e70320b 100644
--- a/drivers/gpu/drm/radeon/radeon_pm.c
+++ b/drivers/gpu/drm/radeon/radeon_pm.c
@@ -282,7 +282,7 @@ static void radeon_pm_set_clocks(struct radeon_device *rdev)
 
 	if (rdev->irq.installed) {
 		i = 0;
-		drm_for_each_crtc(crtc, rdev->ddev) {
+		drm_for_each_crtc(crtc, rdev_to_drm(rdev)) {
 			if (rdev->pm.active_crtcs & (1 << i)) {
 				/* This can fail if a modeset is in progress */
 				if (drm_crtc_vblank_get(crtc) == 0)
@@ -299,7 +299,7 @@ static void radeon_pm_set_clocks(struct radeon_device *rdev)
 
 	if (rdev->irq.installed) {
 		i = 0;
-		drm_for_each_crtc(crtc, rdev->ddev) {
+		drm_for_each_crtc(crtc, rdev_to_drm(rdev)) {
 			if (rdev->pm.req_vblank & (1 << i)) {
 				rdev->pm.req_vblank &= ~(1 << i);
 				drm_crtc_vblank_put(crtc);
@@ -671,7 +671,7 @@ static ssize_t radeon_hwmon_show_temp(struct device *dev,
 				      char *buf)
 {
 	struct radeon_device *rdev = dev_get_drvdata(dev);
-	struct drm_device *ddev = rdev->ddev;
+	struct drm_device *ddev = rdev_to_drm(rdev);
 	int temp;
 
 	/* Can't get temperature when the card is off */
@@ -715,7 +715,7 @@ static ssize_t radeon_hwmon_show_sclk(struct device *dev,
 				      struct device_attribute *attr, char *buf)
 {
 	struct radeon_device *rdev = dev_get_drvdata(dev);
-	struct drm_device *ddev = rdev->ddev;
+	struct drm_device *ddev = rdev_to_drm(rdev);
 	u32 sclk = 0;
 
 	/* Can't get clock frequency when the card is off */
@@ -740,7 +740,7 @@ static ssize_t radeon_hwmon_show_vddc(struct device *dev,
 				      struct device_attribute *attr, char *buf)
 {
 	struct radeon_device *rdev = dev_get_drvdata(dev);
-	struct drm_device *ddev = rdev->ddev;
+	struct drm_device *ddev = rdev_to_drm(rdev);
 	u16 vddc = 0;
 
 	/* Can't get vddc when the card is off */
@@ -1692,7 +1692,7 @@ void radeon_pm_fini(struct radeon_device *rdev)
 
 static void radeon_pm_compute_clocks_old(struct radeon_device *rdev)
 {
-	struct drm_device *ddev = rdev->ddev;
+	struct drm_device *ddev = rdev_to_drm(rdev);
 	struct drm_crtc *crtc;
 	struct radeon_crtc *radeon_crtc;
 
@@ -1765,7 +1765,7 @@ static void radeon_pm_compute_clocks_old(struct radeon_device *rdev)
 
 static void radeon_pm_compute_clocks_dpm(struct radeon_device *rdev)
 {
-	struct drm_device *ddev = rdev->ddev;
+	struct drm_device *ddev = rdev_to_drm(rdev);
 	struct drm_crtc *crtc;
 	struct radeon_crtc *radeon_crtc;
 	struct radeon_connector *radeon_connector;
@@ -1826,7 +1826,7 @@ static bool radeon_pm_in_vbl(struct radeon_device *rdev)
 	 */
 	for (crtc = 0; (crtc < rdev->num_crtc) && in_vbl; crtc++) {
 		if (rdev->pm.active_crtcs & (1 << crtc)) {
-			vbl_status = radeon_get_crtc_scanoutpos(rdev->ddev,
+			vbl_status = radeon_get_crtc_scanoutpos(rdev_to_drm(rdev),
 								crtc,
 								USE_REAL_VBLANKSTART,
 								&vpos, &hpos, NULL, NULL,
@@ -1918,7 +1918,7 @@ static void radeon_dynpm_idle_work_handler(struct work_struct *work)
 static int radeon_debugfs_pm_info_show(struct seq_file *m, void *unused)
 {
 	struct radeon_device *rdev = m->private;
-	struct drm_device *ddev = rdev->ddev;
+	struct drm_device *ddev = rdev_to_drm(rdev);
 
 	if  ((rdev->flags & RADEON_IS_PX) &&
 	     (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) {
@@ -1955,7 +1955,7 @@ DEFINE_SHOW_ATTRIBUTE(radeon_debugfs_pm_info);
 static void radeon_debugfs_pm_init(struct radeon_device *rdev)
 {
 #if defined(CONFIG_DEBUG_FS)
-	struct dentry *root = rdev->ddev->primary->debugfs_root;
+	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
 
 	debugfs_create_file("radeon_pm_info", 0444, root, rdev,
 			    &radeon_debugfs_pm_info_fops);
diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
index 8d1d458286a8..581ae20c46e4 100644
--- a/drivers/gpu/drm/radeon/radeon_ring.c
+++ b/drivers/gpu/drm/radeon/radeon_ring.c
@@ -550,7 +550,7 @@ static void radeon_debugfs_ring_init(struct radeon_device *rdev, struct radeon_r
 {
 #if defined(CONFIG_DEBUG_FS)
 	const char *ring_name = radeon_debugfs_ring_idx_to_name(ring->idx);
-	struct dentry *root = rdev->ddev->primary->debugfs_root;
+	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
 
 	if (ring_name)
 		debugfs_create_file(ring_name, 0444, root, ring,
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
index 5c65b6dfb99a..69d0c12fa419 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -682,8 +682,8 @@ int radeon_ttm_init(struct radeon_device *rdev)
 
 	/* No others user of address space so set it to 0 */
 	r = ttm_device_init(&rdev->mman.bdev, &radeon_bo_driver, rdev->dev,
-			       rdev->ddev->anon_inode->i_mapping,
-			       rdev->ddev->vma_offset_manager,
+			       rdev_to_drm(rdev)->anon_inode->i_mapping,
+			       rdev_to_drm(rdev)->vma_offset_manager,
 			       rdev->need_swiotlb,
 			       dma_addressing_limited(&rdev->pdev->dev));
 	if (r) {
@@ -890,7 +890,7 @@ static const struct file_operations radeon_ttm_gtt_fops = {
 static void radeon_ttm_debugfs_init(struct radeon_device *rdev)
 {
 #if defined(CONFIG_DEBUG_FS)
-	struct drm_minor *minor = rdev->ddev->primary;
+	struct drm_minor *minor = rdev_to_drm(rdev)->primary;
 	struct dentry *root = minor->debugfs_root;
 
 	debugfs_create_file("radeon_vram", 0444, root, rdev,
diff --git a/drivers/gpu/drm/radeon/rs400.c b/drivers/gpu/drm/radeon/rs400.c
index d4d1501e6576..d6c18fd740ec 100644
--- a/drivers/gpu/drm/radeon/rs400.c
+++ b/drivers/gpu/drm/radeon/rs400.c
@@ -379,7 +379,7 @@ DEFINE_SHOW_ATTRIBUTE(rs400_debugfs_gart_info);
 static void rs400_debugfs_pcie_gart_info_init(struct radeon_device *rdev)
 {
 #if defined(CONFIG_DEBUG_FS)
-	struct dentry *root = rdev->ddev->primary->debugfs_root;
+	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
 
 	debugfs_create_file("rs400_gart_info", 0444, root, rdev,
 			    &rs400_debugfs_gart_info_fops);
@@ -474,7 +474,7 @@ int rs400_resume(struct radeon_device *rdev)
 			RREG32(R_0007C0_CP_STAT));
 	}
 	/* post */
-	radeon_combios_asic_init(rdev->ddev);
+	radeon_combios_asic_init(rdev_to_drm(rdev));
 	/* Resume clock after posting */
 	r300_clock_startup(rdev);
 	/* Initialize surface registers */
@@ -552,7 +552,7 @@ int rs400_init(struct radeon_device *rdev)
 		return -EINVAL;
 
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 	/* initialize memory controller */
 	rs400_mc_init(rdev);
 	/* Fence driver */
diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
index 5c162778899b..88c8e91ea651 100644
--- a/drivers/gpu/drm/radeon/rs600.c
+++ b/drivers/gpu/drm/radeon/rs600.c
@@ -321,7 +321,7 @@ void rs600_pm_misc(struct radeon_device *rdev)
 
 void rs600_pm_prepare(struct radeon_device *rdev)
 {
-	struct drm_device *ddev = rdev->ddev;
+	struct drm_device *ddev = rdev_to_drm(rdev);
 	struct drm_crtc *crtc;
 	struct radeon_crtc *radeon_crtc;
 	u32 tmp;
@@ -339,7 +339,7 @@ void rs600_pm_prepare(struct radeon_device *rdev)
 
 void rs600_pm_finish(struct radeon_device *rdev)
 {
-	struct drm_device *ddev = rdev->ddev;
+	struct drm_device *ddev = rdev_to_drm(rdev);
 	struct drm_crtc *crtc;
 	struct radeon_crtc *radeon_crtc;
 	u32 tmp;
@@ -408,7 +408,7 @@ void rs600_hpd_set_polarity(struct radeon_device *rdev,
 
 void rs600_hpd_init(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct drm_connector *connector;
 	unsigned enable = 0;
 
@@ -435,7 +435,7 @@ void rs600_hpd_init(struct radeon_device *rdev)
 
 void rs600_hpd_fini(struct radeon_device *rdev)
 {
-	struct drm_device *dev = rdev->ddev;
+	struct drm_device *dev = rdev_to_drm(rdev);
 	struct drm_connector *connector;
 	unsigned disable = 0;
 
@@ -797,7 +797,7 @@ int rs600_irq_process(struct radeon_device *rdev)
 		/* Vertical blank interrupts */
 		if (G_007EDC_LB_D1_VBLANK_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) {
 			if (rdev->irq.crtc_vblank_int[0]) {
-				drm_handle_vblank(rdev->ddev, 0);
+				drm_handle_vblank(rdev_to_drm(rdev), 0);
 				rdev->pm.vblank_sync = true;
 				wake_up(&rdev->irq.vblank_queue);
 			}
@@ -806,7 +806,7 @@ int rs600_irq_process(struct radeon_device *rdev)
 		}
 		if (G_007EDC_LB_D2_VBLANK_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) {
 			if (rdev->irq.crtc_vblank_int[1]) {
-				drm_handle_vblank(rdev->ddev, 1);
+				drm_handle_vblank(rdev_to_drm(rdev), 1);
 				rdev->pm.vblank_sync = true;
 				wake_up(&rdev->irq.vblank_queue);
 			}
@@ -1133,7 +1133,7 @@ int rs600_init(struct radeon_device *rdev)
 		return -EINVAL;
 
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 	/* initialize memory controller */
 	rs600_mc_init(rdev);
 	r100_debugfs_rbbm_init(rdev);
diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c
index 14fb0819b8c1..016eb4992803 100644
--- a/drivers/gpu/drm/radeon/rs690.c
+++ b/drivers/gpu/drm/radeon/rs690.c
@@ -845,7 +845,7 @@ int rs690_init(struct radeon_device *rdev)
 		return -EINVAL;
 
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 	/* initialize memory controller */
 	rs690_mc_init(rdev);
 	rv515_debugfs(rdev);
diff --git a/drivers/gpu/drm/radeon/rv515.c b/drivers/gpu/drm/radeon/rv515.c
index bbc6ccabf788..1b4dfb645585 100644
--- a/drivers/gpu/drm/radeon/rv515.c
+++ b/drivers/gpu/drm/radeon/rv515.c
@@ -255,7 +255,7 @@ DEFINE_SHOW_ATTRIBUTE(rv515_debugfs_ga_info);
 void rv515_debugfs(struct radeon_device *rdev)
 {
 #if defined(CONFIG_DEBUG_FS)
-	struct dentry *root = rdev->ddev->primary->debugfs_root;
+	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
 
 	debugfs_create_file("rv515_pipes_info", 0444, root, rdev,
 			    &rv515_debugfs_pipes_info_fops);
@@ -636,7 +636,7 @@ int rv515_init(struct radeon_device *rdev)
 	if (radeon_boot_test_post_card(rdev) == false)
 		return -EINVAL;
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 	/* initialize AGP */
 	if (rdev->flags & RADEON_IS_AGP) {
 		r = radeon_agp_init(rdev);
diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
index 9ce12fa3c356..7d4b0bf59109 100644
--- a/drivers/gpu/drm/radeon/rv770.c
+++ b/drivers/gpu/drm/radeon/rv770.c
@@ -1935,7 +1935,7 @@ int rv770_init(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 	/* Fence driver */
 	radeon_fence_driver_init(rdev);
 	/* initialize AGP */
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index 15759c8ca5b7..6c95575ce109 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -6277,7 +6277,7 @@ int si_irq_process(struct radeon_device *rdev)
 				event_name = "vblank";
 
 				if (rdev->irq.crtc_vblank_int[crtc_idx]) {
-					drm_handle_vblank(rdev->ddev, crtc_idx);
+					drm_handle_vblank(rdev_to_drm(rdev), crtc_idx);
 					rdev->pm.vblank_sync = true;
 					wake_up(&rdev->irq.vblank_queue);
 				}
@@ -6839,7 +6839,7 @@ int si_init(struct radeon_device *rdev)
 	/* Initialize surface registers */
 	radeon_surface_init(rdev);
 	/* Initialize clocks */
-	radeon_get_clock_info(rdev->ddev);
+	radeon_get_clock_info(rdev_to_drm(rdev));
 
 	/* Fence driver */
 	radeon_fence_driver_init(rdev);
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH v3 6/6] drm/radeon: change drm_dev_alloc to devm_drm_dev_alloc
  2024-06-30 16:59 [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc Wu Hoi Pok
                   ` (4 preceding siblings ...)
  2024-06-30 16:59 ` [PATCH v3 5/6] drm/radeon: change rdev->ddev to rdev_to_drm(rdev) Wu Hoi Pok
@ 2024-06-30 16:59 ` Wu Hoi Pok
  2024-07-03  8:47   ` Thomas Zimmermann
  2024-07-03  8:52 ` [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc Thomas Zimmermann
  6 siblings, 1 reply; 29+ messages in thread
From: Wu Hoi Pok @ 2024-06-30 16:59 UTC (permalink / raw)
  Cc: Thomas Zimmermann, Wu Hoi Pok, Alex Deucher, Christian König,
	Pan, Xinhui, David Airlie, Daniel Vetter, amd-gfx, dri-devel,
	linux-kernel

"drm_dev_alloc" is deprecated, in order to use the newer "devm_drm_dev_alloc",
the "drm_device" is stored inside "radeon_device", by changing "rdev_to_drm(rdev)"
other functions still gain access to the member "drm_device". Also, "devm_drm_dev_alloc"
is now allocating "radeon_device", allocation inside "radeon_driver_load_kms" has to be
removed.

In "radeon_device_init", it originally assigned "rdev->dev" etc. However it is already
done right after "devm_drm_dev_alloc" as you can see down below. It is better remove them.

Signed-off-by: Wu Hoi Pok <wuhoipok@gmail.com>
---
 drivers/gpu/drm/radeon/radeon.h        |  4 ++--
 drivers/gpu/drm/radeon/radeon_device.c |  3 ---
 drivers/gpu/drm/radeon/radeon_drv.c    | 12 +++++++++---
 drivers/gpu/drm/radeon/radeon_kms.c    |  8 +-------
 4 files changed, 12 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
index ae35c102a487..fd8a4513025f 100644
--- a/drivers/gpu/drm/radeon/radeon.h
+++ b/drivers/gpu/drm/radeon/radeon.h
@@ -2297,7 +2297,7 @@ typedef void (*radeon_wreg_t)(struct radeon_device*, uint32_t, uint32_t);
 
 struct radeon_device {
 	struct device			*dev;
-	struct drm_device		*ddev;
+	struct drm_device		ddev;
 	struct pci_dev			*pdev;
 #ifdef __alpha__
 	struct pci_controller		*hose;
@@ -2478,7 +2478,7 @@ void cik_mm_wdoorbell(struct radeon_device *rdev, u32 index, u32 v);
 
 static inline struct drm_device *rdev_to_drm(struct radeon_device *rdev)
 {
-	return rdev->ddev;
+	return &rdev->ddev;
 }
 
 /*
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index 32851632643d..554b236c2328 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -1285,9 +1285,6 @@ int radeon_device_init(struct radeon_device *rdev,
 	bool runtime = false;
 
 	rdev->shutdown = false;
-	rdev->dev = &pdev->dev;
-	rdev->ddev = ddev;
-	rdev->pdev = pdev;
 	rdev->flags = flags;
 	rdev->family = flags & RADEON_FAMILY_MASK;
 	rdev->is_atom_bios = false;
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index 7b8aa8406751..f36aa71c57c7 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -260,6 +260,7 @@ static int radeon_pci_probe(struct pci_dev *pdev,
 {
 	unsigned long flags = 0;
 	struct drm_device *ddev;
+	struct radeon_device *rdev;
 	int ret;
 
 	if (!ent)
@@ -300,9 +301,14 @@ static int radeon_pci_probe(struct pci_dev *pdev,
 	if (ret)
 		return ret;
 
-	ddev = drm_dev_alloc(&kms_driver, &pdev->dev);
-	if (IS_ERR(ddev))
-		return PTR_ERR(ddev);
+	rdev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*rdev), ddev);
+	if (IS_ERR(rdev))
+		return PTR_ERR(rdev);
+
+	rdev->dev = &pdev->dev;
+	rdev->pdev = pdev;
+	ddev = rdev_to_drm(rdev);
+	ddev->dev_private = rdev;
 
 	ret = pci_enable_device(pdev);
 	if (ret)
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
index a16590c6247f..645e33bf7947 100644
--- a/drivers/gpu/drm/radeon/radeon_kms.c
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
@@ -104,15 +104,9 @@ void radeon_driver_unload_kms(struct drm_device *dev)
 int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags)
 {
 	struct pci_dev *pdev = to_pci_dev(dev->dev);
-	struct radeon_device *rdev;
+	struct radeon_device *rdev = dev->dev_private;
 	int r, acpi_status;
 
-	rdev = kzalloc(sizeof(struct radeon_device), GFP_KERNEL);
-	if (rdev == NULL) {
-		return -ENOMEM;
-	}
-	dev->dev_private = (void *)rdev;
-
 #ifdef __alpha__
 	rdev->hose = pdev->sysdata;
 #endif
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 29+ messages in thread

* Re: [PATCH v3 1/6] drm/radeon: change variable name "dev" to "ddev" for consistency
  2024-06-30 16:59 ` [PATCH v3 1/6] drm/radeon: change variable name "dev" to "ddev" for consistency Wu Hoi Pok
@ 2024-07-03  8:42   ` Thomas Zimmermann
  0 siblings, 0 replies; 29+ messages in thread
From: Thomas Zimmermann @ 2024-07-03  8:42 UTC (permalink / raw)
  To: Wu Hoi Pok
  Cc: Alex Deucher, Christian König, Pan, Xinhui, David Airlie,
	Daniel Vetter, amd-gfx, dri-devel, linux-kernel



Am 30.06.24 um 18:59 schrieb Wu Hoi Pok:
> In the probe function of amdgpu, it uses "ddev" as the name of "struct drm_device *",
> so I suggest renaming it to be consistent.
>
> Signed-off-by: Wu Hoi Pok <wuhoipok@gmail.com>

Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Tested-by: Thomas Zimmermann <tzimmermann@suse.de>

> ---
>   drivers/gpu/drm/radeon/radeon_drv.c | 16 ++++++++--------
>   1 file changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> index 7bf08164140e..739bb1da9dcc 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -259,7 +259,7 @@ static int radeon_pci_probe(struct pci_dev *pdev,
>   			    const struct pci_device_id *ent)
>   {
>   	unsigned long flags = 0;
> -	struct drm_device *dev;
> +	struct drm_device *ddev;
>   	int ret;
>   
>   	if (!ent)
> @@ -300,28 +300,28 @@ static int radeon_pci_probe(struct pci_dev *pdev,
>   	if (ret)
>   		return ret;
>   
> -	dev = drm_dev_alloc(&kms_driver, &pdev->dev);
> -	if (IS_ERR(dev))
> -		return PTR_ERR(dev);
> +	ddev = drm_dev_alloc(&kms_driver, &pdev->dev);
> +	if (IS_ERR(ddev))
> +		return PTR_ERR(ddev);
>   
>   	ret = pci_enable_device(pdev);
>   	if (ret)
>   		goto err_free;
>   
> -	pci_set_drvdata(pdev, dev);
> +	pci_set_drvdata(pdev, ddev);
>   
> -	ret = drm_dev_register(dev, ent->driver_data);
> +	ret = drm_dev_register(ddev, ent->driver_data);
>   	if (ret)
>   		goto err_agp;
>   
> -	radeon_fbdev_setup(dev->dev_private);
> +	radeon_fbdev_setup(ddev->dev_private);
>   
>   	return 0;
>   
>   err_agp:
>   	pci_disable_device(pdev);
>   err_free:
> -	drm_dev_put(dev);
> +	drm_dev_put(ddev);
>   	return ret;
>   }
>   

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v3 2/6] drm/radeon: remove load callback from kms_driver
  2024-06-30 16:59 ` [PATCH v3 2/6] drm/radeon: remove load callback from kms_driver Wu Hoi Pok
@ 2024-07-03  8:43   ` Thomas Zimmermann
  2024-09-19 16:56   ` Arthur Marsh
  1 sibling, 0 replies; 29+ messages in thread
From: Thomas Zimmermann @ 2024-07-03  8:43 UTC (permalink / raw)
  To: Wu Hoi Pok
  Cc: Alex Deucher, Christian König, Pan, Xinhui, David Airlie,
	Daniel Vetter, amd-gfx, dri-devel, linux-kernel



Am 30.06.24 um 18:59 schrieb Wu Hoi Pok:
> The ".load" callback in "struct drm_driver" is deprecated. In order to remove
> the callback, we have to manually call "radeon_driver_load_kms" instead.
>
> Signed-off-by: Wu Hoi Pok <wuhoipok@gmail.com>

Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Tested-by: Thomas Zimmermann <tzimmermann@suse.de>

> ---
>   drivers/gpu/drm/radeon/radeon_drv.c | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> index 739bb1da9dcc..88d3de2a79f8 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -310,6 +310,10 @@ static int radeon_pci_probe(struct pci_dev *pdev,
>   
>   	pci_set_drvdata(pdev, ddev);
>   
> +	ret = radeon_driver_load_kms(ddev, flags);
> +	if (ret)
> +		goto err_agp;
> +
>   	ret = drm_dev_register(ddev, ent->driver_data);
>   	if (ret)
>   		goto err_agp;
> @@ -569,7 +573,6 @@ static const struct drm_ioctl_desc radeon_ioctls_kms[] = {
>   static const struct drm_driver kms_driver = {
>   	.driver_features =
>   	    DRIVER_GEM | DRIVER_RENDER | DRIVER_MODESET,
> -	.load = radeon_driver_load_kms,
>   	.open = radeon_driver_open_kms,
>   	.postclose = radeon_driver_postclose_kms,
>   	.unload = radeon_driver_unload_kms,

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v3 3/6] drm/radeon: use variable flags as parameter
  2024-06-30 16:59 ` [PATCH v3 3/6] drm/radeon: use variable flags as parameter Wu Hoi Pok
@ 2024-07-03  8:44   ` Thomas Zimmermann
  0 siblings, 0 replies; 29+ messages in thread
From: Thomas Zimmermann @ 2024-07-03  8:44 UTC (permalink / raw)
  To: Wu Hoi Pok
  Cc: Alex Deucher, Christian König, Pan, Xinhui, David Airlie,
	Daniel Vetter, amd-gfx, dri-devel, linux-kernel



Am 30.06.24 um 18:59 schrieb Wu Hoi Pok:
> To be consistent with amdgpu driver, use "flags" as the parameter because
> it is already assigned as "ent->driver_data".
>
> Signed-off-by: Wu Hoi Pok <wuhoipok@gmail.com>

Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Tested-by: Thomas Zimmermann <tzimmermann@suse.de>


> ---
>   drivers/gpu/drm/radeon/radeon_drv.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> index 88d3de2a79f8..7b8aa8406751 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -314,7 +314,7 @@ static int radeon_pci_probe(struct pci_dev *pdev,
>   	if (ret)
>   		goto err_agp;
>   
> -	ret = drm_dev_register(ddev, ent->driver_data);
> +	ret = drm_dev_register(ddev, flags);
>   	if (ret)
>   		goto err_agp;
>   

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v3 4/6] drm/radeon: add helper rdev_to_drm(rdev)
  2024-06-30 16:59 ` [PATCH v3 4/6] drm/radeon: add helper rdev_to_drm(rdev) Wu Hoi Pok
@ 2024-07-03  8:44   ` Thomas Zimmermann
  0 siblings, 0 replies; 29+ messages in thread
From: Thomas Zimmermann @ 2024-07-03  8:44 UTC (permalink / raw)
  To: Wu Hoi Pok
  Cc: Alex Deucher, Christian König, Pan, Xinhui, David Airlie,
	Daniel Vetter, amd-gfx, dri-devel, linux-kernel



Am 30.06.24 um 18:59 schrieb Wu Hoi Pok:
> Add helper rdev_to_drm(rdev), similar to amdgpu, most function should
> access the "drm_device" with "rdev_to_drm(rdev)" instead, where amdgpu has
> "adev_to_drm(adev)". It also makes changing from "*drm_device" to "drm_device"
> in "radeon_devicce" later on easier.
>
> Signed-off-by: Wu Hoi Pok <wuhoipok@gmail.com>

Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Tested-by: Thomas Zimmermann <tzimmermann@suse.de>


> ---
>   drivers/gpu/drm/radeon/radeon.h | 5 +++++
>   1 file changed, 5 insertions(+)
>
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index 0999c8eaae94..ae35c102a487 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -2476,6 +2476,11 @@ void r100_io_wreg(struct radeon_device *rdev, u32 reg, u32 v);
>   u32 cik_mm_rdoorbell(struct radeon_device *rdev, u32 index);
>   void cik_mm_wdoorbell(struct radeon_device *rdev, u32 index, u32 v);
>   
> +static inline struct drm_device *rdev_to_drm(struct radeon_device *rdev)
> +{
> +	return rdev->ddev;
> +}
> +
>   /*
>    * Cast helper
>    */

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v3 5/6] drm/radeon: change rdev->ddev to rdev_to_drm(rdev)
  2024-06-30 16:59 ` [PATCH v3 5/6] drm/radeon: change rdev->ddev to rdev_to_drm(rdev) Wu Hoi Pok
@ 2024-07-03  8:46   ` Thomas Zimmermann
  0 siblings, 0 replies; 29+ messages in thread
From: Thomas Zimmermann @ 2024-07-03  8:46 UTC (permalink / raw)
  To: Wu Hoi Pok
  Cc: Alex Deucher, Christian König, Pan, Xinhui, David Airlie,
	Daniel Vetter, amd-gfx, dri-devel, linux-kernel



Am 30.06.24 um 18:59 schrieb Wu Hoi Pok:
> This patch changes the way "drm_device" is accessed. It uses "rdev_to_drm(rdev)"
> instead of accessing the struct member directly.
>
> Signed-off-by: Wu Hoi Pok <wuhoipok@gmail.com>

Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Tested-by: Thomas Zimmermann <tzimmermann@suse.de>


> ---
>   drivers/gpu/drm/radeon/atombios_encoders.c |  2 +-
>   drivers/gpu/drm/radeon/cik.c               | 14 ++--
>   drivers/gpu/drm/radeon/dce6_afmt.c         |  2 +-
>   drivers/gpu/drm/radeon/evergreen.c         | 12 ++--
>   drivers/gpu/drm/radeon/ni.c                |  2 +-
>   drivers/gpu/drm/radeon/r100.c              | 24 +++----
>   drivers/gpu/drm/radeon/r300.c              |  6 +-
>   drivers/gpu/drm/radeon/r420.c              |  6 +-
>   drivers/gpu/drm/radeon/r520.c              |  2 +-
>   drivers/gpu/drm/radeon/r600.c              | 12 ++--
>   drivers/gpu/drm/radeon/r600_cs.c           |  2 +-
>   drivers/gpu/drm/radeon/r600_dpm.c          |  4 +-
>   drivers/gpu/drm/radeon/r600_hdmi.c         |  2 +-
>   drivers/gpu/drm/radeon/radeon_acpi.c       | 10 +--
>   drivers/gpu/drm/radeon/radeon_agp.c        |  2 +-
>   drivers/gpu/drm/radeon/radeon_atombios.c   |  2 +-
>   drivers/gpu/drm/radeon/radeon_audio.c      |  4 +-
>   drivers/gpu/drm/radeon/radeon_combios.c    | 12 ++--
>   drivers/gpu/drm/radeon/radeon_device.c     | 10 +--
>   drivers/gpu/drm/radeon/radeon_display.c    | 74 +++++++++++-----------
>   drivers/gpu/drm/radeon/radeon_fbdev.c      | 26 ++++----
>   drivers/gpu/drm/radeon/radeon_fence.c      |  8 +--
>   drivers/gpu/drm/radeon/radeon_gem.c        |  2 +-
>   drivers/gpu/drm/radeon/radeon_i2c.c        |  2 +-
>   drivers/gpu/drm/radeon/radeon_ib.c         |  2 +-
>   drivers/gpu/drm/radeon/radeon_irq_kms.c    | 12 ++--
>   drivers/gpu/drm/radeon/radeon_object.c     |  2 +-
>   drivers/gpu/drm/radeon/radeon_pm.c         | 20 +++---
>   drivers/gpu/drm/radeon/radeon_ring.c       |  2 +-
>   drivers/gpu/drm/radeon/radeon_ttm.c        |  6 +-
>   drivers/gpu/drm/radeon/rs400.c             |  6 +-
>   drivers/gpu/drm/radeon/rs600.c             | 14 ++--
>   drivers/gpu/drm/radeon/rs690.c             |  2 +-
>   drivers/gpu/drm/radeon/rv515.c             |  4 +-
>   drivers/gpu/drm/radeon/rv770.c             |  2 +-
>   drivers/gpu/drm/radeon/si.c                |  4 +-
>   36 files changed, 159 insertions(+), 159 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
> index 03e6871b3065..c82e0fbc49b4 100644
> --- a/drivers/gpu/drm/radeon/atombios_encoders.c
> +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
> @@ -2179,7 +2179,7 @@ int radeon_atom_pick_dig_encoder(struct drm_encoder *encoder, int fe_idx)
>   void
>   radeon_atom_encoder_init(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct drm_encoder *encoder;
>   
>   	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
> diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
> index b5e96a8fc2c1..11a492f21157 100644
> --- a/drivers/gpu/drm/radeon/cik.c
> +++ b/drivers/gpu/drm/radeon/cik.c
> @@ -7585,7 +7585,7 @@ int cik_irq_process(struct radeon_device *rdev)
>   					DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
>   
>   				if (rdev->irq.crtc_vblank_int[0]) {
> -					drm_handle_vblank(rdev->ddev, 0);
> +					drm_handle_vblank(rdev_to_drm(rdev), 0);
>   					rdev->pm.vblank_sync = true;
>   					wake_up(&rdev->irq.vblank_queue);
>   				}
> @@ -7615,7 +7615,7 @@ int cik_irq_process(struct radeon_device *rdev)
>   					DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
>   
>   				if (rdev->irq.crtc_vblank_int[1]) {
> -					drm_handle_vblank(rdev->ddev, 1);
> +					drm_handle_vblank(rdev_to_drm(rdev), 1);
>   					rdev->pm.vblank_sync = true;
>   					wake_up(&rdev->irq.vblank_queue);
>   				}
> @@ -7645,7 +7645,7 @@ int cik_irq_process(struct radeon_device *rdev)
>   					DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
>   
>   				if (rdev->irq.crtc_vblank_int[2]) {
> -					drm_handle_vblank(rdev->ddev, 2);
> +					drm_handle_vblank(rdev_to_drm(rdev), 2);
>   					rdev->pm.vblank_sync = true;
>   					wake_up(&rdev->irq.vblank_queue);
>   				}
> @@ -7675,7 +7675,7 @@ int cik_irq_process(struct radeon_device *rdev)
>   					DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
>   
>   				if (rdev->irq.crtc_vblank_int[3]) {
> -					drm_handle_vblank(rdev->ddev, 3);
> +					drm_handle_vblank(rdev_to_drm(rdev), 3);
>   					rdev->pm.vblank_sync = true;
>   					wake_up(&rdev->irq.vblank_queue);
>   				}
> @@ -7705,7 +7705,7 @@ int cik_irq_process(struct radeon_device *rdev)
>   					DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
>   
>   				if (rdev->irq.crtc_vblank_int[4]) {
> -					drm_handle_vblank(rdev->ddev, 4);
> +					drm_handle_vblank(rdev_to_drm(rdev), 4);
>   					rdev->pm.vblank_sync = true;
>   					wake_up(&rdev->irq.vblank_queue);
>   				}
> @@ -7735,7 +7735,7 @@ int cik_irq_process(struct radeon_device *rdev)
>   					DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
>   
>   				if (rdev->irq.crtc_vblank_int[5]) {
> -					drm_handle_vblank(rdev->ddev, 5);
> +					drm_handle_vblank(rdev_to_drm(rdev), 5);
>   					rdev->pm.vblank_sync = true;
>   					wake_up(&rdev->irq.vblank_queue);
>   				}
> @@ -8581,7 +8581,7 @@ int cik_init(struct radeon_device *rdev)
>   	/* Initialize surface registers */
>   	radeon_surface_init(rdev);
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   
>   	/* Fence driver */
>   	radeon_fence_driver_init(rdev);
> diff --git a/drivers/gpu/drm/radeon/dce6_afmt.c b/drivers/gpu/drm/radeon/dce6_afmt.c
> index 4c06f47453fd..d6ab93ed9ec4 100644
> --- a/drivers/gpu/drm/radeon/dce6_afmt.c
> +++ b/drivers/gpu/drm/radeon/dce6_afmt.c
> @@ -91,7 +91,7 @@ struct r600_audio_pin *dce6_audio_get_pin(struct radeon_device *rdev)
>   			pin = &rdev->audio.pin[i];
>   			pin_count = 0;
>   
> -			list_for_each_entry(encoder, &rdev->ddev->mode_config.encoder_list, head) {
> +			list_for_each_entry(encoder, &rdev_to_drm(rdev)->mode_config.encoder_list, head) {
>   				if (radeon_encoder_is_digital(encoder)) {
>   					radeon_encoder = to_radeon_encoder(encoder);
>   					dig = radeon_encoder->enc_priv;
> diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
> index c634dc28e6c3..bc4ab71613a5 100644
> --- a/drivers/gpu/drm/radeon/evergreen.c
> +++ b/drivers/gpu/drm/radeon/evergreen.c
> @@ -1673,7 +1673,7 @@ void evergreen_pm_misc(struct radeon_device *rdev)
>    */
>   void evergreen_pm_prepare(struct radeon_device *rdev)
>   {
> -	struct drm_device *ddev = rdev->ddev;
> +	struct drm_device *ddev = rdev_to_drm(rdev);
>   	struct drm_crtc *crtc;
>   	struct radeon_crtc *radeon_crtc;
>   	u32 tmp;
> @@ -1698,7 +1698,7 @@ void evergreen_pm_prepare(struct radeon_device *rdev)
>    */
>   void evergreen_pm_finish(struct radeon_device *rdev)
>   {
> -	struct drm_device *ddev = rdev->ddev;
> +	struct drm_device *ddev = rdev_to_drm(rdev);
>   	struct drm_crtc *crtc;
>   	struct radeon_crtc *radeon_crtc;
>   	u32 tmp;
> @@ -1763,7 +1763,7 @@ void evergreen_hpd_set_polarity(struct radeon_device *rdev,
>    */
>   void evergreen_hpd_init(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct drm_connector *connector;
>   	unsigned enabled = 0;
>   	u32 tmp = DC_HPDx_CONNECTION_TIMER(0x9c4) |
> @@ -1804,7 +1804,7 @@ void evergreen_hpd_init(struct radeon_device *rdev)
>    */
>   void evergreen_hpd_fini(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct drm_connector *connector;
>   	unsigned disabled = 0;
>   
> @@ -4753,7 +4753,7 @@ int evergreen_irq_process(struct radeon_device *rdev)
>   				event_name = "vblank";
>   
>   				if (rdev->irq.crtc_vblank_int[crtc_idx]) {
> -					drm_handle_vblank(rdev->ddev, crtc_idx);
> +					drm_handle_vblank(rdev_to_drm(rdev), crtc_idx);
>   					rdev->pm.vblank_sync = true;
>   					wake_up(&rdev->irq.vblank_queue);
>   				}
> @@ -5211,7 +5211,7 @@ int evergreen_init(struct radeon_device *rdev)
>   	/* Initialize surface registers */
>   	radeon_surface_init(rdev);
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   	/* Fence driver */
>   	radeon_fence_driver_init(rdev);
>   	/* initialize AGP */
> diff --git a/drivers/gpu/drm/radeon/ni.c b/drivers/gpu/drm/radeon/ni.c
> index 77aee99e473a..3890911fe693 100644
> --- a/drivers/gpu/drm/radeon/ni.c
> +++ b/drivers/gpu/drm/radeon/ni.c
> @@ -2360,7 +2360,7 @@ int cayman_init(struct radeon_device *rdev)
>   	/* Initialize surface registers */
>   	radeon_surface_init(rdev);
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   	/* Fence driver */
>   	radeon_fence_driver_init(rdev);
>   	/* initialize memory controller */
> diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
> index 0b1e19345f43..d7d7d23bf9a1 100644
> --- a/drivers/gpu/drm/radeon/r100.c
> +++ b/drivers/gpu/drm/radeon/r100.c
> @@ -459,7 +459,7 @@ void r100_pm_misc(struct radeon_device *rdev)
>    */
>   void r100_pm_prepare(struct radeon_device *rdev)
>   {
> -	struct drm_device *ddev = rdev->ddev;
> +	struct drm_device *ddev = rdev_to_drm(rdev);
>   	struct drm_crtc *crtc;
>   	struct radeon_crtc *radeon_crtc;
>   	u32 tmp;
> @@ -490,7 +490,7 @@ void r100_pm_prepare(struct radeon_device *rdev)
>    */
>   void r100_pm_finish(struct radeon_device *rdev)
>   {
> -	struct drm_device *ddev = rdev->ddev;
> +	struct drm_device *ddev = rdev_to_drm(rdev);
>   	struct drm_crtc *crtc;
>   	struct radeon_crtc *radeon_crtc;
>   	u32 tmp;
> @@ -603,7 +603,7 @@ void r100_hpd_set_polarity(struct radeon_device *rdev,
>    */
>   void r100_hpd_init(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct drm_connector *connector;
>   	unsigned enable = 0;
>   
> @@ -626,7 +626,7 @@ void r100_hpd_init(struct radeon_device *rdev)
>    */
>   void r100_hpd_fini(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct drm_connector *connector;
>   	unsigned disable = 0;
>   
> @@ -798,7 +798,7 @@ int r100_irq_process(struct radeon_device *rdev)
>   		/* Vertical blank interrupts */
>   		if (status & RADEON_CRTC_VBLANK_STAT) {
>   			if (rdev->irq.crtc_vblank_int[0]) {
> -				drm_handle_vblank(rdev->ddev, 0);
> +				drm_handle_vblank(rdev_to_drm(rdev), 0);
>   				rdev->pm.vblank_sync = true;
>   				wake_up(&rdev->irq.vblank_queue);
>   			}
> @@ -807,7 +807,7 @@ int r100_irq_process(struct radeon_device *rdev)
>   		}
>   		if (status & RADEON_CRTC2_VBLANK_STAT) {
>   			if (rdev->irq.crtc_vblank_int[1]) {
> -				drm_handle_vblank(rdev->ddev, 1);
> +				drm_handle_vblank(rdev_to_drm(rdev), 1);
>   				rdev->pm.vblank_sync = true;
>   				wake_up(&rdev->irq.vblank_queue);
>   			}
> @@ -1471,7 +1471,7 @@ int r100_cs_packet_parse_vline(struct radeon_cs_parser *p)
>   	header = radeon_get_ib_value(p, h_idx);
>   	crtc_id = radeon_get_ib_value(p, h_idx + 5);
>   	reg = R100_CP_PACKET0_GET_REG(header);
> -	crtc = drm_crtc_find(p->rdev->ddev, p->filp, crtc_id);
> +	crtc = drm_crtc_find(rdev_to_drm(p->rdev), p->filp, crtc_id);
>   	if (!crtc) {
>   		DRM_ERROR("cannot find crtc %d\n", crtc_id);
>   		return -ENOENT;
> @@ -3059,7 +3059,7 @@ DEFINE_SHOW_ATTRIBUTE(r100_debugfs_mc_info);
>   void  r100_debugfs_rbbm_init(struct radeon_device *rdev)
>   {
>   #if defined(CONFIG_DEBUG_FS)
> -	struct dentry *root = rdev->ddev->primary->debugfs_root;
> +	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>   
>   	debugfs_create_file("r100_rbbm_info", 0444, root, rdev,
>   			    &r100_debugfs_rbbm_info_fops);
> @@ -3069,7 +3069,7 @@ void  r100_debugfs_rbbm_init(struct radeon_device *rdev)
>   void r100_debugfs_cp_init(struct radeon_device *rdev)
>   {
>   #if defined(CONFIG_DEBUG_FS)
> -	struct dentry *root = rdev->ddev->primary->debugfs_root;
> +	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>   
>   	debugfs_create_file("r100_cp_ring_info", 0444, root, rdev,
>   			    &r100_debugfs_cp_ring_info_fops);
> @@ -3081,7 +3081,7 @@ void r100_debugfs_cp_init(struct radeon_device *rdev)
>   void  r100_debugfs_mc_info_init(struct radeon_device *rdev)
>   {
>   #if defined(CONFIG_DEBUG_FS)
> -	struct dentry *root = rdev->ddev->primary->debugfs_root;
> +	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>   
>   	debugfs_create_file("r100_mc_info", 0444, root, rdev,
>   			    &r100_debugfs_mc_info_fops);
> @@ -3947,7 +3947,7 @@ int r100_resume(struct radeon_device *rdev)
>   			RREG32(R_0007C0_CP_STAT));
>   	}
>   	/* post */
> -	radeon_combios_asic_init(rdev->ddev);
> +	radeon_combios_asic_init(rdev_to_drm(rdev));
>   	/* Resume clock after posting */
>   	r100_clock_startup(rdev);
>   	/* Initialize surface registers */
> @@ -4056,7 +4056,7 @@ int r100_init(struct radeon_device *rdev)
>   	/* Set asic errata */
>   	r100_errata(rdev);
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   	/* initialize AGP */
>   	if (rdev->flags & RADEON_IS_AGP) {
>   		r = radeon_agp_init(rdev);
> diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
> index 1620f534f55f..05c13102a8cb 100644
> --- a/drivers/gpu/drm/radeon/r300.c
> +++ b/drivers/gpu/drm/radeon/r300.c
> @@ -616,7 +616,7 @@ DEFINE_SHOW_ATTRIBUTE(rv370_debugfs_pcie_gart_info);
>   static void rv370_debugfs_pcie_gart_info_init(struct radeon_device *rdev)
>   {
>   #if defined(CONFIG_DEBUG_FS)
> -	struct dentry *root = rdev->ddev->primary->debugfs_root;
> +	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>   
>   	debugfs_create_file("rv370_pcie_gart_info", 0444, root, rdev,
>   			    &rv370_debugfs_pcie_gart_info_fops);
> @@ -1452,7 +1452,7 @@ int r300_resume(struct radeon_device *rdev)
>   			RREG32(R_0007C0_CP_STAT));
>   	}
>   	/* post */
> -	radeon_combios_asic_init(rdev->ddev);
> +	radeon_combios_asic_init(rdev_to_drm(rdev));
>   	/* Resume clock after posting */
>   	r300_clock_startup(rdev);
>   	/* Initialize surface registers */
> @@ -1538,7 +1538,7 @@ int r300_init(struct radeon_device *rdev)
>   	/* Set asic errata */
>   	r300_errata(rdev);
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   	/* initialize AGP */
>   	if (rdev->flags & RADEON_IS_AGP) {
>   		r = radeon_agp_init(rdev);
> diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c
> index a979662eaa73..9a31cdec6415 100644
> --- a/drivers/gpu/drm/radeon/r420.c
> +++ b/drivers/gpu/drm/radeon/r420.c
> @@ -322,7 +322,7 @@ int r420_resume(struct radeon_device *rdev)
>   	if (rdev->is_atom_bios) {
>   		atom_asic_init(rdev->mode_info.atom_context);
>   	} else {
> -		radeon_combios_asic_init(rdev->ddev);
> +		radeon_combios_asic_init(rdev_to_drm(rdev));
>   	}
>   	/* Resume clock after posting */
>   	r420_clock_resume(rdev);
> @@ -414,7 +414,7 @@ int r420_init(struct radeon_device *rdev)
>   		return -EINVAL;
>   
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   	/* initialize AGP */
>   	if (rdev->flags & RADEON_IS_AGP) {
>   		r = radeon_agp_init(rdev);
> @@ -493,7 +493,7 @@ DEFINE_SHOW_ATTRIBUTE(r420_debugfs_pipes_info);
>   void r420_debugfs_pipes_info_init(struct radeon_device *rdev)
>   {
>   #if defined(CONFIG_DEBUG_FS)
> -	struct dentry *root = rdev->ddev->primary->debugfs_root;
> +	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>   
>   	debugfs_create_file("r420_pipes_info", 0444, root, rdev,
>   			    &r420_debugfs_pipes_info_fops);
> diff --git a/drivers/gpu/drm/radeon/r520.c b/drivers/gpu/drm/radeon/r520.c
> index 6cbcaa845192..08e127b3249a 100644
> --- a/drivers/gpu/drm/radeon/r520.c
> +++ b/drivers/gpu/drm/radeon/r520.c
> @@ -287,7 +287,7 @@ int r520_init(struct radeon_device *rdev)
>   		atom_asic_init(rdev->mode_info.atom_context);
>   	}
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   	/* initialize AGP */
>   	if (rdev->flags & RADEON_IS_AGP) {
>   		r = radeon_agp_init(rdev);
> diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
> index 087d41e370fd..8b62f7faa5b9 100644
> --- a/drivers/gpu/drm/radeon/r600.c
> +++ b/drivers/gpu/drm/radeon/r600.c
> @@ -950,7 +950,7 @@ void r600_hpd_set_polarity(struct radeon_device *rdev,
>   
>   void r600_hpd_init(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct drm_connector *connector;
>   	unsigned enable = 0;
>   
> @@ -1017,7 +1017,7 @@ void r600_hpd_init(struct radeon_device *rdev)
>   
>   void r600_hpd_fini(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct drm_connector *connector;
>   	unsigned disable = 0;
>   
> @@ -3280,7 +3280,7 @@ int r600_init(struct radeon_device *rdev)
>   	/* Initialize surface registers */
>   	radeon_surface_init(rdev);
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   	/* Fence driver */
>   	radeon_fence_driver_init(rdev);
>   	if (rdev->flags & RADEON_IS_AGP) {
> @@ -4136,7 +4136,7 @@ int r600_irq_process(struct radeon_device *rdev)
>   					DRM_DEBUG("IH: D1 vblank - IH event w/o asserted irq bit?\n");
>   
>   				if (rdev->irq.crtc_vblank_int[0]) {
> -					drm_handle_vblank(rdev->ddev, 0);
> +					drm_handle_vblank(rdev_to_drm(rdev), 0);
>   					rdev->pm.vblank_sync = true;
>   					wake_up(&rdev->irq.vblank_queue);
>   				}
> @@ -4166,7 +4166,7 @@ int r600_irq_process(struct radeon_device *rdev)
>   					DRM_DEBUG("IH: D2 vblank - IH event w/o asserted irq bit?\n");
>   
>   				if (rdev->irq.crtc_vblank_int[1]) {
> -					drm_handle_vblank(rdev->ddev, 1);
> +					drm_handle_vblank(rdev_to_drm(rdev), 1);
>   					rdev->pm.vblank_sync = true;
>   					wake_up(&rdev->irq.vblank_queue);
>   				}
> @@ -4358,7 +4358,7 @@ DEFINE_SHOW_ATTRIBUTE(r600_debugfs_mc_info);
>   static void r600_debugfs_mc_info_init(struct radeon_device *rdev)
>   {
>   #if defined(CONFIG_DEBUG_FS)
> -	struct dentry *root = rdev->ddev->primary->debugfs_root;
> +	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>   
>   	debugfs_create_file("r600_mc_info", 0444, root, rdev,
>   			    &r600_debugfs_mc_info_fops);
> diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c
> index 6cf54a747749..1b2d31c4d77c 100644
> --- a/drivers/gpu/drm/radeon/r600_cs.c
> +++ b/drivers/gpu/drm/radeon/r600_cs.c
> @@ -884,7 +884,7 @@ int r600_cs_common_vline_parse(struct radeon_cs_parser *p,
>   	crtc_id = radeon_get_ib_value(p, h_idx + 2 + 7 + 1);
>   	reg = R600_CP_PACKET0_GET_REG(header);
>   
> -	crtc = drm_crtc_find(p->rdev->ddev, p->filp, crtc_id);
> +	crtc = drm_crtc_find(rdev_to_drm(p->rdev), p->filp, crtc_id);
>   	if (!crtc) {
>   		DRM_ERROR("cannot find crtc %d\n", crtc_id);
>   		return -ENOENT;
> diff --git a/drivers/gpu/drm/radeon/r600_dpm.c b/drivers/gpu/drm/radeon/r600_dpm.c
> index 64980a61d38a..81d58ef667dd 100644
> --- a/drivers/gpu/drm/radeon/r600_dpm.c
> +++ b/drivers/gpu/drm/radeon/r600_dpm.c
> @@ -153,7 +153,7 @@ void r600_dpm_print_ps_status(struct radeon_device *rdev,
>   
>   u32 r600_dpm_get_vblank_time(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct drm_crtc *crtc;
>   	struct radeon_crtc *radeon_crtc;
>   	u32 vblank_in_pixels;
> @@ -180,7 +180,7 @@ u32 r600_dpm_get_vblank_time(struct radeon_device *rdev)
>   
>   u32 r600_dpm_get_vrefresh(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct drm_crtc *crtc;
>   	struct radeon_crtc *radeon_crtc;
>   	u32 vrefresh = 0;
> diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c b/drivers/gpu/drm/radeon/r600_hdmi.c
> index f3551ebaa2f0..661f374f5f27 100644
> --- a/drivers/gpu/drm/radeon/r600_hdmi.c
> +++ b/drivers/gpu/drm/radeon/r600_hdmi.c
> @@ -116,7 +116,7 @@ void r600_audio_update_hdmi(struct work_struct *work)
>   {
>   	struct radeon_device *rdev = container_of(work, struct radeon_device,
>   						  audio_work);
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct r600_audio_pin audio_status = r600_audio_status(rdev);
>   	struct drm_encoder *encoder;
>   	bool changed = false;
> diff --git a/drivers/gpu/drm/radeon/radeon_acpi.c b/drivers/gpu/drm/radeon/radeon_acpi.c
> index 603a78e41ba5..22ce61bdfc06 100644
> --- a/drivers/gpu/drm/radeon/radeon_acpi.c
> +++ b/drivers/gpu/drm/radeon/radeon_acpi.c
> @@ -405,11 +405,11 @@ static int radeon_atif_handler(struct radeon_device *rdev,
>   	if (req.pending & ATIF_DGPU_DISPLAY_EVENT) {
>   		if ((rdev->flags & RADEON_IS_PX) &&
>   		    radeon_atpx_dgpu_req_power_for_displays()) {
> -			pm_runtime_get_sync(rdev->ddev->dev);
> +			pm_runtime_get_sync(rdev_to_drm(rdev)->dev);
>   			/* Just fire off a uevent and let userspace tell us what to do */
> -			drm_helper_hpd_irq_event(rdev->ddev);
> -			pm_runtime_mark_last_busy(rdev->ddev->dev);
> -			pm_runtime_put_autosuspend(rdev->ddev->dev);
> +			drm_helper_hpd_irq_event(rdev_to_drm(rdev));
> +			pm_runtime_mark_last_busy(rdev_to_drm(rdev)->dev);
> +			pm_runtime_put_autosuspend(rdev_to_drm(rdev)->dev);
>   		}
>   	}
>   	/* TODO: check other events */
> @@ -736,7 +736,7 @@ int radeon_acpi_init(struct radeon_device *rdev)
>   		struct radeon_encoder *target = NULL;
>   
>   		/* Find the encoder controlling the brightness */
> -		list_for_each_entry(tmp, &rdev->ddev->mode_config.encoder_list,
> +		list_for_each_entry(tmp, &rdev_to_drm(rdev)->mode_config.encoder_list,
>   				head) {
>   			struct radeon_encoder *enc = to_radeon_encoder(tmp);
>   
> diff --git a/drivers/gpu/drm/radeon/radeon_agp.c b/drivers/gpu/drm/radeon/radeon_agp.c
> index a3d749e350f9..89d7b0e9e79f 100644
> --- a/drivers/gpu/drm/radeon/radeon_agp.c
> +++ b/drivers/gpu/drm/radeon/radeon_agp.c
> @@ -161,7 +161,7 @@ struct radeon_agp_head *radeon_agp_head_init(struct drm_device *dev)
>   
>   static int radeon_agp_head_acquire(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct pci_dev *pdev = to_pci_dev(dev->dev);
>   
>   	if (!rdev->agp)
> diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
> index 10793a433bf5..97c4e10d0550 100644
> --- a/drivers/gpu/drm/radeon/radeon_atombios.c
> +++ b/drivers/gpu/drm/radeon/radeon_atombios.c
> @@ -187,7 +187,7 @@ void radeon_atombios_i2c_init(struct radeon_device *rdev)
>   
>   			if (i2c.valid) {
>   				sprintf(stmp, "0x%x", i2c.i2c_id);
> -				rdev->i2c_bus[i] = radeon_i2c_create(rdev->ddev, &i2c, stmp);
> +				rdev->i2c_bus[i] = radeon_i2c_create(rdev_to_drm(rdev), &i2c, stmp);
>   			}
>   			gpio = (ATOM_GPIO_I2C_ASSIGMENT *)
>   				((u8 *)gpio + sizeof(ATOM_GPIO_I2C_ASSIGMENT));
> diff --git a/drivers/gpu/drm/radeon/radeon_audio.c b/drivers/gpu/drm/radeon/radeon_audio.c
> index 0bcd767b9f47..47aa06a9a942 100644
> --- a/drivers/gpu/drm/radeon/radeon_audio.c
> +++ b/drivers/gpu/drm/radeon/radeon_audio.c
> @@ -196,7 +196,7 @@ static void radeon_audio_enable(struct radeon_device *rdev,
>   		return;
>   
>   	if (rdev->mode_info.mode_config_initialized) {
> -		list_for_each_entry(encoder, &rdev->ddev->mode_config.encoder_list, head) {
> +		list_for_each_entry(encoder, &rdev_to_drm(rdev)->mode_config.encoder_list, head) {
>   			if (radeon_encoder_is_digital(encoder)) {
>   				radeon_encoder = to_radeon_encoder(encoder);
>   				dig = radeon_encoder->enc_priv;
> @@ -760,7 +760,7 @@ static int radeon_audio_component_get_eld(struct device *kdev, int port,
>   	if (!rdev->audio.enabled || !rdev->mode_info.mode_config_initialized)
>   		return 0;
>   
> -	list_for_each_entry(encoder, &rdev->ddev->mode_config.encoder_list, head) {
> +	list_for_each_entry(encoder, &rdev_to_drm(rdev)->mode_config.encoder_list, head) {
>   		if (!radeon_encoder_is_digital(encoder))
>   			continue;
>   		radeon_encoder = to_radeon_encoder(encoder);
> diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
> index 6952b1273b0f..41ddc576f8f8 100644
> --- a/drivers/gpu/drm/radeon/radeon_combios.c
> +++ b/drivers/gpu/drm/radeon/radeon_combios.c
> @@ -372,7 +372,7 @@ bool radeon_combios_check_hardcoded_edid(struct radeon_device *rdev)
>   	int edid_info, size;
>   	struct edid *edid;
>   	unsigned char *raw;
> -	edid_info = combios_get_table_offset(rdev->ddev, COMBIOS_HARDCODED_EDID_TABLE);
> +	edid_info = combios_get_table_offset(rdev_to_drm(rdev), COMBIOS_HARDCODED_EDID_TABLE);
>   	if (!edid_info)
>   		return false;
>   
> @@ -642,7 +642,7 @@ static struct radeon_i2c_bus_rec combios_setup_i2c_bus(struct radeon_device *rde
>   
>   static struct radeon_i2c_bus_rec radeon_combios_get_i2c_info_from_table(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct radeon_i2c_bus_rec i2c;
>   	u16 offset;
>   	u8 id, blocks, clk, data;
> @@ -670,7 +670,7 @@ static struct radeon_i2c_bus_rec radeon_combios_get_i2c_info_from_table(struct r
>   
>   void radeon_combios_i2c_init(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct radeon_i2c_bus_rec i2c;
>   
>   	/* actual hw pads
> @@ -812,7 +812,7 @@ bool radeon_combios_get_clock_info(struct drm_device *dev)
>   
>   bool radeon_combios_sideport_present(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	u16 igp_info;
>   
>   	/* sideport is AMD only */
> @@ -915,7 +915,7 @@ struct radeon_encoder_primary_dac *radeon_combios_get_primary_dac_info(struct
>   enum radeon_tv_std
>   radeon_combios_get_tv_info(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	uint16_t tv_info;
>   	enum radeon_tv_std tv_std = TV_STD_NTSC;
>   
> @@ -2637,7 +2637,7 @@ static const char *thermal_controller_names[] = {
>   
>   void radeon_combios_get_power_modes(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	u16 offset, misc, misc2 = 0;
>   	u8 rev, tmp;
>   	int state_index = 0;
> diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
> index afbb3a80c0c6..32851632643d 100644
> --- a/drivers/gpu/drm/radeon/radeon_device.c
> +++ b/drivers/gpu/drm/radeon/radeon_device.c
> @@ -760,7 +760,7 @@ bool radeon_boot_test_post_card(struct radeon_device *rdev)
>   		if (rdev->is_atom_bios)
>   			atom_asic_init(rdev->mode_info.atom_context);
>   		else
> -			radeon_combios_asic_init(rdev->ddev);
> +			radeon_combios_asic_init(rdev_to_drm(rdev));
>   		return true;
>   	} else {
>   		dev_err(rdev->dev, "Card not posted and no BIOS - ignoring\n");
> @@ -980,7 +980,7 @@ int radeon_atombios_init(struct radeon_device *rdev)
>   		return -ENOMEM;
>   
>   	rdev->mode_info.atom_card_info = atom_card_info;
> -	atom_card_info->dev = rdev->ddev;
> +	atom_card_info->dev = rdev_to_drm(rdev);
>   	atom_card_info->reg_read = cail_reg_read;
>   	atom_card_info->reg_write = cail_reg_write;
>   	/* needed for iio ops */
> @@ -1005,7 +1005,7 @@ int radeon_atombios_init(struct radeon_device *rdev)
>   
>   	mutex_init(&rdev->mode_info.atom_context->mutex);
>   	mutex_init(&rdev->mode_info.atom_context->scratch_mutex);
> -	radeon_atom_initialize_bios_scratch_regs(rdev->ddev);
> +	radeon_atom_initialize_bios_scratch_regs(rdev_to_drm(rdev));
>   	atom_allocate_fb_scratch(rdev->mode_info.atom_context);
>   	return 0;
>   }
> @@ -1049,7 +1049,7 @@ void radeon_atombios_fini(struct radeon_device *rdev)
>    */
>   int radeon_combios_init(struct radeon_device *rdev)
>   {
> -	radeon_combios_initialize_bios_scratch_regs(rdev->ddev);
> +	radeon_combios_initialize_bios_scratch_regs(rdev_to_drm(rdev));
>   	return 0;
>   }
>   
> @@ -1847,7 +1847,7 @@ int radeon_gpu_reset(struct radeon_device *rdev)
>   
>   	downgrade_write(&rdev->exclusive_lock);
>   
> -	drm_helper_resume_force_mode(rdev->ddev);
> +	drm_helper_resume_force_mode(rdev_to_drm(rdev));
>   
>   	/* set the power state here in case we are a PX system or headless */
>   	if ((rdev->pm.pm_method == PM_METHOD_DPM) && rdev->pm.dpm_enabled)
> diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
> index 843383f7237f..829d44cf6759 100644
> --- a/drivers/gpu/drm/radeon/radeon_display.c
> +++ b/drivers/gpu/drm/radeon/radeon_display.c
> @@ -302,13 +302,13 @@ void radeon_crtc_handle_vblank(struct radeon_device *rdev, int crtc_id)
>   	if ((radeon_use_pflipirq == 2) && ASIC_IS_DCE4(rdev))
>   		return;
>   
> -	spin_lock_irqsave(&rdev->ddev->event_lock, flags);
> +	spin_lock_irqsave(&rdev_to_drm(rdev)->event_lock, flags);
>   	if (radeon_crtc->flip_status != RADEON_FLIP_SUBMITTED) {
>   		DRM_DEBUG_DRIVER("radeon_crtc->flip_status = %d != "
>   				 "RADEON_FLIP_SUBMITTED(%d)\n",
>   				 radeon_crtc->flip_status,
>   				 RADEON_FLIP_SUBMITTED);
> -		spin_unlock_irqrestore(&rdev->ddev->event_lock, flags);
> +		spin_unlock_irqrestore(&rdev_to_drm(rdev)->event_lock, flags);
>   		return;
>   	}
>   
> @@ -334,7 +334,7 @@ void radeon_crtc_handle_vblank(struct radeon_device *rdev, int crtc_id)
>   	 */
>   	if (update_pending &&
>   	    (DRM_SCANOUTPOS_VALID &
> -	     radeon_get_crtc_scanoutpos(rdev->ddev, crtc_id,
> +	     radeon_get_crtc_scanoutpos(rdev_to_drm(rdev), crtc_id,
>   					GET_DISTANCE_TO_VBLANKSTART,
>   					&vpos, &hpos, NULL, NULL,
>   					&rdev->mode_info.crtcs[crtc_id]->base.hwmode)) &&
> @@ -347,7 +347,7 @@ void radeon_crtc_handle_vblank(struct radeon_device *rdev, int crtc_id)
>   		 */
>   		update_pending = 0;
>   	}
> -	spin_unlock_irqrestore(&rdev->ddev->event_lock, flags);
> +	spin_unlock_irqrestore(&rdev_to_drm(rdev)->event_lock, flags);
>   	if (!update_pending)
>   		radeon_crtc_handle_flip(rdev, crtc_id);
>   }
> @@ -370,14 +370,14 @@ void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id)
>   	if (radeon_crtc == NULL)
>   		return;
>   
> -	spin_lock_irqsave(&rdev->ddev->event_lock, flags);
> +	spin_lock_irqsave(&rdev_to_drm(rdev)->event_lock, flags);
>   	work = radeon_crtc->flip_work;
>   	if (radeon_crtc->flip_status != RADEON_FLIP_SUBMITTED) {
>   		DRM_DEBUG_DRIVER("radeon_crtc->flip_status = %d != "
>   				 "RADEON_FLIP_SUBMITTED(%d)\n",
>   				 radeon_crtc->flip_status,
>   				 RADEON_FLIP_SUBMITTED);
> -		spin_unlock_irqrestore(&rdev->ddev->event_lock, flags);
> +		spin_unlock_irqrestore(&rdev_to_drm(rdev)->event_lock, flags);
>   		return;
>   	}
>   
> @@ -389,7 +389,7 @@ void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id)
>   	if (work->event)
>   		drm_crtc_send_vblank_event(&radeon_crtc->base, work->event);
>   
> -	spin_unlock_irqrestore(&rdev->ddev->event_lock, flags);
> +	spin_unlock_irqrestore(&rdev_to_drm(rdev)->event_lock, flags);
>   
>   	drm_crtc_vblank_put(&radeon_crtc->base);
>   	radeon_irq_kms_pflip_irq_put(rdev, work->crtc_id);
> @@ -408,7 +408,7 @@ static void radeon_flip_work_func(struct work_struct *__work)
>   	struct radeon_flip_work *work =
>   		container_of(__work, struct radeon_flip_work, flip_work);
>   	struct radeon_device *rdev = work->rdev;
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct radeon_crtc *radeon_crtc = rdev->mode_info.crtcs[work->crtc_id];
>   
>   	struct drm_crtc *crtc = &radeon_crtc->base;
> @@ -1401,7 +1401,7 @@ static int radeon_modeset_create_props(struct radeon_device *rdev)
>   
>   	if (rdev->is_atom_bios) {
>   		rdev->mode_info.coherent_mode_property =
> -			drm_property_create_range(rdev->ddev, 0 , "coherent", 0, 1);
> +			drm_property_create_range(rdev_to_drm(rdev), 0, "coherent", 0, 1);
>   		if (!rdev->mode_info.coherent_mode_property)
>   			return -ENOMEM;
>   	}
> @@ -1409,57 +1409,57 @@ static int radeon_modeset_create_props(struct radeon_device *rdev)
>   	if (!ASIC_IS_AVIVO(rdev)) {
>   		sz = ARRAY_SIZE(radeon_tmds_pll_enum_list);
>   		rdev->mode_info.tmds_pll_property =
> -			drm_property_create_enum(rdev->ddev, 0,
> +			drm_property_create_enum(rdev_to_drm(rdev), 0,
>   					    "tmds_pll",
>   					    radeon_tmds_pll_enum_list, sz);
>   	}
>   
>   	rdev->mode_info.load_detect_property =
> -		drm_property_create_range(rdev->ddev, 0, "load detection", 0, 1);
> +		drm_property_create_range(rdev_to_drm(rdev), 0, "load detection", 0, 1);
>   	if (!rdev->mode_info.load_detect_property)
>   		return -ENOMEM;
>   
> -	drm_mode_create_scaling_mode_property(rdev->ddev);
> +	drm_mode_create_scaling_mode_property(rdev_to_drm(rdev));
>   
>   	sz = ARRAY_SIZE(radeon_tv_std_enum_list);
>   	rdev->mode_info.tv_std_property =
> -		drm_property_create_enum(rdev->ddev, 0,
> +		drm_property_create_enum(rdev_to_drm(rdev), 0,
>   				    "tv standard",
>   				    radeon_tv_std_enum_list, sz);
>   
>   	sz = ARRAY_SIZE(radeon_underscan_enum_list);
>   	rdev->mode_info.underscan_property =
> -		drm_property_create_enum(rdev->ddev, 0,
> +		drm_property_create_enum(rdev_to_drm(rdev), 0,
>   				    "underscan",
>   				    radeon_underscan_enum_list, sz);
>   
>   	rdev->mode_info.underscan_hborder_property =
> -		drm_property_create_range(rdev->ddev, 0,
> +		drm_property_create_range(rdev_to_drm(rdev), 0,
>   					"underscan hborder", 0, 128);
>   	if (!rdev->mode_info.underscan_hborder_property)
>   		return -ENOMEM;
>   
>   	rdev->mode_info.underscan_vborder_property =
> -		drm_property_create_range(rdev->ddev, 0,
> +		drm_property_create_range(rdev_to_drm(rdev), 0,
>   					"underscan vborder", 0, 128);
>   	if (!rdev->mode_info.underscan_vborder_property)
>   		return -ENOMEM;
>   
>   	sz = ARRAY_SIZE(radeon_audio_enum_list);
>   	rdev->mode_info.audio_property =
> -		drm_property_create_enum(rdev->ddev, 0,
> +		drm_property_create_enum(rdev_to_drm(rdev), 0,
>   					 "audio",
>   					 radeon_audio_enum_list, sz);
>   
>   	sz = ARRAY_SIZE(radeon_dither_enum_list);
>   	rdev->mode_info.dither_property =
> -		drm_property_create_enum(rdev->ddev, 0,
> +		drm_property_create_enum(rdev_to_drm(rdev), 0,
>   					 "dither",
>   					 radeon_dither_enum_list, sz);
>   
>   	sz = ARRAY_SIZE(radeon_output_csc_enum_list);
>   	rdev->mode_info.output_csc_property =
> -		drm_property_create_enum(rdev->ddev, 0,
> +		drm_property_create_enum(rdev_to_drm(rdev), 0,
>   					 "output_csc",
>   					 radeon_output_csc_enum_list, sz);
>   
> @@ -1578,29 +1578,29 @@ int radeon_modeset_init(struct radeon_device *rdev)
>   	int i;
>   	int ret;
>   
> -	drm_mode_config_init(rdev->ddev);
> +	drm_mode_config_init(rdev_to_drm(rdev));
>   	rdev->mode_info.mode_config_initialized = true;
>   
> -	rdev->ddev->mode_config.funcs = &radeon_mode_funcs;
> +	rdev_to_drm(rdev)->mode_config.funcs = &radeon_mode_funcs;
>   
>   	if (radeon_use_pflipirq == 2 && rdev->family >= CHIP_R600)
> -		rdev->ddev->mode_config.async_page_flip = true;
> +		rdev_to_drm(rdev)->mode_config.async_page_flip = true;
>   
>   	if (ASIC_IS_DCE5(rdev)) {
> -		rdev->ddev->mode_config.max_width = 16384;
> -		rdev->ddev->mode_config.max_height = 16384;
> +		rdev_to_drm(rdev)->mode_config.max_width = 16384;
> +		rdev_to_drm(rdev)->mode_config.max_height = 16384;
>   	} else if (ASIC_IS_AVIVO(rdev)) {
> -		rdev->ddev->mode_config.max_width = 8192;
> -		rdev->ddev->mode_config.max_height = 8192;
> +		rdev_to_drm(rdev)->mode_config.max_width = 8192;
> +		rdev_to_drm(rdev)->mode_config.max_height = 8192;
>   	} else {
> -		rdev->ddev->mode_config.max_width = 4096;
> -		rdev->ddev->mode_config.max_height = 4096;
> +		rdev_to_drm(rdev)->mode_config.max_width = 4096;
> +		rdev_to_drm(rdev)->mode_config.max_height = 4096;
>   	}
>   
> -	rdev->ddev->mode_config.preferred_depth = 24;
> -	rdev->ddev->mode_config.prefer_shadow = 1;
> +	rdev_to_drm(rdev)->mode_config.preferred_depth = 24;
> +	rdev_to_drm(rdev)->mode_config.prefer_shadow = 1;
>   
> -	rdev->ddev->mode_config.fb_modifiers_not_supported = true;
> +	rdev_to_drm(rdev)->mode_config.fb_modifiers_not_supported = true;
>   
>   	ret = radeon_modeset_create_props(rdev);
>   	if (ret) {
> @@ -1618,11 +1618,11 @@ int radeon_modeset_init(struct radeon_device *rdev)
>   
>   	/* allocate crtcs */
>   	for (i = 0; i < rdev->num_crtc; i++) {
> -		radeon_crtc_init(rdev->ddev, i);
> +		radeon_crtc_init(rdev_to_drm(rdev), i);
>   	}
>   
>   	/* okay we should have all the bios connectors */
> -	ret = radeon_setup_enc_conn(rdev->ddev);
> +	ret = radeon_setup_enc_conn(rdev_to_drm(rdev));
>   	if (!ret) {
>   		return ret;
>   	}
> @@ -1639,7 +1639,7 @@ int radeon_modeset_init(struct radeon_device *rdev)
>   	/* setup afmt */
>   	radeon_afmt_init(rdev);
>   
> -	drm_kms_helper_poll_init(rdev->ddev);
> +	drm_kms_helper_poll_init(rdev_to_drm(rdev));
>   
>   	/* do pm late init */
>   	ret = radeon_pm_late_init(rdev);
> @@ -1650,11 +1650,11 @@ int radeon_modeset_init(struct radeon_device *rdev)
>   void radeon_modeset_fini(struct radeon_device *rdev)
>   {
>   	if (rdev->mode_info.mode_config_initialized) {
> -		drm_kms_helper_poll_fini(rdev->ddev);
> +		drm_kms_helper_poll_fini(rdev_to_drm(rdev));
>   		radeon_hpd_fini(rdev);
> -		drm_helper_force_disable_all(rdev->ddev);
> +		drm_helper_force_disable_all(rdev_to_drm(rdev));
>   		radeon_afmt_fini(rdev);
> -		drm_mode_config_cleanup(rdev->ddev);
> +		drm_mode_config_cleanup(rdev_to_drm(rdev));
>   		rdev->mode_info.mode_config_initialized = false;
>   	}
>   
> diff --git a/drivers/gpu/drm/radeon/radeon_fbdev.c b/drivers/gpu/drm/radeon/radeon_fbdev.c
> index 02bf25759059..fb70de29545c 100644
> --- a/drivers/gpu/drm/radeon/radeon_fbdev.c
> +++ b/drivers/gpu/drm/radeon/radeon_fbdev.c
> @@ -67,7 +67,7 @@ static int radeon_fbdev_create_pinned_object(struct drm_fb_helper *fb_helper,
>   	int height = mode_cmd->height;
>   	u32 cpp;
>   
> -	info = drm_get_format_info(rdev->ddev, mode_cmd);
> +	info = drm_get_format_info(rdev_to_drm(rdev), mode_cmd);
>   	cpp = info->cpp[0];
>   
>   	/* need to align pitch with crtc limits */
> @@ -148,15 +148,15 @@ static int radeon_fbdev_fb_open(struct fb_info *info, int user)
>   	struct radeon_device *rdev = fb_helper->dev->dev_private;
>   	int ret;
>   
> -	ret = pm_runtime_get_sync(rdev->ddev->dev);
> +	ret = pm_runtime_get_sync(rdev_to_drm(rdev)->dev);
>   	if (ret < 0 && ret != -EACCES)
>   		goto err_pm_runtime_mark_last_busy;
>   
>   	return 0;
>   
>   err_pm_runtime_mark_last_busy:
> -	pm_runtime_mark_last_busy(rdev->ddev->dev);
> -	pm_runtime_put_autosuspend(rdev->ddev->dev);
> +	pm_runtime_mark_last_busy(rdev_to_drm(rdev)->dev);
> +	pm_runtime_put_autosuspend(rdev_to_drm(rdev)->dev);
>   	return ret;
>   }
>   
> @@ -165,8 +165,8 @@ static int radeon_fbdev_fb_release(struct fb_info *info, int user)
>   	struct drm_fb_helper *fb_helper = info->par;
>   	struct radeon_device *rdev = fb_helper->dev->dev_private;
>   
> -	pm_runtime_mark_last_busy(rdev->ddev->dev);
> -	pm_runtime_put_autosuspend(rdev->ddev->dev);
> +	pm_runtime_mark_last_busy(rdev_to_drm(rdev)->dev);
> +	pm_runtime_put_autosuspend(rdev_to_drm(rdev)->dev);
>   
>   	return 0;
>   }
> @@ -236,7 +236,7 @@ static int radeon_fbdev_fb_helper_fb_probe(struct drm_fb_helper *fb_helper,
>   		ret = -ENOMEM;
>   		goto err_radeon_fbdev_destroy_pinned_object;
>   	}
> -	ret = radeon_framebuffer_init(rdev->ddev, fb, &mode_cmd, gobj);
> +	ret = radeon_framebuffer_init(rdev_to_drm(rdev), fb, &mode_cmd, gobj);
>   	if (ret) {
>   		DRM_ERROR("failed to initialize framebuffer %d\n", ret);
>   		goto err_kfree;
> @@ -374,12 +374,12 @@ void radeon_fbdev_setup(struct radeon_device *rdev)
>   	fb_helper = kzalloc(sizeof(*fb_helper), GFP_KERNEL);
>   	if (!fb_helper)
>   		return;
> -	drm_fb_helper_prepare(rdev->ddev, fb_helper, bpp_sel, &radeon_fbdev_fb_helper_funcs);
> +	drm_fb_helper_prepare(rdev_to_drm(rdev), fb_helper, bpp_sel, &radeon_fbdev_fb_helper_funcs);
>   
> -	ret = drm_client_init(rdev->ddev, &fb_helper->client, "radeon-fbdev",
> +	ret = drm_client_init(rdev_to_drm(rdev), &fb_helper->client, "radeon-fbdev",
>   			      &radeon_fbdev_client_funcs);
>   	if (ret) {
> -		drm_err(rdev->ddev, "Failed to register client: %d\n", ret);
> +		drm_err(rdev_to_drm(rdev), "Failed to register client: %d\n", ret);
>   		goto err_drm_client_init;
>   	}
>   
> @@ -394,13 +394,13 @@ void radeon_fbdev_setup(struct radeon_device *rdev)
>   
>   void radeon_fbdev_set_suspend(struct radeon_device *rdev, int state)
>   {
> -	if (rdev->ddev->fb_helper)
> -		drm_fb_helper_set_suspend(rdev->ddev->fb_helper, state);
> +	if (rdev_to_drm(rdev)->fb_helper)
> +		drm_fb_helper_set_suspend(rdev_to_drm(rdev)->fb_helper, state);
>   }
>   
>   bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj)
>   {
> -	struct drm_fb_helper *fb_helper = rdev->ddev->fb_helper;
> +	struct drm_fb_helper *fb_helper = rdev_to_drm(rdev)->fb_helper;
>   	struct drm_gem_object *gobj;
>   
>   	if (!fb_helper)
> diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c
> index 4fb780d96f32..daff61586be5 100644
> --- a/drivers/gpu/drm/radeon/radeon_fence.c
> +++ b/drivers/gpu/drm/radeon/radeon_fence.c
> @@ -150,7 +150,7 @@ int radeon_fence_emit(struct radeon_device *rdev,
>   		       rdev->fence_context + ring,
>   		       seq);
>   	radeon_fence_ring_emit(rdev, ring, *fence);
> -	trace_radeon_fence_emit(rdev->ddev, ring, (*fence)->seq);
> +	trace_radeon_fence_emit(rdev_to_drm(rdev), ring, (*fence)->seq);
>   	radeon_fence_schedule_check(rdev, ring);
>   	return 0;
>   }
> @@ -489,7 +489,7 @@ static long radeon_fence_wait_seq_timeout(struct radeon_device *rdev,
>   		if (!target_seq[i])
>   			continue;
>   
> -		trace_radeon_fence_wait_begin(rdev->ddev, i, target_seq[i]);
> +		trace_radeon_fence_wait_begin(rdev_to_drm(rdev), i, target_seq[i]);
>   		radeon_irq_kms_sw_irq_get(rdev, i);
>   	}
>   
> @@ -511,7 +511,7 @@ static long radeon_fence_wait_seq_timeout(struct radeon_device *rdev,
>   			continue;
>   
>   		radeon_irq_kms_sw_irq_put(rdev, i);
> -		trace_radeon_fence_wait_end(rdev->ddev, i, target_seq[i]);
> +		trace_radeon_fence_wait_end(rdev_to_drm(rdev), i, target_seq[i]);
>   	}
>   
>   	return r;
> @@ -995,7 +995,7 @@ DEFINE_DEBUGFS_ATTRIBUTE(radeon_debugfs_gpu_reset_fops,
>   void radeon_debugfs_fence_init(struct radeon_device *rdev)
>   {
>   #if defined(CONFIG_DEBUG_FS)
> -	struct dentry *root = rdev->ddev->primary->debugfs_root;
> +	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>   
>   	debugfs_create_file("radeon_gpu_reset", 0444, root, rdev,
>   			    &radeon_debugfs_gpu_reset_fops);
> diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
> index 2ef201a072f1..9dd4ff09d562 100644
> --- a/drivers/gpu/drm/radeon/radeon_gem.c
> +++ b/drivers/gpu/drm/radeon/radeon_gem.c
> @@ -899,7 +899,7 @@ DEFINE_SHOW_ATTRIBUTE(radeon_debugfs_gem_info);
>   void radeon_gem_debugfs_init(struct radeon_device *rdev)
>   {
>   #if defined(CONFIG_DEBUG_FS)
> -	struct dentry *root = rdev->ddev->primary->debugfs_root;
> +	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>   
>   	debugfs_create_file("radeon_gem_info", 0444, root, rdev,
>   			    &radeon_debugfs_gem_info_fops);
> diff --git a/drivers/gpu/drm/radeon/radeon_i2c.c b/drivers/gpu/drm/radeon/radeon_i2c.c
> index 3d174390a8af..1f16619ed06e 100644
> --- a/drivers/gpu/drm/radeon/radeon_i2c.c
> +++ b/drivers/gpu/drm/radeon/radeon_i2c.c
> @@ -1011,7 +1011,7 @@ void radeon_i2c_add(struct radeon_device *rdev,
>   		    struct radeon_i2c_bus_rec *rec,
>   		    const char *name)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	int i;
>   
>   	for (i = 0; i < RADEON_MAX_I2C_BUS; i++) {
> diff --git a/drivers/gpu/drm/radeon/radeon_ib.c b/drivers/gpu/drm/radeon/radeon_ib.c
> index 63d914f3414d..1aa41cc3f991 100644
> --- a/drivers/gpu/drm/radeon/radeon_ib.c
> +++ b/drivers/gpu/drm/radeon/radeon_ib.c
> @@ -309,7 +309,7 @@ DEFINE_SHOW_ATTRIBUTE(radeon_debugfs_sa_info);
>   static void radeon_debugfs_sa_init(struct radeon_device *rdev)
>   {
>   #if defined(CONFIG_DEBUG_FS)
> -	struct dentry *root = rdev->ddev->primary->debugfs_root;
> +	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>   
>   	debugfs_create_file("radeon_sa_info", 0444, root, rdev,
>   			    &radeon_debugfs_sa_info_fops);
> diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
> index c4dda908666c..9961251b44ba 100644
> --- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
> +++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
> @@ -80,7 +80,7 @@ static void radeon_hotplug_work_func(struct work_struct *work)
>   {
>   	struct radeon_device *rdev = container_of(work, struct radeon_device,
>   						  hotplug_work.work);
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct drm_mode_config *mode_config = &dev->mode_config;
>   	struct drm_connector *connector;
>   
> @@ -101,7 +101,7 @@ static void radeon_dp_work_func(struct work_struct *work)
>   {
>   	struct radeon_device *rdev = container_of(work, struct radeon_device,
>   						  dp_work);
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct drm_mode_config *mode_config = &dev->mode_config;
>   	struct drm_connector *connector;
>   
> @@ -197,7 +197,7 @@ static void radeon_driver_irq_uninstall_kms(struct drm_device *dev)
>   
>   static int radeon_irq_install(struct radeon_device *rdev, int irq)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	int ret;
>   
>   	if (irq == IRQ_NOTCONNECTED)
> @@ -218,7 +218,7 @@ static int radeon_irq_install(struct radeon_device *rdev, int irq)
>   
>   static void radeon_irq_uninstall(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct pci_dev *pdev = to_pci_dev(dev->dev);
>   
>   	radeon_driver_irq_uninstall_kms(dev);
> @@ -322,9 +322,9 @@ int radeon_irq_kms_init(struct radeon_device *rdev)
>   	spin_lock_init(&rdev->irq.lock);
>   
>   	/* Disable vblank irqs aggressively for power-saving */
> -	rdev->ddev->vblank_disable_immediate = true;
> +	rdev_to_drm(rdev)->vblank_disable_immediate = true;
>   
> -	r = drm_vblank_init(rdev->ddev, rdev->num_crtc);
> +	r = drm_vblank_init(rdev_to_drm(rdev), rdev->num_crtc);
>   	if (r) {
>   		return r;
>   	}
> diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
> index a955f8a2f7fe..450ff7daa46c 100644
> --- a/drivers/gpu/drm/radeon/radeon_object.c
> +++ b/drivers/gpu/drm/radeon/radeon_object.c
> @@ -150,7 +150,7 @@ int radeon_bo_create(struct radeon_device *rdev,
>   	bo = kzalloc(sizeof(struct radeon_bo), GFP_KERNEL);
>   	if (bo == NULL)
>   		return -ENOMEM;
> -	drm_gem_private_object_init(rdev->ddev, &bo->tbo.base, size);
> +	drm_gem_private_object_init(rdev_to_drm(rdev), &bo->tbo.base, size);
>   	bo->rdev = rdev;
>   	bo->surface_reg = -1;
>   	INIT_LIST_HEAD(&bo->list);
> diff --git a/drivers/gpu/drm/radeon/radeon_pm.c b/drivers/gpu/drm/radeon/radeon_pm.c
> index 2d9d9f46f243..b4fb7e70320b 100644
> --- a/drivers/gpu/drm/radeon/radeon_pm.c
> +++ b/drivers/gpu/drm/radeon/radeon_pm.c
> @@ -282,7 +282,7 @@ static void radeon_pm_set_clocks(struct radeon_device *rdev)
>   
>   	if (rdev->irq.installed) {
>   		i = 0;
> -		drm_for_each_crtc(crtc, rdev->ddev) {
> +		drm_for_each_crtc(crtc, rdev_to_drm(rdev)) {
>   			if (rdev->pm.active_crtcs & (1 << i)) {
>   				/* This can fail if a modeset is in progress */
>   				if (drm_crtc_vblank_get(crtc) == 0)
> @@ -299,7 +299,7 @@ static void radeon_pm_set_clocks(struct radeon_device *rdev)
>   
>   	if (rdev->irq.installed) {
>   		i = 0;
> -		drm_for_each_crtc(crtc, rdev->ddev) {
> +		drm_for_each_crtc(crtc, rdev_to_drm(rdev)) {
>   			if (rdev->pm.req_vblank & (1 << i)) {
>   				rdev->pm.req_vblank &= ~(1 << i);
>   				drm_crtc_vblank_put(crtc);
> @@ -671,7 +671,7 @@ static ssize_t radeon_hwmon_show_temp(struct device *dev,
>   				      char *buf)
>   {
>   	struct radeon_device *rdev = dev_get_drvdata(dev);
> -	struct drm_device *ddev = rdev->ddev;
> +	struct drm_device *ddev = rdev_to_drm(rdev);
>   	int temp;
>   
>   	/* Can't get temperature when the card is off */
> @@ -715,7 +715,7 @@ static ssize_t radeon_hwmon_show_sclk(struct device *dev,
>   				      struct device_attribute *attr, char *buf)
>   {
>   	struct radeon_device *rdev = dev_get_drvdata(dev);
> -	struct drm_device *ddev = rdev->ddev;
> +	struct drm_device *ddev = rdev_to_drm(rdev);
>   	u32 sclk = 0;
>   
>   	/* Can't get clock frequency when the card is off */
> @@ -740,7 +740,7 @@ static ssize_t radeon_hwmon_show_vddc(struct device *dev,
>   				      struct device_attribute *attr, char *buf)
>   {
>   	struct radeon_device *rdev = dev_get_drvdata(dev);
> -	struct drm_device *ddev = rdev->ddev;
> +	struct drm_device *ddev = rdev_to_drm(rdev);
>   	u16 vddc = 0;
>   
>   	/* Can't get vddc when the card is off */
> @@ -1692,7 +1692,7 @@ void radeon_pm_fini(struct radeon_device *rdev)
>   
>   static void radeon_pm_compute_clocks_old(struct radeon_device *rdev)
>   {
> -	struct drm_device *ddev = rdev->ddev;
> +	struct drm_device *ddev = rdev_to_drm(rdev);
>   	struct drm_crtc *crtc;
>   	struct radeon_crtc *radeon_crtc;
>   
> @@ -1765,7 +1765,7 @@ static void radeon_pm_compute_clocks_old(struct radeon_device *rdev)
>   
>   static void radeon_pm_compute_clocks_dpm(struct radeon_device *rdev)
>   {
> -	struct drm_device *ddev = rdev->ddev;
> +	struct drm_device *ddev = rdev_to_drm(rdev);
>   	struct drm_crtc *crtc;
>   	struct radeon_crtc *radeon_crtc;
>   	struct radeon_connector *radeon_connector;
> @@ -1826,7 +1826,7 @@ static bool radeon_pm_in_vbl(struct radeon_device *rdev)
>   	 */
>   	for (crtc = 0; (crtc < rdev->num_crtc) && in_vbl; crtc++) {
>   		if (rdev->pm.active_crtcs & (1 << crtc)) {
> -			vbl_status = radeon_get_crtc_scanoutpos(rdev->ddev,
> +			vbl_status = radeon_get_crtc_scanoutpos(rdev_to_drm(rdev),
>   								crtc,
>   								USE_REAL_VBLANKSTART,
>   								&vpos, &hpos, NULL, NULL,
> @@ -1918,7 +1918,7 @@ static void radeon_dynpm_idle_work_handler(struct work_struct *work)
>   static int radeon_debugfs_pm_info_show(struct seq_file *m, void *unused)
>   {
>   	struct radeon_device *rdev = m->private;
> -	struct drm_device *ddev = rdev->ddev;
> +	struct drm_device *ddev = rdev_to_drm(rdev);
>   
>   	if  ((rdev->flags & RADEON_IS_PX) &&
>   	     (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) {
> @@ -1955,7 +1955,7 @@ DEFINE_SHOW_ATTRIBUTE(radeon_debugfs_pm_info);
>   static void radeon_debugfs_pm_init(struct radeon_device *rdev)
>   {
>   #if defined(CONFIG_DEBUG_FS)
> -	struct dentry *root = rdev->ddev->primary->debugfs_root;
> +	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>   
>   	debugfs_create_file("radeon_pm_info", 0444, root, rdev,
>   			    &radeon_debugfs_pm_info_fops);
> diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
> index 8d1d458286a8..581ae20c46e4 100644
> --- a/drivers/gpu/drm/radeon/radeon_ring.c
> +++ b/drivers/gpu/drm/radeon/radeon_ring.c
> @@ -550,7 +550,7 @@ static void radeon_debugfs_ring_init(struct radeon_device *rdev, struct radeon_r
>   {
>   #if defined(CONFIG_DEBUG_FS)
>   	const char *ring_name = radeon_debugfs_ring_idx_to_name(ring->idx);
> -	struct dentry *root = rdev->ddev->primary->debugfs_root;
> +	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>   
>   	if (ring_name)
>   		debugfs_create_file(ring_name, 0444, root, ring,
> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
> index 5c65b6dfb99a..69d0c12fa419 100644
> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
> @@ -682,8 +682,8 @@ int radeon_ttm_init(struct radeon_device *rdev)
>   
>   	/* No others user of address space so set it to 0 */
>   	r = ttm_device_init(&rdev->mman.bdev, &radeon_bo_driver, rdev->dev,
> -			       rdev->ddev->anon_inode->i_mapping,
> -			       rdev->ddev->vma_offset_manager,
> +			       rdev_to_drm(rdev)->anon_inode->i_mapping,
> +			       rdev_to_drm(rdev)->vma_offset_manager,
>   			       rdev->need_swiotlb,
>   			       dma_addressing_limited(&rdev->pdev->dev));
>   	if (r) {
> @@ -890,7 +890,7 @@ static const struct file_operations radeon_ttm_gtt_fops = {
>   static void radeon_ttm_debugfs_init(struct radeon_device *rdev)
>   {
>   #if defined(CONFIG_DEBUG_FS)
> -	struct drm_minor *minor = rdev->ddev->primary;
> +	struct drm_minor *minor = rdev_to_drm(rdev)->primary;
>   	struct dentry *root = minor->debugfs_root;
>   
>   	debugfs_create_file("radeon_vram", 0444, root, rdev,
> diff --git a/drivers/gpu/drm/radeon/rs400.c b/drivers/gpu/drm/radeon/rs400.c
> index d4d1501e6576..d6c18fd740ec 100644
> --- a/drivers/gpu/drm/radeon/rs400.c
> +++ b/drivers/gpu/drm/radeon/rs400.c
> @@ -379,7 +379,7 @@ DEFINE_SHOW_ATTRIBUTE(rs400_debugfs_gart_info);
>   static void rs400_debugfs_pcie_gart_info_init(struct radeon_device *rdev)
>   {
>   #if defined(CONFIG_DEBUG_FS)
> -	struct dentry *root = rdev->ddev->primary->debugfs_root;
> +	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>   
>   	debugfs_create_file("rs400_gart_info", 0444, root, rdev,
>   			    &rs400_debugfs_gart_info_fops);
> @@ -474,7 +474,7 @@ int rs400_resume(struct radeon_device *rdev)
>   			RREG32(R_0007C0_CP_STAT));
>   	}
>   	/* post */
> -	radeon_combios_asic_init(rdev->ddev);
> +	radeon_combios_asic_init(rdev_to_drm(rdev));
>   	/* Resume clock after posting */
>   	r300_clock_startup(rdev);
>   	/* Initialize surface registers */
> @@ -552,7 +552,7 @@ int rs400_init(struct radeon_device *rdev)
>   		return -EINVAL;
>   
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   	/* initialize memory controller */
>   	rs400_mc_init(rdev);
>   	/* Fence driver */
> diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
> index 5c162778899b..88c8e91ea651 100644
> --- a/drivers/gpu/drm/radeon/rs600.c
> +++ b/drivers/gpu/drm/radeon/rs600.c
> @@ -321,7 +321,7 @@ void rs600_pm_misc(struct radeon_device *rdev)
>   
>   void rs600_pm_prepare(struct radeon_device *rdev)
>   {
> -	struct drm_device *ddev = rdev->ddev;
> +	struct drm_device *ddev = rdev_to_drm(rdev);
>   	struct drm_crtc *crtc;
>   	struct radeon_crtc *radeon_crtc;
>   	u32 tmp;
> @@ -339,7 +339,7 @@ void rs600_pm_prepare(struct radeon_device *rdev)
>   
>   void rs600_pm_finish(struct radeon_device *rdev)
>   {
> -	struct drm_device *ddev = rdev->ddev;
> +	struct drm_device *ddev = rdev_to_drm(rdev);
>   	struct drm_crtc *crtc;
>   	struct radeon_crtc *radeon_crtc;
>   	u32 tmp;
> @@ -408,7 +408,7 @@ void rs600_hpd_set_polarity(struct radeon_device *rdev,
>   
>   void rs600_hpd_init(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct drm_connector *connector;
>   	unsigned enable = 0;
>   
> @@ -435,7 +435,7 @@ void rs600_hpd_init(struct radeon_device *rdev)
>   
>   void rs600_hpd_fini(struct radeon_device *rdev)
>   {
> -	struct drm_device *dev = rdev->ddev;
> +	struct drm_device *dev = rdev_to_drm(rdev);
>   	struct drm_connector *connector;
>   	unsigned disable = 0;
>   
> @@ -797,7 +797,7 @@ int rs600_irq_process(struct radeon_device *rdev)
>   		/* Vertical blank interrupts */
>   		if (G_007EDC_LB_D1_VBLANK_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) {
>   			if (rdev->irq.crtc_vblank_int[0]) {
> -				drm_handle_vblank(rdev->ddev, 0);
> +				drm_handle_vblank(rdev_to_drm(rdev), 0);
>   				rdev->pm.vblank_sync = true;
>   				wake_up(&rdev->irq.vblank_queue);
>   			}
> @@ -806,7 +806,7 @@ int rs600_irq_process(struct radeon_device *rdev)
>   		}
>   		if (G_007EDC_LB_D2_VBLANK_INTERRUPT(rdev->irq.stat_regs.r500.disp_int)) {
>   			if (rdev->irq.crtc_vblank_int[1]) {
> -				drm_handle_vblank(rdev->ddev, 1);
> +				drm_handle_vblank(rdev_to_drm(rdev), 1);
>   				rdev->pm.vblank_sync = true;
>   				wake_up(&rdev->irq.vblank_queue);
>   			}
> @@ -1133,7 +1133,7 @@ int rs600_init(struct radeon_device *rdev)
>   		return -EINVAL;
>   
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   	/* initialize memory controller */
>   	rs600_mc_init(rdev);
>   	r100_debugfs_rbbm_init(rdev);
> diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c
> index 14fb0819b8c1..016eb4992803 100644
> --- a/drivers/gpu/drm/radeon/rs690.c
> +++ b/drivers/gpu/drm/radeon/rs690.c
> @@ -845,7 +845,7 @@ int rs690_init(struct radeon_device *rdev)
>   		return -EINVAL;
>   
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   	/* initialize memory controller */
>   	rs690_mc_init(rdev);
>   	rv515_debugfs(rdev);
> diff --git a/drivers/gpu/drm/radeon/rv515.c b/drivers/gpu/drm/radeon/rv515.c
> index bbc6ccabf788..1b4dfb645585 100644
> --- a/drivers/gpu/drm/radeon/rv515.c
> +++ b/drivers/gpu/drm/radeon/rv515.c
> @@ -255,7 +255,7 @@ DEFINE_SHOW_ATTRIBUTE(rv515_debugfs_ga_info);
>   void rv515_debugfs(struct radeon_device *rdev)
>   {
>   #if defined(CONFIG_DEBUG_FS)
> -	struct dentry *root = rdev->ddev->primary->debugfs_root;
> +	struct dentry *root = rdev_to_drm(rdev)->primary->debugfs_root;
>   
>   	debugfs_create_file("rv515_pipes_info", 0444, root, rdev,
>   			    &rv515_debugfs_pipes_info_fops);
> @@ -636,7 +636,7 @@ int rv515_init(struct radeon_device *rdev)
>   	if (radeon_boot_test_post_card(rdev) == false)
>   		return -EINVAL;
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   	/* initialize AGP */
>   	if (rdev->flags & RADEON_IS_AGP) {
>   		r = radeon_agp_init(rdev);
> diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
> index 9ce12fa3c356..7d4b0bf59109 100644
> --- a/drivers/gpu/drm/radeon/rv770.c
> +++ b/drivers/gpu/drm/radeon/rv770.c
> @@ -1935,7 +1935,7 @@ int rv770_init(struct radeon_device *rdev)
>   	/* Initialize surface registers */
>   	radeon_surface_init(rdev);
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   	/* Fence driver */
>   	radeon_fence_driver_init(rdev);
>   	/* initialize AGP */
> diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
> index 15759c8ca5b7..6c95575ce109 100644
> --- a/drivers/gpu/drm/radeon/si.c
> +++ b/drivers/gpu/drm/radeon/si.c
> @@ -6277,7 +6277,7 @@ int si_irq_process(struct radeon_device *rdev)
>   				event_name = "vblank";
>   
>   				if (rdev->irq.crtc_vblank_int[crtc_idx]) {
> -					drm_handle_vblank(rdev->ddev, crtc_idx);
> +					drm_handle_vblank(rdev_to_drm(rdev), crtc_idx);
>   					rdev->pm.vblank_sync = true;
>   					wake_up(&rdev->irq.vblank_queue);
>   				}
> @@ -6839,7 +6839,7 @@ int si_init(struct radeon_device *rdev)
>   	/* Initialize surface registers */
>   	radeon_surface_init(rdev);
>   	/* Initialize clocks */
> -	radeon_get_clock_info(rdev->ddev);
> +	radeon_get_clock_info(rdev_to_drm(rdev));
>   
>   	/* Fence driver */
>   	radeon_fence_driver_init(rdev);

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v3 6/6] drm/radeon: change drm_dev_alloc to devm_drm_dev_alloc
  2024-06-30 16:59 ` [PATCH v3 6/6] drm/radeon: change drm_dev_alloc to devm_drm_dev_alloc Wu Hoi Pok
@ 2024-07-03  8:47   ` Thomas Zimmermann
  2024-07-08 20:04     ` Alex Deucher
  0 siblings, 1 reply; 29+ messages in thread
From: Thomas Zimmermann @ 2024-07-03  8:47 UTC (permalink / raw)
  To: Wu Hoi Pok
  Cc: Alex Deucher, Christian König, Pan, Xinhui, David Airlie,
	Daniel Vetter, amd-gfx, dri-devel, linux-kernel



Am 30.06.24 um 18:59 schrieb Wu Hoi Pok:
> "drm_dev_alloc" is deprecated, in order to use the newer "devm_drm_dev_alloc",
> the "drm_device" is stored inside "radeon_device", by changing "rdev_to_drm(rdev)"
> other functions still gain access to the member "drm_device". Also, "devm_drm_dev_alloc"
> is now allocating "radeon_device", allocation inside "radeon_driver_load_kms" has to be
> removed.
>
> In "radeon_device_init", it originally assigned "rdev->dev" etc. However it is already
> done right after "devm_drm_dev_alloc" as you can see down below. It is better remove them.
>
> Signed-off-by: Wu Hoi Pok <wuhoipok@gmail.com>

Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
Tested-by: Thomas Zimmermann <tzimmermann@suse.de>


> ---
>   drivers/gpu/drm/radeon/radeon.h        |  4 ++--
>   drivers/gpu/drm/radeon/radeon_device.c |  3 ---
>   drivers/gpu/drm/radeon/radeon_drv.c    | 12 +++++++++---
>   drivers/gpu/drm/radeon/radeon_kms.c    |  8 +-------
>   4 files changed, 12 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> index ae35c102a487..fd8a4513025f 100644
> --- a/drivers/gpu/drm/radeon/radeon.h
> +++ b/drivers/gpu/drm/radeon/radeon.h
> @@ -2297,7 +2297,7 @@ typedef void (*radeon_wreg_t)(struct radeon_device*, uint32_t, uint32_t);
>   
>   struct radeon_device {
>   	struct device			*dev;
> -	struct drm_device		*ddev;
> +	struct drm_device		ddev;
>   	struct pci_dev			*pdev;
>   #ifdef __alpha__
>   	struct pci_controller		*hose;
> @@ -2478,7 +2478,7 @@ void cik_mm_wdoorbell(struct radeon_device *rdev, u32 index, u32 v);
>   
>   static inline struct drm_device *rdev_to_drm(struct radeon_device *rdev)
>   {
> -	return rdev->ddev;
> +	return &rdev->ddev;
>   }
>   
>   /*
> diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
> index 32851632643d..554b236c2328 100644
> --- a/drivers/gpu/drm/radeon/radeon_device.c
> +++ b/drivers/gpu/drm/radeon/radeon_device.c
> @@ -1285,9 +1285,6 @@ int radeon_device_init(struct radeon_device *rdev,
>   	bool runtime = false;
>   
>   	rdev->shutdown = false;
> -	rdev->dev = &pdev->dev;
> -	rdev->ddev = ddev;
> -	rdev->pdev = pdev;
>   	rdev->flags = flags;
>   	rdev->family = flags & RADEON_FAMILY_MASK;
>   	rdev->is_atom_bios = false;
> diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> index 7b8aa8406751..f36aa71c57c7 100644
> --- a/drivers/gpu/drm/radeon/radeon_drv.c
> +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> @@ -260,6 +260,7 @@ static int radeon_pci_probe(struct pci_dev *pdev,
>   {
>   	unsigned long flags = 0;
>   	struct drm_device *ddev;
> +	struct radeon_device *rdev;
>   	int ret;
>   
>   	if (!ent)
> @@ -300,9 +301,14 @@ static int radeon_pci_probe(struct pci_dev *pdev,
>   	if (ret)
>   		return ret;
>   
> -	ddev = drm_dev_alloc(&kms_driver, &pdev->dev);
> -	if (IS_ERR(ddev))
> -		return PTR_ERR(ddev);
> +	rdev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*rdev), ddev);
> +	if (IS_ERR(rdev))
> +		return PTR_ERR(rdev);
> +
> +	rdev->dev = &pdev->dev;
> +	rdev->pdev = pdev;
> +	ddev = rdev_to_drm(rdev);
> +	ddev->dev_private = rdev;
>   
>   	ret = pci_enable_device(pdev);
>   	if (ret)
> diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
> index a16590c6247f..645e33bf7947 100644
> --- a/drivers/gpu/drm/radeon/radeon_kms.c
> +++ b/drivers/gpu/drm/radeon/radeon_kms.c
> @@ -104,15 +104,9 @@ void radeon_driver_unload_kms(struct drm_device *dev)
>   int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags)
>   {
>   	struct pci_dev *pdev = to_pci_dev(dev->dev);
> -	struct radeon_device *rdev;
> +	struct radeon_device *rdev = dev->dev_private;
>   	int r, acpi_status;
>   
> -	rdev = kzalloc(sizeof(struct radeon_device), GFP_KERNEL);
> -	if (rdev == NULL) {
> -		return -ENOMEM;
> -	}
> -	dev->dev_private = (void *)rdev;
> -
>   #ifdef __alpha__
>   	rdev->hose = pdev->sysdata;
>   #endif

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc
  2024-06-30 16:59 [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc Wu Hoi Pok
                   ` (5 preceding siblings ...)
  2024-06-30 16:59 ` [PATCH v3 6/6] drm/radeon: change drm_dev_alloc to devm_drm_dev_alloc Wu Hoi Pok
@ 2024-07-03  8:52 ` Thomas Zimmermann
  2024-07-04  4:58   ` Hoi Pok Wu
  6 siblings, 1 reply; 29+ messages in thread
From: Thomas Zimmermann @ 2024-07-03  8:52 UTC (permalink / raw)
  To: Wu Hoi Pok
  Cc: Alex Deucher, Christian König, Pan, Xinhui, David Airlie,
	Daniel Vetter, amd-gfx, dri-devel, linux-kernel

Hi

Am 30.06.24 um 18:59 schrieb Wu Hoi Pok:
> .load and drm_dev_alloc are deprecated. These patch series aims to
> remove them.
>
> v3: Both v1 and v2 sucks. v3 improves greatly on readability.

Very nice, thank you. I tested the patches with Radeon hardware and did 
not find issues. AFAICT this can be merged as-is. I think it should go 
into the amd trees. Maybe Alex or Christian can pick it up.

Thanks for sticking with it.

Best regards
Thomas

>
> Wu Hoi Pok (6):
>    drm/radeon: change variable name "dev" to "ddev" for consistency
>    drm/radeon: remove load callback from kms_driver
>    drm/radeon: use variable flags as parameter
>    drm/radeon: add helper rdev_to_drm(rdev)
>    drm/radeon: change rdev->ddev to rdev_to_drm(rdev)
>    drm/radeon: change drm_dev_alloc to devm_drm_dev_alloc
>
>   drivers/gpu/drm/radeon/atombios_encoders.c |  2 +-
>   drivers/gpu/drm/radeon/cik.c               | 14 ++--
>   drivers/gpu/drm/radeon/dce6_afmt.c         |  2 +-
>   drivers/gpu/drm/radeon/evergreen.c         | 12 ++--
>   drivers/gpu/drm/radeon/ni.c                |  2 +-
>   drivers/gpu/drm/radeon/r100.c              | 24 +++----
>   drivers/gpu/drm/radeon/r300.c              |  6 +-
>   drivers/gpu/drm/radeon/r420.c              |  6 +-
>   drivers/gpu/drm/radeon/r520.c              |  2 +-
>   drivers/gpu/drm/radeon/r600.c              | 12 ++--
>   drivers/gpu/drm/radeon/r600_cs.c           |  2 +-
>   drivers/gpu/drm/radeon/r600_dpm.c          |  4 +-
>   drivers/gpu/drm/radeon/r600_hdmi.c         |  2 +-
>   drivers/gpu/drm/radeon/radeon.h            |  7 +-
>   drivers/gpu/drm/radeon/radeon_acpi.c       | 10 +--
>   drivers/gpu/drm/radeon/radeon_agp.c        |  2 +-
>   drivers/gpu/drm/radeon/radeon_atombios.c   |  2 +-
>   drivers/gpu/drm/radeon/radeon_audio.c      |  4 +-
>   drivers/gpu/drm/radeon/radeon_combios.c    | 12 ++--
>   drivers/gpu/drm/radeon/radeon_device.c     | 13 ++--
>   drivers/gpu/drm/radeon/radeon_display.c    | 74 +++++++++++-----------
>   drivers/gpu/drm/radeon/radeon_drv.c        | 27 +++++---
>   drivers/gpu/drm/radeon/radeon_fbdev.c      | 26 ++++----
>   drivers/gpu/drm/radeon/radeon_fence.c      |  8 +--
>   drivers/gpu/drm/radeon/radeon_gem.c        |  2 +-
>   drivers/gpu/drm/radeon/radeon_i2c.c        |  2 +-
>   drivers/gpu/drm/radeon/radeon_ib.c         |  2 +-
>   drivers/gpu/drm/radeon/radeon_irq_kms.c    | 12 ++--
>   drivers/gpu/drm/radeon/radeon_kms.c        |  8 +--
>   drivers/gpu/drm/radeon/radeon_object.c     |  2 +-
>   drivers/gpu/drm/radeon/radeon_pm.c         | 20 +++---
>   drivers/gpu/drm/radeon/radeon_ring.c       |  2 +-
>   drivers/gpu/drm/radeon/radeon_ttm.c        |  6 +-
>   drivers/gpu/drm/radeon/rs400.c             |  6 +-
>   drivers/gpu/drm/radeon/rs600.c             | 14 ++--
>   drivers/gpu/drm/radeon/rs690.c             |  2 +-
>   drivers/gpu/drm/radeon/rv515.c             |  4 +-
>   drivers/gpu/drm/radeon/rv770.c             |  2 +-
>   drivers/gpu/drm/radeon/si.c                |  4 +-
>   39 files changed, 184 insertions(+), 179 deletions(-)
>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc
  2024-07-03  8:52 ` [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc Thomas Zimmermann
@ 2024-07-04  4:58   ` Hoi Pok Wu
  2024-07-04 13:02     ` Christian König
  0 siblings, 1 reply; 29+ messages in thread
From: Hoi Pok Wu @ 2024-07-04  4:58 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: Alex Deucher, Christian König, Pan, Xinhui, David Airlie,
	Daniel Vetter, amd-gfx, dri-devel, linux-kernel

Thanks a lot for your help Thomas.

On Wed, Jul 3, 2024 at 4:52 AM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
> Hi
>
> Am 30.06.24 um 18:59 schrieb Wu Hoi Pok:
> > .load and drm_dev_alloc are deprecated. These patch series aims to
> > remove them.
> >
> > v3: Both v1 and v2 sucks. v3 improves greatly on readability.
>
> Very nice, thank you. I tested the patches with Radeon hardware and did
> not find issues. AFAICT this can be merged as-is. I think it should go
> into the amd trees. Maybe Alex or Christian can pick it up.
>
> Thanks for sticking with it.
>
> Best regards
> Thomas
>
> >
> > Wu Hoi Pok (6):
> >    drm/radeon: change variable name "dev" to "ddev" for consistency
> >    drm/radeon: remove load callback from kms_driver
> >    drm/radeon: use variable flags as parameter
> >    drm/radeon: add helper rdev_to_drm(rdev)
> >    drm/radeon: change rdev->ddev to rdev_to_drm(rdev)
> >    drm/radeon: change drm_dev_alloc to devm_drm_dev_alloc
> >
> >   drivers/gpu/drm/radeon/atombios_encoders.c |  2 +-
> >   drivers/gpu/drm/radeon/cik.c               | 14 ++--
> >   drivers/gpu/drm/radeon/dce6_afmt.c         |  2 +-
> >   drivers/gpu/drm/radeon/evergreen.c         | 12 ++--
> >   drivers/gpu/drm/radeon/ni.c                |  2 +-
> >   drivers/gpu/drm/radeon/r100.c              | 24 +++----
> >   drivers/gpu/drm/radeon/r300.c              |  6 +-
> >   drivers/gpu/drm/radeon/r420.c              |  6 +-
> >   drivers/gpu/drm/radeon/r520.c              |  2 +-
> >   drivers/gpu/drm/radeon/r600.c              | 12 ++--
> >   drivers/gpu/drm/radeon/r600_cs.c           |  2 +-
> >   drivers/gpu/drm/radeon/r600_dpm.c          |  4 +-
> >   drivers/gpu/drm/radeon/r600_hdmi.c         |  2 +-
> >   drivers/gpu/drm/radeon/radeon.h            |  7 +-
> >   drivers/gpu/drm/radeon/radeon_acpi.c       | 10 +--
> >   drivers/gpu/drm/radeon/radeon_agp.c        |  2 +-
> >   drivers/gpu/drm/radeon/radeon_atombios.c   |  2 +-
> >   drivers/gpu/drm/radeon/radeon_audio.c      |  4 +-
> >   drivers/gpu/drm/radeon/radeon_combios.c    | 12 ++--
> >   drivers/gpu/drm/radeon/radeon_device.c     | 13 ++--
> >   drivers/gpu/drm/radeon/radeon_display.c    | 74 +++++++++++-----------
> >   drivers/gpu/drm/radeon/radeon_drv.c        | 27 +++++---
> >   drivers/gpu/drm/radeon/radeon_fbdev.c      | 26 ++++----
> >   drivers/gpu/drm/radeon/radeon_fence.c      |  8 +--
> >   drivers/gpu/drm/radeon/radeon_gem.c        |  2 +-
> >   drivers/gpu/drm/radeon/radeon_i2c.c        |  2 +-
> >   drivers/gpu/drm/radeon/radeon_ib.c         |  2 +-
> >   drivers/gpu/drm/radeon/radeon_irq_kms.c    | 12 ++--
> >   drivers/gpu/drm/radeon/radeon_kms.c        |  8 +--
> >   drivers/gpu/drm/radeon/radeon_object.c     |  2 +-
> >   drivers/gpu/drm/radeon/radeon_pm.c         | 20 +++---
> >   drivers/gpu/drm/radeon/radeon_ring.c       |  2 +-
> >   drivers/gpu/drm/radeon/radeon_ttm.c        |  6 +-
> >   drivers/gpu/drm/radeon/rs400.c             |  6 +-
> >   drivers/gpu/drm/radeon/rs600.c             | 14 ++--
> >   drivers/gpu/drm/radeon/rs690.c             |  2 +-
> >   drivers/gpu/drm/radeon/rv515.c             |  4 +-
> >   drivers/gpu/drm/radeon/rv770.c             |  2 +-
> >   drivers/gpu/drm/radeon/si.c                |  4 +-
> >   39 files changed, 184 insertions(+), 179 deletions(-)
> >
>
> --
> --
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Software Solutions Germany GmbH
> Frankenstrasse 146, 90461 Nuernberg, Germany
> GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
> HRB 36809 (AG Nuernberg)
>

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc
  2024-07-04  4:58   ` Hoi Pok Wu
@ 2024-07-04 13:02     ` Christian König
  0 siblings, 0 replies; 29+ messages in thread
From: Christian König @ 2024-07-04 13:02 UTC (permalink / raw)
  To: Hoi Pok Wu, Thomas Zimmermann
  Cc: Alex Deucher, Christian König, Pan, Xinhui, David Airlie,
	Daniel Vetter, amd-gfx, dri-devel, linux-kernel

Am 04.07.24 um 06:58 schrieb Hoi Pok Wu:
> Thanks a lot for your help Thomas.
>
> On Wed, Jul 3, 2024 at 4:52 AM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>> Hi
>>
>> Am 30.06.24 um 18:59 schrieb Wu Hoi Pok:
>>> .load and drm_dev_alloc are deprecated. These patch series aims to
>>> remove them.
>>>
>>> v3: Both v1 and v2 sucks. v3 improves greatly on readability.
>> Very nice, thank you. I tested the patches with Radeon hardware and did
>> not find issues. AFAICT this can be merged as-is. I think it should go
>> into the amd trees. Maybe Alex or Christian can pick it up.
>>
>> Thanks for sticking with it.

Nice work guys. Skimming over it it looks ok to me, but maybe Alex has 
some more notes.

Regards,
Christian.

>>
>> Best regards
>> Thomas
>>
>>> Wu Hoi Pok (6):
>>>     drm/radeon: change variable name "dev" to "ddev" for consistency
>>>     drm/radeon: remove load callback from kms_driver
>>>     drm/radeon: use variable flags as parameter
>>>     drm/radeon: add helper rdev_to_drm(rdev)
>>>     drm/radeon: change rdev->ddev to rdev_to_drm(rdev)
>>>     drm/radeon: change drm_dev_alloc to devm_drm_dev_alloc
>>>
>>>    drivers/gpu/drm/radeon/atombios_encoders.c |  2 +-
>>>    drivers/gpu/drm/radeon/cik.c               | 14 ++--
>>>    drivers/gpu/drm/radeon/dce6_afmt.c         |  2 +-
>>>    drivers/gpu/drm/radeon/evergreen.c         | 12 ++--
>>>    drivers/gpu/drm/radeon/ni.c                |  2 +-
>>>    drivers/gpu/drm/radeon/r100.c              | 24 +++----
>>>    drivers/gpu/drm/radeon/r300.c              |  6 +-
>>>    drivers/gpu/drm/radeon/r420.c              |  6 +-
>>>    drivers/gpu/drm/radeon/r520.c              |  2 +-
>>>    drivers/gpu/drm/radeon/r600.c              | 12 ++--
>>>    drivers/gpu/drm/radeon/r600_cs.c           |  2 +-
>>>    drivers/gpu/drm/radeon/r600_dpm.c          |  4 +-
>>>    drivers/gpu/drm/radeon/r600_hdmi.c         |  2 +-
>>>    drivers/gpu/drm/radeon/radeon.h            |  7 +-
>>>    drivers/gpu/drm/radeon/radeon_acpi.c       | 10 +--
>>>    drivers/gpu/drm/radeon/radeon_agp.c        |  2 +-
>>>    drivers/gpu/drm/radeon/radeon_atombios.c   |  2 +-
>>>    drivers/gpu/drm/radeon/radeon_audio.c      |  4 +-
>>>    drivers/gpu/drm/radeon/radeon_combios.c    | 12 ++--
>>>    drivers/gpu/drm/radeon/radeon_device.c     | 13 ++--
>>>    drivers/gpu/drm/radeon/radeon_display.c    | 74 +++++++++++-----------
>>>    drivers/gpu/drm/radeon/radeon_drv.c        | 27 +++++---
>>>    drivers/gpu/drm/radeon/radeon_fbdev.c      | 26 ++++----
>>>    drivers/gpu/drm/radeon/radeon_fence.c      |  8 +--
>>>    drivers/gpu/drm/radeon/radeon_gem.c        |  2 +-
>>>    drivers/gpu/drm/radeon/radeon_i2c.c        |  2 +-
>>>    drivers/gpu/drm/radeon/radeon_ib.c         |  2 +-
>>>    drivers/gpu/drm/radeon/radeon_irq_kms.c    | 12 ++--
>>>    drivers/gpu/drm/radeon/radeon_kms.c        |  8 +--
>>>    drivers/gpu/drm/radeon/radeon_object.c     |  2 +-
>>>    drivers/gpu/drm/radeon/radeon_pm.c         | 20 +++---
>>>    drivers/gpu/drm/radeon/radeon_ring.c       |  2 +-
>>>    drivers/gpu/drm/radeon/radeon_ttm.c        |  6 +-
>>>    drivers/gpu/drm/radeon/rs400.c             |  6 +-
>>>    drivers/gpu/drm/radeon/rs600.c             | 14 ++--
>>>    drivers/gpu/drm/radeon/rs690.c             |  2 +-
>>>    drivers/gpu/drm/radeon/rv515.c             |  4 +-
>>>    drivers/gpu/drm/radeon/rv770.c             |  2 +-
>>>    drivers/gpu/drm/radeon/si.c                |  4 +-
>>>    39 files changed, 184 insertions(+), 179 deletions(-)
>>>
>> --
>> --
>> Thomas Zimmermann
>> Graphics Driver Developer
>> SUSE Software Solutions Germany GmbH
>> Frankenstrasse 146, 90461 Nuernberg, Germany
>> GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
>> HRB 36809 (AG Nuernberg)
>>


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH v3 6/6] drm/radeon: change drm_dev_alloc to devm_drm_dev_alloc
  2024-07-03  8:47   ` Thomas Zimmermann
@ 2024-07-08 20:04     ` Alex Deucher
  0 siblings, 0 replies; 29+ messages in thread
From: Alex Deucher @ 2024-07-08 20:04 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: Wu Hoi Pok, Alex Deucher, Christian König, Pan, Xinhui,
	David Airlie, Daniel Vetter, amd-gfx, dri-devel, linux-kernel

Applied the series.  Thanks!

Alex

On Wed, Jul 3, 2024 at 4:55 AM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
>
>
> Am 30.06.24 um 18:59 schrieb Wu Hoi Pok:
> > "drm_dev_alloc" is deprecated, in order to use the newer "devm_drm_dev_alloc",
> > the "drm_device" is stored inside "radeon_device", by changing "rdev_to_drm(rdev)"
> > other functions still gain access to the member "drm_device". Also, "devm_drm_dev_alloc"
> > is now allocating "radeon_device", allocation inside "radeon_driver_load_kms" has to be
> > removed.
> >
> > In "radeon_device_init", it originally assigned "rdev->dev" etc. However it is already
> > done right after "devm_drm_dev_alloc" as you can see down below. It is better remove them.
> >
> > Signed-off-by: Wu Hoi Pok <wuhoipok@gmail.com>
>
> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
> Tested-by: Thomas Zimmermann <tzimmermann@suse.de>
>
>
> > ---
> >   drivers/gpu/drm/radeon/radeon.h        |  4 ++--
> >   drivers/gpu/drm/radeon/radeon_device.c |  3 ---
> >   drivers/gpu/drm/radeon/radeon_drv.c    | 12 +++++++++---
> >   drivers/gpu/drm/radeon/radeon_kms.c    |  8 +-------
> >   4 files changed, 12 insertions(+), 15 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
> > index ae35c102a487..fd8a4513025f 100644
> > --- a/drivers/gpu/drm/radeon/radeon.h
> > +++ b/drivers/gpu/drm/radeon/radeon.h
> > @@ -2297,7 +2297,7 @@ typedef void (*radeon_wreg_t)(struct radeon_device*, uint32_t, uint32_t);
> >
> >   struct radeon_device {
> >       struct device                   *dev;
> > -     struct drm_device               *ddev;
> > +     struct drm_device               ddev;
> >       struct pci_dev                  *pdev;
> >   #ifdef __alpha__
> >       struct pci_controller           *hose;
> > @@ -2478,7 +2478,7 @@ void cik_mm_wdoorbell(struct radeon_device *rdev, u32 index, u32 v);
> >
> >   static inline struct drm_device *rdev_to_drm(struct radeon_device *rdev)
> >   {
> > -     return rdev->ddev;
> > +     return &rdev->ddev;
> >   }
> >
> >   /*
> > diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
> > index 32851632643d..554b236c2328 100644
> > --- a/drivers/gpu/drm/radeon/radeon_device.c
> > +++ b/drivers/gpu/drm/radeon/radeon_device.c
> > @@ -1285,9 +1285,6 @@ int radeon_device_init(struct radeon_device *rdev,
> >       bool runtime = false;
> >
> >       rdev->shutdown = false;
> > -     rdev->dev = &pdev->dev;
> > -     rdev->ddev = ddev;
> > -     rdev->pdev = pdev;
> >       rdev->flags = flags;
> >       rdev->family = flags & RADEON_FAMILY_MASK;
> >       rdev->is_atom_bios = false;
> > diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
> > index 7b8aa8406751..f36aa71c57c7 100644
> > --- a/drivers/gpu/drm/radeon/radeon_drv.c
> > +++ b/drivers/gpu/drm/radeon/radeon_drv.c
> > @@ -260,6 +260,7 @@ static int radeon_pci_probe(struct pci_dev *pdev,
> >   {
> >       unsigned long flags = 0;
> >       struct drm_device *ddev;
> > +     struct radeon_device *rdev;
> >       int ret;
> >
> >       if (!ent)
> > @@ -300,9 +301,14 @@ static int radeon_pci_probe(struct pci_dev *pdev,
> >       if (ret)
> >               return ret;
> >
> > -     ddev = drm_dev_alloc(&kms_driver, &pdev->dev);
> > -     if (IS_ERR(ddev))
> > -             return PTR_ERR(ddev);
> > +     rdev = devm_drm_dev_alloc(&pdev->dev, &kms_driver, typeof(*rdev), ddev);
> > +     if (IS_ERR(rdev))
> > +             return PTR_ERR(rdev);
> > +
> > +     rdev->dev = &pdev->dev;
> > +     rdev->pdev = pdev;
> > +     ddev = rdev_to_drm(rdev);
> > +     ddev->dev_private = rdev;
> >
> >       ret = pci_enable_device(pdev);
> >       if (ret)
> > diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
> > index a16590c6247f..645e33bf7947 100644
> > --- a/drivers/gpu/drm/radeon/radeon_kms.c
> > +++ b/drivers/gpu/drm/radeon/radeon_kms.c
> > @@ -104,15 +104,9 @@ void radeon_driver_unload_kms(struct drm_device *dev)
> >   int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags)
> >   {
> >       struct pci_dev *pdev = to_pci_dev(dev->dev);
> > -     struct radeon_device *rdev;
> > +     struct radeon_device *rdev = dev->dev_private;
> >       int r, acpi_status;
> >
> > -     rdev = kzalloc(sizeof(struct radeon_device), GFP_KERNEL);
> > -     if (rdev == NULL) {
> > -             return -ENOMEM;
> > -     }
> > -     dev->dev_private = (void *)rdev;
> > -
> >   #ifdef __alpha__
> >       rdev->hose = pdev->sysdata;
> >   #endif
>
> --
> --
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Software Solutions Germany GmbH
> Frankenstrasse 146, 90461 Nuernberg, Germany
> GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
> HRB 36809 (AG Nuernberg)
>

^ permalink raw reply	[flat|nested] 29+ messages in thread

* drm/radeon: remove load callback from kms_driver
  2024-06-30 16:59 ` [PATCH v3 2/6] drm/radeon: remove load callback from kms_driver Wu Hoi Pok
  2024-07-03  8:43   ` Thomas Zimmermann
@ 2024-09-19 16:56   ` Arthur Marsh
  2024-09-24  2:08     ` radeon ARUBA NULL pointer dereference Arthur Marsh
  1 sibling, 1 reply; 29+ messages in thread
From: Arthur Marsh @ 2024-09-19 16:56 UTC (permalink / raw)
  To: wuhoipok
  Cc: Xinhui.Pan, airlied, alexander.deucher, amd-gfx, christian.koenig,
	daniel, dri-devel, linux-kernel, tzimmermann, arthur.marsh

Recent kernels resulted in a blank screen, with Xorg.0.log reporting:

(II) [KMS] drm report modesetting isn't supported.

Sometimes while bisecting the pc came to a complete lockup (magic Sysreq 
unresponsive).

At the end of bisecting I had:

90985660ba488cd3428706e7d53d6c9cdbbf3101 is the first bad commit
commit 90985660ba488cd3428706e7d53d6c9cdbbf3101
Author: Wu Hoi Pok <wuhoipok@gmail.com>
Date:   Sun Jun 30 12:59:18 2024 -0400

    drm/radeon: remove load callback from kms_driver
    
    The ".load" callback in "struct drm_driver" is deprecated. In order to remove
    the callback, we have to manually call "radeon_driver_load_kms" instead.

This machine reports having:

AMD A10-6800K APU with Radeon HD Graphics

with the gpu appearing as 

Advanced Micro Devices [AMD/ATI] Richland [Radeon HD 8670D] 1002:990c

Regards,

Arthur Marsh.

^ permalink raw reply	[flat|nested] 29+ messages in thread

* radeon ARUBA NULL pointer dereference
  2024-09-19 16:56   ` Arthur Marsh
@ 2024-09-24  2:08     ` Arthur Marsh
  2024-09-24 12:20       ` Thomas Zimmermann
  0 siblings, 1 reply; 29+ messages in thread
From: Arthur Marsh @ 2024-09-24  2:08 UTC (permalink / raw)
  To: arthur.marsh
  Cc: Xinhui.Pan, airlied, alexander.deucher, amd-gfx, christian.koenig,
	daniel, dri-devel, linux-kernel, tzimmermann, wuhoipok

Using current Linus git head kernel, I was able to save the dmesg output:

[   17.218724] [drm] radeon kernel modesetting enabled.
[   17.218778] radeon 0000:00:01.0: vgaarb: deactivate vga console
[   17.219509] Console: switching to colour dummy device 80x25
[   17.219700] [drm] initializing kernel modesetting (ARUBA 0x1002:0x990C 0x1002:0x0123 0x00).
[   17.219773] ATOM BIOS: 113
[   17.219838] radeon 0000:00:01.0: VRAM: 768M 0x0000000000000000 - 0x000000002FFFFFFF (768M used)
[   17.219841] radeon 0000:00:01.0: GTT: 1024M 0x0000000030000000 - 0x000000006FFFFFFF
[   17.219844] [drm] Detected VRAM RAM=768M, BAR=256M
[   17.219845] [drm] RAM width 64bits DDR
[   17.219851] BUG: kernel NULL pointer dereference, address: 00000000000000a0
[   17.219852] #PF: supervisor read access in kernel mode
[   17.219853] #PF: error_code(0x0000) - not-present page
[   17.219854] PGD 0 P4D 0 
[   17.219856] Oops: Oops: 0000 [#1] PREEMPT_RT SMP NOPTI
[   17.219858] CPU: 0 UID: 0 PID: 451 Comm: udevd Not tainted 6.11.0+ #6121
[   17.219860] Hardware name: Gigabyte Technology Co., Ltd. To be filled by O.E.M./F2A78M-HD2, BIOS F2 05/28/2014
[   17.219862] RIP: 0010:dma_get_required_mask+0x11/0x50
[   17.219868] Code: 0f 1f 84 00 00 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 0f 1f 44 00 00 48 8b 87 68 02 00 00 48 85 c0 74 11 <48> 8b 80 a0 00 00 00 48 85 c0 74 1f e9 ee ed 94 00 f6 87 2c 03 00
[   17.219870] RSP: 0018:ffffa54bc13a7b00 EFLAGS: 00010202
[   17.219871] RAX: 0000000000000000 RBX: 000000ffffffffff RCX: 0000000000000000
[   17.219872] RDX: 0000000000000000 RSI: 0000000000000027 RDI: ffff976f44e720c8
[   17.219873] RBP: ffff976f44e720c8 R08: 00000000ffffefff R09: ffffffffab2aab08
[   17.219874] R10: 00000000fffff000 R11: 0000000000000002 R12: 0000000000000000
[   17.219875] R13: ffff976f48a4aa30 R14: 0000000000000000 R15: 0000000000000028
[   17.219876] FS:  00007f59a070d840(0000) GS:ffff97726f800000(0000) knlGS:0000000000000000
[   17.219878] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   17.219879] CR2: 00000000000000a0 CR3: 00000001053b4000 CR4: 00000000000406f0
[   17.219880] Call Trace:
[   17.219881]  <TASK>
[   17.219882]  ? __die_body.cold+0x19/0x1e
[   17.219885]  ? page_fault_oops+0xa8/0x230
[   17.219889]  ? search_module_extables+0x4f/0x90
[   17.219891]  ? fixup_exception+0x36/0x2f0
[   17.219894]  ? exc_page_fault+0x88/0x1b0
[   17.219897]  ? asm_exc_page_fault+0x22/0x30
[   17.219900]  ? dma_get_required_mask+0x11/0x50
[   17.219902]  dma_addressing_limited+0x6c/0xb0
[   17.219905]  radeon_ttm_init+0x3f/0x210 [radeon]
[   17.219977]  cayman_init+0x97/0x290 [radeon]
[   17.220057]  radeon_device_init+0x5e9/0xb40 [radeon]
[   17.220115]  radeon_driver_load_kms+0xb0/0x260 [radeon]
[   17.220174]  radeon_pci_probe+0xff/0x170 [radeon]
[   17.220231]  pci_device_probe+0xbe/0x1a0
[   17.220234]  really_probe+0xde/0x350
[   17.220237]  ? pm_runtime_barrier+0x61/0xb0
[   17.220240]  ? __pfx___driver_attach+0x10/0x10
[   17.220242]  __driver_probe_device+0x78/0x110
[   17.220245]  driver_probe_device+0x2d/0xc0
[   17.220247]  __driver_attach+0xc9/0x1c0
[   17.220249]  bus_for_each_dev+0x6a/0xb0
[   17.220251]  ? migrate_enable+0xbf/0xf0
[   17.220254]  bus_add_driver+0x139/0x220
[   17.220256]  driver_register+0x6e/0xc0
[   17.220258]  ? __pfx_radeon_module_init+0x10/0x10 [radeon]
[   17.220315]  do_one_initcall+0x42/0x210
[   17.220318]  ? __kmalloc_cache_noprof+0x89/0x230
[   17.220321]  do_init_module+0x60/0x210
[   17.220324]  init_module_from_file+0x89/0xc0
[   17.220326]  __x64_sys_finit_module+0x142/0x390
[   17.220329]  do_syscall_64+0x47/0x110
[   17.220331]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[   17.220334] RIP: 0033:0x7f59a0625279
[   17.220336] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 77 6b 0d 00 f7 d8 64 89 01 48
[   17.220337] RSP: 002b:00007ffd15ee7df8 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
[   17.220339] RAX: ffffffffffffffda RBX: 00005578ae660840 RCX: 00007f59a0625279
[   17.220340] RDX: 0000000000000000 RSI: 00005578ae677fc0 RDI: 0000000000000011
[   17.220341] RBP: 0000000000000000 R08: 00007f59a06fcb20 R09: 00005578ae640550
[   17.220342] R10: 0000000000000040 R11: 0000000000000246 R12: 00005578ae677fc0
[   17.220342] R13: 0000000000020000 R14: 00005578ae651750 R15: 0000000000000000
[   17.220344]  </TASK>
[   17.220345] Modules linked in: radeon(+) snd_hda_codec_hdmi snd_seq_midi snd_seq_midi_event snd_seq snd_hda_intel snd_intel_dspcfg snd_emu10k1 snd_hda_codec drm_ttm_helper ttm snd_util_mem drm_suballoc_helper snd_ac97_codec snd_hda_core drm_display_helper ac97_bus snd_rawmidi snd_hwdep snd_seq_device snd_pcm drm_kms_helper edac_mce_amd sha512_ssse3 sha512_generic k10temp sha256_ssse3 sha1_ssse3 drm aesni_intel snd_timer gf128mul crypto_simd cryptd acpi_cpufreq evdev pcspkr serio_raw emu10k1_gp gameport at24 regmap_i2c i2c_algo_bit snd video soundcore wmi button sp5100_tco ext4 crc32c_generic crc16 mbcache jbd2 uas usb_storage hid_generic usbhid hid sg sr_mod sd_mod cdrom ata_generic firewire_ohci crc32_pclmul crc32c_intel firewire_core crc_itu_t pata_atiixp i2c_piix4 i2c_smbus ahci r8169 libahci xhci_pci ohci_pci realtek libata mdio_devres ehci_pci ohci_hcd xhci_hcd scsi_mod ehci_hcd scsi_common usbcore libphy usb_common
[   17.220388] CR2: 00000000000000a0
[   17.220390] ---[ end trace 0000000000000000 ]---

Happy to provide additional information and run tests.

Regards,

Arthur Marsh.

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: radeon ARUBA NULL pointer dereference
  2024-09-24  2:08     ` radeon ARUBA NULL pointer dereference Arthur Marsh
@ 2024-09-24 12:20       ` Thomas Zimmermann
  2024-09-24 12:42         ` Thomas Zimmermann
  0 siblings, 1 reply; 29+ messages in thread
From: Thomas Zimmermann @ 2024-09-24 12:20 UTC (permalink / raw)
  To: Arthur Marsh
  Cc: Xinhui.Pan, airlied, alexander.deucher, amd-gfx, christian.koenig,
	daniel, dri-devel, linux-kernel, wuhoipok, iommu,
	the arch/x86 maintainers

(cc: DMA and x86 folks)

Hi

Am 24.09.24 um 04:08 schrieb Arthur Marsh:
> Using current Linus git head kernel, I was able to save the dmesg output:
>
> [   17.218724] [drm] radeon kernel modesetting enabled.
> [   17.218778] radeon 0000:00:01.0: vgaarb: deactivate vga console
> [   17.219509] Console: switching to colour dummy device 80x25
> [   17.219700] [drm] initializing kernel modesetting (ARUBA 0x1002:0x990C 0x1002:0x0123 0x00).
> [   17.219773] ATOM BIOS: 113
> [   17.219838] radeon 0000:00:01.0: VRAM: 768M 0x0000000000000000 - 0x000000002FFFFFFF (768M used)
> [   17.219841] radeon 0000:00:01.0: GTT: 1024M 0x0000000030000000 - 0x000000006FFFFFFF
> [   17.219844] [drm] Detected VRAM RAM=768M, BAR=256M
> [   17.219845] [drm] RAM width 64bits DDR
> [   17.219851] BUG: kernel NULL pointer dereference, address: 00000000000000a0

This is 160 bytes behind NULL, which indicates a field within a struct.

> [   17.219852] #PF: supervisor read access in kernel mode
> [   17.219853] #PF: error_code(0x0000) - not-present page
> [   17.219854] PGD 0 P4D 0
> [   17.219856] Oops: Oops: 0000 [#1] PREEMPT_RT SMP NOPTI
> [   17.219858] CPU: 0 UID: 0 PID: 451 Comm: udevd Not tainted 6.11.0+ #6121
> [   17.219860] Hardware name: Gigabyte Technology Co., Ltd. To be filled by O.E.M./F2A78M-HD2, BIOS F2 05/28/2014
> [   17.219862] RIP: 0010:dma_get_required_mask+0x11/0x50
> [   17.219868] Code: 0f 1f 84 00 00 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 0f 1f 44 00 00 48 8b 87 68 02 00 00 48 85 c0 74 11 <48> 8b 80 a0 00 00 00 48 85 c0 74 1f e9 ee ed 94 00 f6 87 2c 03 00
> [   17.219870] RSP: 0018:ffffa54bc13a7b00 EFLAGS: 00010202
> [   17.219871] RAX: 0000000000000000 RBX: 000000ffffffffff RCX: 0000000000000000
> [   17.219872] RDX: 0000000000000000 RSI: 0000000000000027 RDI: ffff976f44e720c8
> [   17.219873] RBP: ffff976f44e720c8 R08: 00000000ffffefff R09: ffffffffab2aab08
> [   17.219874] R10: 00000000fffff000 R11: 0000000000000002 R12: 0000000000000000
> [   17.219875] R13: ffff976f48a4aa30 R14: 0000000000000000 R15: 0000000000000028
> [   17.219876] FS:  00007f59a070d840(0000) GS:ffff97726f800000(0000) knlGS:0000000000000000
> [   17.219878] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [   17.219879] CR2: 00000000000000a0 CR3: 00000001053b4000 CR4: 00000000000406f0
> [   17.219880] Call Trace:
> [   17.219881]  <TASK>
> [   17.219882]  ? __die_body.cold+0x19/0x1e
> [   17.219885]  ? page_fault_oops+0xa8/0x230
> [   17.219889]  ? search_module_extables+0x4f/0x90
> [   17.219891]  ? fixup_exception+0x36/0x2f0
> [   17.219894]  ? exc_page_fault+0x88/0x1b0
> [   17.219897]  ? asm_exc_page_fault+0x22/0x30
> [   17.219900]  ? dma_get_required_mask+0x11/0x50

This is not in the radeon driver but the DMA code. I'd say it's at [1], 
as get_required_mask is 160 bytes within struct drm_map_ops. The call to 
get_arch_dma_ops() probably returns NULL.

Best regards
Thomas

[1] https://elixir.bootlin.com/linux/v6.11/source/kernel/dma/mapping.c#L523
[2] 
https://elixir.bootlin.com/linux/v6.11/source/include/linux/dma-map-ops.h#L98

> [   17.219902]  dma_addressing_limited+0x6c/0xb0
> [   17.219905]  radeon_ttm_init+0x3f/0x210 [radeon]
> [   17.219977]  cayman_init+0x97/0x290 [radeon]
> [   17.220057]  radeon_device_init+0x5e9/0xb40 [radeon]
> [   17.220115]  radeon_driver_load_kms+0xb0/0x260 [radeon]
> [   17.220174]  radeon_pci_probe+0xff/0x170 [radeon]
> [   17.220231]  pci_device_probe+0xbe/0x1a0
> [   17.220234]  really_probe+0xde/0x350
> [   17.220237]  ? pm_runtime_barrier+0x61/0xb0
> [   17.220240]  ? __pfx___driver_attach+0x10/0x10
> [   17.220242]  __driver_probe_device+0x78/0x110
> [   17.220245]  driver_probe_device+0x2d/0xc0
> [   17.220247]  __driver_attach+0xc9/0x1c0
> [   17.220249]  bus_for_each_dev+0x6a/0xb0
> [   17.220251]  ? migrate_enable+0xbf/0xf0
> [   17.220254]  bus_add_driver+0x139/0x220
> [   17.220256]  driver_register+0x6e/0xc0
> [   17.220258]  ? __pfx_radeon_module_init+0x10/0x10 [radeon]
> [   17.220315]  do_one_initcall+0x42/0x210
> [   17.220318]  ? __kmalloc_cache_noprof+0x89/0x230
> [   17.220321]  do_init_module+0x60/0x210
> [   17.220324]  init_module_from_file+0x89/0xc0
> [   17.220326]  __x64_sys_finit_module+0x142/0x390
> [   17.220329]  do_syscall_64+0x47/0x110
> [   17.220331]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> [   17.220334] RIP: 0033:0x7f59a0625279
> [   17.220336] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 77 6b 0d 00 f7 d8 64 89 01 48
> [   17.220337] RSP: 002b:00007ffd15ee7df8 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
> [   17.220339] RAX: ffffffffffffffda RBX: 00005578ae660840 RCX: 00007f59a0625279
> [   17.220340] RDX: 0000000000000000 RSI: 00005578ae677fc0 RDI: 0000000000000011
> [   17.220341] RBP: 0000000000000000 R08: 00007f59a06fcb20 R09: 00005578ae640550
> [   17.220342] R10: 0000000000000040 R11: 0000000000000246 R12: 00005578ae677fc0
> [   17.220342] R13: 0000000000020000 R14: 00005578ae651750 R15: 0000000000000000
> [   17.220344]  </TASK>
> [   17.220345] Modules linked in: radeon(+) snd_hda_codec_hdmi snd_seq_midi snd_seq_midi_event snd_seq snd_hda_intel snd_intel_dspcfg snd_emu10k1 snd_hda_codec drm_ttm_helper ttm snd_util_mem drm_suballoc_helper snd_ac97_codec snd_hda_core drm_display_helper ac97_bus snd_rawmidi snd_hwdep snd_seq_device snd_pcm drm_kms_helper edac_mce_amd sha512_ssse3 sha512_generic k10temp sha256_ssse3 sha1_ssse3 drm aesni_intel snd_timer gf128mul crypto_simd cryptd acpi_cpufreq evdev pcspkr serio_raw emu10k1_gp gameport at24 regmap_i2c i2c_algo_bit snd video soundcore wmi button sp5100_tco ext4 crc32c_generic crc16 mbcache jbd2 uas usb_storage hid_generic usbhid hid sg sr_mod sd_mod cdrom ata_generic firewire_ohci crc32_pclmul crc32c_intel firewire_core crc_itu_t pata_atiixp i2c_piix4 i2c_smbus ahci r8169 libahci xhci_pci ohci_pci realtek libata mdio_devres ehci_pci ohci_hcd xhci_hcd scsi_mod ehci_hcd scsi_common usbcore libphy usb_common
> [   17.220388] CR2: 00000000000000a0
> [   17.220390] ---[ end trace 0000000000000000 ]---
>
> Happy to provide additional information and run tests.
>
> Regards,
>
> Arthur Marsh.

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: radeon ARUBA NULL pointer dereference
  2024-09-24 12:20       ` Thomas Zimmermann
@ 2024-09-24 12:42         ` Thomas Zimmermann
  2024-09-24 14:22           ` Alex Deucher
  0 siblings, 1 reply; 29+ messages in thread
From: Thomas Zimmermann @ 2024-09-24 12:42 UTC (permalink / raw)
  To: Arthur Marsh
  Cc: Xinhui.Pan, airlied, alexander.deucher, amd-gfx, christian.koenig,
	daniel, dri-devel, linux-kernel, wuhoipok, iommu,
	the arch/x86 maintainers



Am 24.09.24 um 14:20 schrieb Thomas Zimmermann:
> (cc: DMA and x86 folks)
>
> Hi
>
> Am 24.09.24 um 04:08 schrieb Arthur Marsh:
>> Using current Linus git head kernel, I was able to save the dmesg 
>> output:
>>
>> [   17.218724] [drm] radeon kernel modesetting enabled.
>> [   17.218778] radeon 0000:00:01.0: vgaarb: deactivate vga console
>> [   17.219509] Console: switching to colour dummy device 80x25
>> [   17.219700] [drm] initializing kernel modesetting (ARUBA 
>> 0x1002:0x990C 0x1002:0x0123 0x00).
>> [   17.219773] ATOM BIOS: 113
>> [   17.219838] radeon 0000:00:01.0: VRAM: 768M 0x0000000000000000 - 
>> 0x000000002FFFFFFF (768M used)
>> [   17.219841] radeon 0000:00:01.0: GTT: 1024M 0x0000000030000000 - 
>> 0x000000006FFFFFFF
>> [   17.219844] [drm] Detected VRAM RAM=768M, BAR=256M
>> [   17.219845] [drm] RAM width 64bits DDR
>> [   17.219851] BUG: kernel NULL pointer dereference, address: 
>> 00000000000000a0
>
> This is 160 bytes behind NULL, which indicates a field within a struct.
>
>> [   17.219852] #PF: supervisor read access in kernel mode
>> [   17.219853] #PF: error_code(0x0000) - not-present page
>> [   17.219854] PGD 0 P4D 0
>> [   17.219856] Oops: Oops: 0000 [#1] PREEMPT_RT SMP NOPTI
>> [   17.219858] CPU: 0 UID: 0 PID: 451 Comm: udevd Not tainted 6.11.0+ 
>> #6121
>> [   17.219860] Hardware name: Gigabyte Technology Co., Ltd. To be 
>> filled by O.E.M./F2A78M-HD2, BIOS F2 05/28/2014
>> [   17.219862] RIP: 0010:dma_get_required_mask+0x11/0x50
>> [   17.219868] Code: 0f 1f 84 00 00 00 00 00 90 90 90 90 90 90 90 90 
>> 90 90 90 90 90 90 90 90 90 0f 1f 44 00 00 48 8b 87 68 02 00 00 48 85 
>> c0 74 11 <48> 8b 80 a0 00 00 00 48 85 c0 74 1f e9 ee ed 94 00 f6 87 
>> 2c 03 00
>> [   17.219870] RSP: 0018:ffffa54bc13a7b00 EFLAGS: 00010202
>> [   17.219871] RAX: 0000000000000000 RBX: 000000ffffffffff RCX: 
>> 0000000000000000
>> [   17.219872] RDX: 0000000000000000 RSI: 0000000000000027 RDI: 
>> ffff976f44e720c8
>> [   17.219873] RBP: ffff976f44e720c8 R08: 00000000ffffefff R09: 
>> ffffffffab2aab08
>> [   17.219874] R10: 00000000fffff000 R11: 0000000000000002 R12: 
>> 0000000000000000
>> [   17.219875] R13: ffff976f48a4aa30 R14: 0000000000000000 R15: 
>> 0000000000000028
>> [   17.219876] FS:  00007f59a070d840(0000) GS:ffff97726f800000(0000) 
>> knlGS:0000000000000000
>> [   17.219878] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>> [   17.219879] CR2: 00000000000000a0 CR3: 00000001053b4000 CR4: 
>> 00000000000406f0
>> [   17.219880] Call Trace:
>> [   17.219881]  <TASK>
>> [   17.219882]  ? __die_body.cold+0x19/0x1e
>> [   17.219885]  ? page_fault_oops+0xa8/0x230
>> [   17.219889]  ? search_module_extables+0x4f/0x90
>> [   17.219891]  ? fixup_exception+0x36/0x2f0
>> [   17.219894]  ? exc_page_fault+0x88/0x1b0
>> [   17.219897]  ? asm_exc_page_fault+0x22/0x30
>> [   17.219900]  ? dma_get_required_mask+0x11/0x50
>
> This is not in the radeon driver but the DMA code. I'd say it's at 
> [1], as get_required_mask is 160 bytes within struct drm_map_ops. The 
> call to get_arch_dma_ops() probably returns NULL.

And indeed, when I added

     pr_warn("dev dma ops: 0x%p\n", pdev->dev.dma_ops);
     pr_warn("arch dma ops: 0x%p\n", get_arch_dma_ops());

to radeon_pci_probe(), I got

[   22.325657] dev dma ops: 0x0000000000000000
[   22.342921] arch dma ops: 0x0000000000000000

as a result.

Best regards
Thomas

>
> Best regards
> Thomas
>
> [1] 
> https://elixir.bootlin.com/linux/v6.11/source/kernel/dma/mapping.c#L523
> [2] 
> https://elixir.bootlin.com/linux/v6.11/source/include/linux/dma-map-ops.h#L98
>
>> [   17.219902] dma_addressing_limited+0x6c/0xb0
>> [   17.219905]  radeon_ttm_init+0x3f/0x210 [radeon]
>> [   17.219977]  cayman_init+0x97/0x290 [radeon]
>> [   17.220057]  radeon_device_init+0x5e9/0xb40 [radeon]
>> [   17.220115]  radeon_driver_load_kms+0xb0/0x260 [radeon]
>> [   17.220174]  radeon_pci_probe+0xff/0x170 [radeon]
>> [   17.220231]  pci_device_probe+0xbe/0x1a0
>> [   17.220234]  really_probe+0xde/0x350
>> [   17.220237]  ? pm_runtime_barrier+0x61/0xb0
>> [   17.220240]  ? __pfx___driver_attach+0x10/0x10
>> [   17.220242]  __driver_probe_device+0x78/0x110
>> [   17.220245]  driver_probe_device+0x2d/0xc0
>> [   17.220247]  __driver_attach+0xc9/0x1c0
>> [   17.220249]  bus_for_each_dev+0x6a/0xb0
>> [   17.220251]  ? migrate_enable+0xbf/0xf0
>> [   17.220254]  bus_add_driver+0x139/0x220
>> [   17.220256]  driver_register+0x6e/0xc0
>> [   17.220258]  ? __pfx_radeon_module_init+0x10/0x10 [radeon]
>> [   17.220315]  do_one_initcall+0x42/0x210
>> [   17.220318]  ? __kmalloc_cache_noprof+0x89/0x230
>> [   17.220321]  do_init_module+0x60/0x210
>> [   17.220324]  init_module_from_file+0x89/0xc0
>> [   17.220326]  __x64_sys_finit_module+0x142/0x390
>> [   17.220329]  do_syscall_64+0x47/0x110
>> [   17.220331]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
>> [   17.220334] RIP: 0033:0x7f59a0625279
>> [   17.220336] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 
>> 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 
>> 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 77 6b 0d 00 f7 d8 64 
>> 89 01 48
>> [   17.220337] RSP: 002b:00007ffd15ee7df8 EFLAGS: 00000246 ORIG_RAX: 
>> 0000000000000139
>> [   17.220339] RAX: ffffffffffffffda RBX: 00005578ae660840 RCX: 
>> 00007f59a0625279
>> [   17.220340] RDX: 0000000000000000 RSI: 00005578ae677fc0 RDI: 
>> 0000000000000011
>> [   17.220341] RBP: 0000000000000000 R08: 00007f59a06fcb20 R09: 
>> 00005578ae640550
>> [   17.220342] R10: 0000000000000040 R11: 0000000000000246 R12: 
>> 00005578ae677fc0
>> [   17.220342] R13: 0000000000020000 R14: 00005578ae651750 R15: 
>> 0000000000000000
>> [   17.220344]  </TASK>
>> [   17.220345] Modules linked in: radeon(+) snd_hda_codec_hdmi 
>> snd_seq_midi snd_seq_midi_event snd_seq snd_hda_intel 
>> snd_intel_dspcfg snd_emu10k1 snd_hda_codec drm_ttm_helper ttm 
>> snd_util_mem drm_suballoc_helper snd_ac97_codec snd_hda_core 
>> drm_display_helper ac97_bus snd_rawmidi snd_hwdep snd_seq_device 
>> snd_pcm drm_kms_helper edac_mce_amd sha512_ssse3 sha512_generic 
>> k10temp sha256_ssse3 sha1_ssse3 drm aesni_intel snd_timer gf128mul 
>> crypto_simd cryptd acpi_cpufreq evdev pcspkr serio_raw emu10k1_gp 
>> gameport at24 regmap_i2c i2c_algo_bit snd video soundcore wmi button 
>> sp5100_tco ext4 crc32c_generic crc16 mbcache jbd2 uas usb_storage 
>> hid_generic usbhid hid sg sr_mod sd_mod cdrom ata_generic 
>> firewire_ohci crc32_pclmul crc32c_intel firewire_core crc_itu_t 
>> pata_atiixp i2c_piix4 i2c_smbus ahci r8169 libahci xhci_pci ohci_pci 
>> realtek libata mdio_devres ehci_pci ohci_hcd xhci_hcd scsi_mod 
>> ehci_hcd scsi_common usbcore libphy usb_common
>> [   17.220388] CR2: 00000000000000a0
>> [   17.220390] ---[ end trace 0000000000000000 ]---
>>
>> Happy to provide additional information and run tests.
>>
>> Regards,
>>
>> Arthur Marsh.
>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: radeon ARUBA NULL pointer dereference
  2024-09-24 12:42         ` Thomas Zimmermann
@ 2024-09-24 14:22           ` Alex Deucher
  2024-09-24 19:30             ` Ewan Milne
  2024-09-25  0:22             ` NULL pointer dereference after ib test on ring 7 succeeded Arthur Marsh
  0 siblings, 2 replies; 29+ messages in thread
From: Alex Deucher @ 2024-09-24 14:22 UTC (permalink / raw)
  To: Thomas Zimmermann
  Cc: Arthur Marsh, Xinhui.Pan, airlied, alexander.deucher, amd-gfx,
	christian.koenig, daniel, dri-devel, linux-kernel, wuhoipok,
	iommu, the arch/x86 maintainers

On Tue, Sep 24, 2024 at 8:43 AM Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
>
>
> Am 24.09.24 um 14:20 schrieb Thomas Zimmermann:
> > (cc: DMA and x86 folks)
> >
> > Hi
> >
> > Am 24.09.24 um 04:08 schrieb Arthur Marsh:
> >> Using current Linus git head kernel, I was able to save the dmesg
> >> output:
> >>
> >> [   17.218724] [drm] radeon kernel modesetting enabled.
> >> [   17.218778] radeon 0000:00:01.0: vgaarb: deactivate vga console
> >> [   17.219509] Console: switching to colour dummy device 80x25
> >> [   17.219700] [drm] initializing kernel modesetting (ARUBA
> >> 0x1002:0x990C 0x1002:0x0123 0x00).
> >> [   17.219773] ATOM BIOS: 113
> >> [   17.219838] radeon 0000:00:01.0: VRAM: 768M 0x0000000000000000 -
> >> 0x000000002FFFFFFF (768M used)
> >> [   17.219841] radeon 0000:00:01.0: GTT: 1024M 0x0000000030000000 -
> >> 0x000000006FFFFFFF
> >> [   17.219844] [drm] Detected VRAM RAM=768M, BAR=256M
> >> [   17.219845] [drm] RAM width 64bits DDR
> >> [   17.219851] BUG: kernel NULL pointer dereference, address:
> >> 00000000000000a0
> >
> > This is 160 bytes behind NULL, which indicates a field within a struct.
> >
> >> [   17.219852] #PF: supervisor read access in kernel mode
> >> [   17.219853] #PF: error_code(0x0000) - not-present page
> >> [   17.219854] PGD 0 P4D 0
> >> [   17.219856] Oops: Oops: 0000 [#1] PREEMPT_RT SMP NOPTI
> >> [   17.219858] CPU: 0 UID: 0 PID: 451 Comm: udevd Not tainted 6.11.0+
> >> #6121
> >> [   17.219860] Hardware name: Gigabyte Technology Co., Ltd. To be
> >> filled by O.E.M./F2A78M-HD2, BIOS F2 05/28/2014
> >> [   17.219862] RIP: 0010:dma_get_required_mask+0x11/0x50
> >> [   17.219868] Code: 0f 1f 84 00 00 00 00 00 90 90 90 90 90 90 90 90
> >> 90 90 90 90 90 90 90 90 90 0f 1f 44 00 00 48 8b 87 68 02 00 00 48 85
> >> c0 74 11 <48> 8b 80 a0 00 00 00 48 85 c0 74 1f e9 ee ed 94 00 f6 87
> >> 2c 03 00
> >> [   17.219870] RSP: 0018:ffffa54bc13a7b00 EFLAGS: 00010202
> >> [   17.219871] RAX: 0000000000000000 RBX: 000000ffffffffff RCX:
> >> 0000000000000000
> >> [   17.219872] RDX: 0000000000000000 RSI: 0000000000000027 RDI:
> >> ffff976f44e720c8
> >> [   17.219873] RBP: ffff976f44e720c8 R08: 00000000ffffefff R09:
> >> ffffffffab2aab08
> >> [   17.219874] R10: 00000000fffff000 R11: 0000000000000002 R12:
> >> 0000000000000000
> >> [   17.219875] R13: ffff976f48a4aa30 R14: 0000000000000000 R15:
> >> 0000000000000028
> >> [   17.219876] FS:  00007f59a070d840(0000) GS:ffff97726f800000(0000)
> >> knlGS:0000000000000000
> >> [   17.219878] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> >> [   17.219879] CR2: 00000000000000a0 CR3: 00000001053b4000 CR4:
> >> 00000000000406f0
> >> [   17.219880] Call Trace:
> >> [   17.219881]  <TASK>
> >> [   17.219882]  ? __die_body.cold+0x19/0x1e
> >> [   17.219885]  ? page_fault_oops+0xa8/0x230
> >> [   17.219889]  ? search_module_extables+0x4f/0x90
> >> [   17.219891]  ? fixup_exception+0x36/0x2f0
> >> [   17.219894]  ? exc_page_fault+0x88/0x1b0
> >> [   17.219897]  ? asm_exc_page_fault+0x22/0x30
> >> [   17.219900]  ? dma_get_required_mask+0x11/0x50

Also reported here:
https://gitlab.freedesktop.org/drm/amd/-/issues/3648

Alex

> >
> > This is not in the radeon driver but the DMA code. I'd say it's at
> > [1], as get_required_mask is 160 bytes within struct drm_map_ops. The
> > call to get_arch_dma_ops() probably returns NULL.
>
> And indeed, when I added
>
>      pr_warn("dev dma ops: 0x%p\n", pdev->dev.dma_ops);
>      pr_warn("arch dma ops: 0x%p\n", get_arch_dma_ops());
>
> to radeon_pci_probe(), I got
>
> [   22.325657] dev dma ops: 0x0000000000000000
> [   22.342921] arch dma ops: 0x0000000000000000
>
> as a result.
>
> Best regards
> Thomas
>
> >
> > Best regards
> > Thomas
> >
> > [1]
> > https://elixir.bootlin.com/linux/v6.11/source/kernel/dma/mapping.c#L523
> > [2]
> > https://elixir.bootlin.com/linux/v6.11/source/include/linux/dma-map-ops.h#L98
> >
> >> [   17.219902] dma_addressing_limited+0x6c/0xb0
> >> [   17.219905]  radeon_ttm_init+0x3f/0x210 [radeon]
> >> [   17.219977]  cayman_init+0x97/0x290 [radeon]
> >> [   17.220057]  radeon_device_init+0x5e9/0xb40 [radeon]
> >> [   17.220115]  radeon_driver_load_kms+0xb0/0x260 [radeon]
> >> [   17.220174]  radeon_pci_probe+0xff/0x170 [radeon]
> >> [   17.220231]  pci_device_probe+0xbe/0x1a0
> >> [   17.220234]  really_probe+0xde/0x350
> >> [   17.220237]  ? pm_runtime_barrier+0x61/0xb0
> >> [   17.220240]  ? __pfx___driver_attach+0x10/0x10
> >> [   17.220242]  __driver_probe_device+0x78/0x110
> >> [   17.220245]  driver_probe_device+0x2d/0xc0
> >> [   17.220247]  __driver_attach+0xc9/0x1c0
> >> [   17.220249]  bus_for_each_dev+0x6a/0xb0
> >> [   17.220251]  ? migrate_enable+0xbf/0xf0
> >> [   17.220254]  bus_add_driver+0x139/0x220
> >> [   17.220256]  driver_register+0x6e/0xc0
> >> [   17.220258]  ? __pfx_radeon_module_init+0x10/0x10 [radeon]
> >> [   17.220315]  do_one_initcall+0x42/0x210
> >> [   17.220318]  ? __kmalloc_cache_noprof+0x89/0x230
> >> [   17.220321]  do_init_module+0x60/0x210
> >> [   17.220324]  init_module_from_file+0x89/0xc0
> >> [   17.220326]  __x64_sys_finit_module+0x142/0x390
> >> [   17.220329]  do_syscall_64+0x47/0x110
> >> [   17.220331]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> >> [   17.220334] RIP: 0033:0x7f59a0625279
> >> [   17.220336] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00
> >> 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24
> >> 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 77 6b 0d 00 f7 d8 64
> >> 89 01 48
> >> [   17.220337] RSP: 002b:00007ffd15ee7df8 EFLAGS: 00000246 ORIG_RAX:
> >> 0000000000000139
> >> [   17.220339] RAX: ffffffffffffffda RBX: 00005578ae660840 RCX:
> >> 00007f59a0625279
> >> [   17.220340] RDX: 0000000000000000 RSI: 00005578ae677fc0 RDI:
> >> 0000000000000011
> >> [   17.220341] RBP: 0000000000000000 R08: 00007f59a06fcb20 R09:
> >> 00005578ae640550
> >> [   17.220342] R10: 0000000000000040 R11: 0000000000000246 R12:
> >> 00005578ae677fc0
> >> [   17.220342] R13: 0000000000020000 R14: 00005578ae651750 R15:
> >> 0000000000000000
> >> [   17.220344]  </TASK>
> >> [   17.220345] Modules linked in: radeon(+) snd_hda_codec_hdmi
> >> snd_seq_midi snd_seq_midi_event snd_seq snd_hda_intel
> >> snd_intel_dspcfg snd_emu10k1 snd_hda_codec drm_ttm_helper ttm
> >> snd_util_mem drm_suballoc_helper snd_ac97_codec snd_hda_core
> >> drm_display_helper ac97_bus snd_rawmidi snd_hwdep snd_seq_device
> >> snd_pcm drm_kms_helper edac_mce_amd sha512_ssse3 sha512_generic
> >> k10temp sha256_ssse3 sha1_ssse3 drm aesni_intel snd_timer gf128mul
> >> crypto_simd cryptd acpi_cpufreq evdev pcspkr serio_raw emu10k1_gp
> >> gameport at24 regmap_i2c i2c_algo_bit snd video soundcore wmi button
> >> sp5100_tco ext4 crc32c_generic crc16 mbcache jbd2 uas usb_storage
> >> hid_generic usbhid hid sg sr_mod sd_mod cdrom ata_generic
> >> firewire_ohci crc32_pclmul crc32c_intel firewire_core crc_itu_t
> >> pata_atiixp i2c_piix4 i2c_smbus ahci r8169 libahci xhci_pci ohci_pci
> >> realtek libata mdio_devres ehci_pci ohci_hcd xhci_hcd scsi_mod
> >> ehci_hcd scsi_common usbcore libphy usb_common
> >> [   17.220388] CR2: 00000000000000a0
> >> [   17.220390] ---[ end trace 0000000000000000 ]---
> >>
> >> Happy to provide additional information and run tests.
> >>
> >> Regards,
> >>
> >> Arthur Marsh.
> >
>
> --
> --
> Thomas Zimmermann
> Graphics Driver Developer
> SUSE Software Solutions Germany GmbH
> Frankenstrasse 146, 90461 Nuernberg, Germany
> GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
> HRB 36809 (AG Nuernberg)
>

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: radeon ARUBA NULL pointer dereference
  2024-09-24 14:22           ` Alex Deucher
@ 2024-09-24 19:30             ` Ewan Milne
  2024-09-25 18:13               ` Ewan Milne
  2024-09-25  0:22             ` NULL pointer dereference after ib test on ring 7 succeeded Arthur Marsh
  1 sibling, 1 reply; 29+ messages in thread
From: Ewan Milne @ 2024-09-24 19:30 UTC (permalink / raw)
  To: Alex Deucher
  Cc: Thomas Zimmermann, Arthur Marsh, Xinhui.Pan, airlied,
	alexander.deucher, amd-gfx, christian.koenig, daniel, dri-devel,
	linux-kernel, wuhoipok, iommu, the arch/x86 maintainers,
	Nilesh Javali, Martin K. Petersen

I think we are seeing a similar problem w/qla2xxx panicing at boot:

commit 1868f9d0260e9afaf7c6436d14923ae12eaea465 (HEAD -> master,
origin/master, origin/HEAD)
Merge: 056f8c437dc3 96319dacaf15
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Fri Sep 20 19:34:00 2024 -0700

    Merge tag 'for-linux-6.12-ofs1' of
git://git.kernel.org/pub/scm/linux/kernel/git/hubcap/linux

[    3.376687] qla2xxx [0000:00:00.0]-0005: : QLogic Fibre Channel HBA
Driver: 10.02.09.300-k.
[    3.385285] qla2xxx [0000:c4:00.0]-011c: : MSI-X vector count: 16.
[    3.391502] qla2xxx [0000:c4:00.0]-001d: : Found an ISP2261 irq 121
iobase 0x000000003b0c542c.
[    3.400118] BUG: kernel NULL pointer dereference, address: 00000000000000a0
[    3.407075] #PF: supervisor read access in kernel mode
[    3.412215] #PF: error_code(0x0000) - not-present page
[    3.417356] PGD 0 P4D 0
[    3.419896] Oops: Oops: 0000 [#1] PREEMPT SMP NOPTI
[    3.424776] CPU: 0 UID: 0 PID: 413 Comm: kworker/0:2 Not tainted 6.11.0+ #1
[    3.431731] Hardware name: Dell Inc. PowerEdge R6515/04F3CJ, BIOS
2.13.3 09/12/2023
[    3.439386] Workqueue: events work_for_cpu_fn
[    3.443744] RIP: 0010:dma_get_required_mask+0x11/0x50
[    3.448796] Code: 2e 0f 1f 84 00 00 00 00 00 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 0f 1f 44 00 00 48 8b 87 38 02 00 00 48 85
c0 74 12 <48> 8b 80 a0 00 00 00 48 85 c0 74 20 e9 fe f1 b7 00 cc 48 8b
05 9e
[    3.467542] RSP: 0018:ffffb05741007d80 EFLAGS: 00010202
[    3.472769] RAX: 0000000000000000 RBX: 0000000000000055 RCX: ffff9f8601f92088
[    3.479901] RDX: ffffb05740e07000 RSI: ffffffffffffffff RDI: ffff9f8601f920c8
[    3.487032] RBP: ffff9f861b3ec000 R08: 0000000000000000 R09: ffffb05741007b10
[    3.494165] R10: ffffb05741007b08 R11: ffffffff831e15c8 R12: ffff9f8601f92000
[    3.501299] R13: ffff9f861b3ec4a8 R14: 0000000000001000 R15: 0000000000002000
[    3.508432] FS:  0000000000000000(0000) GS:ffff9f896f200000(0000)
knlGS:0000000000000000
[    3.516517] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[    3.522261] CR2: 00000000000000a0 CR3: 000000011d930000 CR4: 0000000000350ef0
[    3.529394] Call Trace:
[    3.531848]  <TASK>
[    3.533954]  ? __die+0x20/0x70
[    3.537012]  ? page_fault_oops+0x75/0x170
[    3.541028]  ? exc_page_fault+0x64/0x140
[    3.544951]  ? asm_exc_page_fault+0x22/0x30
[    3.549141]  ? dma_get_required_mask+0x11/0x50
[    3.553584]  qla2x00_probe_one+0x12a1/0x1cb0 [qla2xxx]
[    3.558758]  ? srso_return_thunk+0x5/0x5f
[    3.562770]  ? __update_idle_core+0x5b/0xb0
[    3.566958]  local_pci_probe+0x46/0xa0
[    3.570711]  work_for_cpu_fn+0x16/0x20
[    3.574459]  process_one_work+0x17c/0x390
[    3.578474]  worker_thread+0x239/0x340
[    3.582227]  ? __pfx_worker_thread+0x10/0x10
[    3.586497]  kthread+0xcf/0x100
[    3.589643]  ? __pfx_kthread+0x10/0x10
[    3.593398]  ret_from_fork+0x30/0x50
[    3.596975]  ? __pfx_kthread+0x10/0x10
[    3.600728]  ret_from_fork_asm+0x1a/0x30
[    3.604660]  </TASK>
[    3.606846] Modules linked in: qla2xxx(+) sd_mod sg nvme_fc
nvme_fabrics ahci(+) nvme_keyring libahci crct10dif_pclmul
crc32_pclmul ccp nvme_core crc32c_intel libata nvme_auth
ghash_clmulni_intel megaraid_sas tg3 scsi_transport_fc sp5100_tco wmi
dm_mirror dm_region_hash dm_log dm_mod
[    3.631945] CR2: 00000000000000a0
[    3.635265] ---[ end trace 0000000000000000 ]---
[    3.728765] RIP: 0010:dma_get_required_mask+0x11/0x50
[    3.733828] Code: 2e 0f 1f 84 00 00 00 00 00 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 0f 1f 44 00 00 48 8b 87 38 02 00 00 48 85
c0 74 12 <48> 8b 80 a0 00 00 00 48 85 c0 74 20 e9 fe f1 b7 00 cc 48 8b
05 9e
[    3.752572] RSP: 0018:ffffb05741007d80 EFLAGS: 00010202
[    3.757798] RAX: 0000000000000000 RBX: 0000000000000055 RCX: ffff9f8601f92088
[    3.764930] RDX: ffffb05740e07000 RSI: ffffffffffffffff RDI: ffff9f8601f920c8
[    3.772062] RBP: ffff9f861b3ec000 R08: 0000000000000000 R09: ffffb05741007b10
[    3.779197] R10: ffffb05741007b08 R11: ffffffff831e15c8 R12: ffff9f8601f92000
[    3.786328] R13: ffff9f861b3ec4a8 R14: 0000000000001000 R15: 0000000000002000
[    3.793460] FS:  0000000000000000(0000) GS:ffff9f896f200000(0000)
knlGS:0000000000000000
[    3.801548] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[    3.807292] CR2: 00000000000000a0 CR3: 000000011d930000 CR4: 0000000000350ef0
[    3.814425] Kernel panic - not syncing: Fatal exception
[    3.821267] Kernel Offset: 0x600000 from 0xffffffff81000000
(relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[    3.890453] pstore: backend (erst) writing error (-28)
[    3.895598] ---[ end Kernel panic - not syncing: Fatal exception ]---

On Tue, Sep 24, 2024 at 10:23 AM Alex Deucher <alexdeucher@gmail.com> wrote:
>
> On Tue, Sep 24, 2024 at 8:43 AM Thomas Zimmermann <tzimmermann@suse.de> wrote:
> >
> >
> >
> > Am 24.09.24 um 14:20 schrieb Thomas Zimmermann:
> > > (cc: DMA and x86 folks)
> > >
> > > Hi
> > >
> > > Am 24.09.24 um 04:08 schrieb Arthur Marsh:
> > >> Using current Linus git head kernel, I was able to save the dmesg
> > >> output:
> > >>
> > >> [   17.218724] [drm] radeon kernel modesetting enabled.
> > >> [   17.218778] radeon 0000:00:01.0: vgaarb: deactivate vga console
> > >> [   17.219509] Console: switching to colour dummy device 80x25
> > >> [   17.219700] [drm] initializing kernel modesetting (ARUBA
> > >> 0x1002:0x990C 0x1002:0x0123 0x00).
> > >> [   17.219773] ATOM BIOS: 113
> > >> [   17.219838] radeon 0000:00:01.0: VRAM: 768M 0x0000000000000000 -
> > >> 0x000000002FFFFFFF (768M used)
> > >> [   17.219841] radeon 0000:00:01.0: GTT: 1024M 0x0000000030000000 -
> > >> 0x000000006FFFFFFF
> > >> [   17.219844] [drm] Detected VRAM RAM=768M, BAR=256M
> > >> [   17.219845] [drm] RAM width 64bits DDR
> > >> [   17.219851] BUG: kernel NULL pointer dereference, address:
> > >> 00000000000000a0
> > >
> > > This is 160 bytes behind NULL, which indicates a field within a struct.
> > >
> > >> [   17.219852] #PF: supervisor read access in kernel mode
> > >> [   17.219853] #PF: error_code(0x0000) - not-present page
> > >> [   17.219854] PGD 0 P4D 0
> > >> [   17.219856] Oops: Oops: 0000 [#1] PREEMPT_RT SMP NOPTI
> > >> [   17.219858] CPU: 0 UID: 0 PID: 451 Comm: udevd Not tainted 6.11.0+
> > >> #6121
> > >> [   17.219860] Hardware name: Gigabyte Technology Co., Ltd. To be
> > >> filled by O.E.M./F2A78M-HD2, BIOS F2 05/28/2014
> > >> [   17.219862] RIP: 0010:dma_get_required_mask+0x11/0x50
> > >> [   17.219868] Code: 0f 1f 84 00 00 00 00 00 90 90 90 90 90 90 90 90
> > >> 90 90 90 90 90 90 90 90 90 0f 1f 44 00 00 48 8b 87 68 02 00 00 48 85
> > >> c0 74 11 <48> 8b 80 a0 00 00 00 48 85 c0 74 1f e9 ee ed 94 00 f6 87
> > >> 2c 03 00
> > >> [   17.219870] RSP: 0018:ffffa54bc13a7b00 EFLAGS: 00010202
> > >> [   17.219871] RAX: 0000000000000000 RBX: 000000ffffffffff RCX:
> > >> 0000000000000000
> > >> [   17.219872] RDX: 0000000000000000 RSI: 0000000000000027 RDI:
> > >> ffff976f44e720c8
> > >> [   17.219873] RBP: ffff976f44e720c8 R08: 00000000ffffefff R09:
> > >> ffffffffab2aab08
> > >> [   17.219874] R10: 00000000fffff000 R11: 0000000000000002 R12:
> > >> 0000000000000000
> > >> [   17.219875] R13: ffff976f48a4aa30 R14: 0000000000000000 R15:
> > >> 0000000000000028
> > >> [   17.219876] FS:  00007f59a070d840(0000) GS:ffff97726f800000(0000)
> > >> knlGS:0000000000000000
> > >> [   17.219878] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > >> [   17.219879] CR2: 00000000000000a0 CR3: 00000001053b4000 CR4:
> > >> 00000000000406f0
> > >> [   17.219880] Call Trace:
> > >> [   17.219881]  <TASK>
> > >> [   17.219882]  ? __die_body.cold+0x19/0x1e
> > >> [   17.219885]  ? page_fault_oops+0xa8/0x230
> > >> [   17.219889]  ? search_module_extables+0x4f/0x90
> > >> [   17.219891]  ? fixup_exception+0x36/0x2f0
> > >> [   17.219894]  ? exc_page_fault+0x88/0x1b0
> > >> [   17.219897]  ? asm_exc_page_fault+0x22/0x30
> > >> [   17.219900]  ? dma_get_required_mask+0x11/0x50
>
> Also reported here:
> https://gitlab.freedesktop.org/drm/amd/-/issues/3648
>
> Alex
>
> > >
> > > This is not in the radeon driver but the DMA code. I'd say it's at
> > > [1], as get_required_mask is 160 bytes within struct drm_map_ops. The
> > > call to get_arch_dma_ops() probably returns NULL.
> >
> > And indeed, when I added
> >
> >      pr_warn("dev dma ops: 0x%p\n", pdev->dev.dma_ops);
> >      pr_warn("arch dma ops: 0x%p\n", get_arch_dma_ops());
> >
> > to radeon_pci_probe(), I got
> >
> > [   22.325657] dev dma ops: 0x0000000000000000
> > [   22.342921] arch dma ops: 0x0000000000000000
> >
> > as a result.
> >
> > Best regards
> > Thomas
> >
> > >
> > > Best regards
> > > Thomas
> > >
> > > [1]
> > > https://elixir.bootlin.com/linux/v6.11/source/kernel/dma/mapping.c#L523
> > > [2]
> > > https://elixir.bootlin.com/linux/v6.11/source/include/linux/dma-map-ops.h#L98
> > >
> > >> [   17.219902] dma_addressing_limited+0x6c/0xb0
> > >> [   17.219905]  radeon_ttm_init+0x3f/0x210 [radeon]
> > >> [   17.219977]  cayman_init+0x97/0x290 [radeon]
> > >> [   17.220057]  radeon_device_init+0x5e9/0xb40 [radeon]
> > >> [   17.220115]  radeon_driver_load_kms+0xb0/0x260 [radeon]
> > >> [   17.220174]  radeon_pci_probe+0xff/0x170 [radeon]
> > >> [   17.220231]  pci_device_probe+0xbe/0x1a0
> > >> [   17.220234]  really_probe+0xde/0x350
> > >> [   17.220237]  ? pm_runtime_barrier+0x61/0xb0
> > >> [   17.220240]  ? __pfx___driver_attach+0x10/0x10
> > >> [   17.220242]  __driver_probe_device+0x78/0x110
> > >> [   17.220245]  driver_probe_device+0x2d/0xc0
> > >> [   17.220247]  __driver_attach+0xc9/0x1c0
> > >> [   17.220249]  bus_for_each_dev+0x6a/0xb0
> > >> [   17.220251]  ? migrate_enable+0xbf/0xf0
> > >> [   17.220254]  bus_add_driver+0x139/0x220
> > >> [   17.220256]  driver_register+0x6e/0xc0
> > >> [   17.220258]  ? __pfx_radeon_module_init+0x10/0x10 [radeon]
> > >> [   17.220315]  do_one_initcall+0x42/0x210
> > >> [   17.220318]  ? __kmalloc_cache_noprof+0x89/0x230
> > >> [   17.220321]  do_init_module+0x60/0x210
> > >> [   17.220324]  init_module_from_file+0x89/0xc0
> > >> [   17.220326]  __x64_sys_finit_module+0x142/0x390
> > >> [   17.220329]  do_syscall_64+0x47/0x110
> > >> [   17.220331]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> > >> [   17.220334] RIP: 0033:0x7f59a0625279
> > >> [   17.220336] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00
> > >> 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24
> > >> 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 77 6b 0d 00 f7 d8 64
> > >> 89 01 48
> > >> [   17.220337] RSP: 002b:00007ffd15ee7df8 EFLAGS: 00000246 ORIG_RAX:
> > >> 0000000000000139
> > >> [   17.220339] RAX: ffffffffffffffda RBX: 00005578ae660840 RCX:
> > >> 00007f59a0625279
> > >> [   17.220340] RDX: 0000000000000000 RSI: 00005578ae677fc0 RDI:
> > >> 0000000000000011
> > >> [   17.220341] RBP: 0000000000000000 R08: 00007f59a06fcb20 R09:
> > >> 00005578ae640550
> > >> [   17.220342] R10: 0000000000000040 R11: 0000000000000246 R12:
> > >> 00005578ae677fc0
> > >> [   17.220342] R13: 0000000000020000 R14: 00005578ae651750 R15:
> > >> 0000000000000000
> > >> [   17.220344]  </TASK>
> > >> [   17.220345] Modules linked in: radeon(+) snd_hda_codec_hdmi
> > >> snd_seq_midi snd_seq_midi_event snd_seq snd_hda_intel
> > >> snd_intel_dspcfg snd_emu10k1 snd_hda_codec drm_ttm_helper ttm
> > >> snd_util_mem drm_suballoc_helper snd_ac97_codec snd_hda_core
> > >> drm_display_helper ac97_bus snd_rawmidi snd_hwdep snd_seq_device
> > >> snd_pcm drm_kms_helper edac_mce_amd sha512_ssse3 sha512_generic
> > >> k10temp sha256_ssse3 sha1_ssse3 drm aesni_intel snd_timer gf128mul
> > >> crypto_simd cryptd acpi_cpufreq evdev pcspkr serio_raw emu10k1_gp
> > >> gameport at24 regmap_i2c i2c_algo_bit snd video soundcore wmi button
> > >> sp5100_tco ext4 crc32c_generic crc16 mbcache jbd2 uas usb_storage
> > >> hid_generic usbhid hid sg sr_mod sd_mod cdrom ata_generic
> > >> firewire_ohci crc32_pclmul crc32c_intel firewire_core crc_itu_t
> > >> pata_atiixp i2c_piix4 i2c_smbus ahci r8169 libahci xhci_pci ohci_pci
> > >> realtek libata mdio_devres ehci_pci ohci_hcd xhci_hcd scsi_mod
> > >> ehci_hcd scsi_common usbcore libphy usb_common
> > >> [   17.220388] CR2: 00000000000000a0
> > >> [   17.220390] ---[ end trace 0000000000000000 ]---
> > >>
> > >> Happy to provide additional information and run tests.
> > >>
> > >> Regards,
> > >>
> > >> Arthur Marsh.
> > >
> >
> > --
> > --
> > Thomas Zimmermann
> > Graphics Driver Developer
> > SUSE Software Solutions Germany GmbH
> > Frankenstrasse 146, 90461 Nuernberg, Germany
> > GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
> > HRB 36809 (AG Nuernberg)
> >
>


^ permalink raw reply	[flat|nested] 29+ messages in thread

* NULL pointer dereference after ib test on ring 7 succeeded
  2024-09-24 14:22           ` Alex Deucher
  2024-09-24 19:30             ` Ewan Milne
@ 2024-09-25  0:22             ` Arthur Marsh
  2024-09-25  8:02               ` Thomas Zimmermann
  1 sibling, 1 reply; 29+ messages in thread
From: Arthur Marsh @ 2024-09-25  0:22 UTC (permalink / raw)
  To: alexdeucher
  Cc: Xinhui.Pan, airlied, alexander.deucher, amd-gfx, arthur.marsh,
	christian.koenig, daniel, dri-devel, iommu, linux-kernel,
	tzimmermann, wuhoipok, x86

After rebuilding current Linus git head with:

dma-mapping: report unlimited DMA addressing in IOMMU DMA path
b348b6d17fd1d5d89b86db602f02bea54a754bd8

applied, the radeon module load gets further before hitting another
NULL pointer dereference:

[   17.777472] [drm] radeon kernel modesetting enabled.
[   17.777536] radeon 0000:00:01.0: vgaarb: deactivate vga console
[   17.778276] Console: switching to colour dummy device 80x25
[   17.778519] [drm] initializing kernel modesetting (ARUBA 0x1002:0x990C 0x1002:0x0123 0x00).
[   17.778600] ATOM BIOS: 113
[   17.778658] radeon 0000:00:01.0: VRAM: 768M 0x0000000000000000 - 0x000000002FFFFFFF (768M used)
[   17.778661] radeon 0000:00:01.0: GTT: 1024M 0x0000000030000000 - 0x000000006FFFFFFF
[   17.778665] [drm] Detected VRAM RAM=768M, BAR=256M
[   17.778665] [drm] RAM width 64bits DDR
[   17.778764] [drm] radeon: 768M of VRAM memory ready
[   17.778766] [drm] radeon: 1024M of GTT memory ready.
[   17.778777] [drm] Loading ARUBA Microcode
[   18.038084] [drm] Internal thermal controller without fan control
[   18.038425] [drm] radeon: dpm initialized
[   18.333508] [drm] Found VCE firmware/feedback version 50.0.1 / 17!
[   18.333548] [drm] GART: num cpu pages 262144, num gpu pages 262144
[   18.353624] [drm] PCIE GART of 1024M enabled (table at 0x00000000001D6000).
[   18.353755] radeon 0000:00:01.0: WB enabled
[   18.353758] radeon 0000:00:01.0: fence driver on ring 0 use gpu addr 0x0000000030000c00
[   18.354136] radeon 0000:00:01.0: fence driver on ring 5 use gpu addr 0x0000000000075a18
[   18.374206] radeon 0000:00:01.0: fence driver on ring 6 use gpu addr 0x0000000030000c18
[   18.374208] radeon 0000:00:01.0: fence driver on ring 7 use gpu addr 0x0000000030000c1c
[   18.374210] radeon 0000:00:01.0: fence driver on ring 1 use gpu addr 0x0000000030000c04
[   18.374212] radeon 0000:00:01.0: fence driver on ring 2 use gpu addr 0x0000000030000c08
[   18.374213] radeon 0000:00:01.0: fence driver on ring 3 use gpu addr 0x0000000030000c0c
[   18.374214] radeon 0000:00:01.0: fence driver on ring 4 use gpu addr 0x0000000030000c10
[   18.374469] radeon 0000:00:01.0: radeon: MSI limited to 32-bit
[   18.374525] radeon 0000:00:01.0: radeon: using MSI.
[   18.374604] [drm] radeon: irq initialized.
[   18.392823] [drm] ring test on 0 succeeded in 3 usecs
[   18.392831] [drm] ring test on 3 succeeded in 4 usecs
[   18.392836] [drm] ring test on 4 succeeded in 3 usecs
[   18.438526] [drm] ring test on 5 succeeded in 2 usecs
[   18.458380] [drm] UVD initialized successfully.
[   18.567616] [drm] ring test on 6 succeeded in 18 usecs
[   18.567626] [drm] ring test on 7 succeeded in 3 usecs
[   18.567627] [drm] VCE initialized successfully.
[   18.567686] snd_hda_intel 0000:00:01.1: bound 0000:00:01.0 (ops radeon_audio_component_bind_ops [radeon])
[   18.567925] [drm] ib test on ring 0 succeeded in 0 usecs
[   18.567968] [drm] ib test on ring 3 succeeded in 0 usecs
[   18.568008] [drm] ib test on ring 4 succeeded in 0 usecs
[   19.094527] [drm] ib test on ring 5 succeeded
[   19.257713] mc: Linux media interface: v0.10
[   19.638235] [drm] ib test on ring 6 succeeded
[   20.017069] usb 1-3: dvb_usb_v2: found a 'Realtek RTL2832U reference design' in warm state
[   20.048473] usb 1-3: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer
[   20.048493] dvbdev: DVB: registering new adapter (Realtek RTL2832U reference design)
[   20.048497] usb 1-3: media controller created
[   20.049487] dvbdev: dvb_create_media_entity: media entity 'dvb-demux' registered.
[   20.150361] [drm] ib test on ring 7 succeeded
[   20.150700] BUG: kernel NULL pointer dereference, address: 0000000000000050
[   20.150702] #PF: supervisor read access in kernel mode
[   20.150704] #PF: error_code(0x0000) - not-present page
[   20.150705] PGD 0 P4D 0 
[   20.150707] Oops: Oops: 0000 [#1] PREEMPT_RT SMP NOPTI
[   20.150710] CPU: 0 UID: 0 PID: 446 Comm: udevd Not tainted 6.11.0+ #6122
[   20.150713] Hardware name: Gigabyte Technology Co., Ltd. To be filled by O.E.M./F2A78M-HD2, BIOS F2 05/28/2014
[   20.150714] RIP: 0010:drm_dp_aux_register+0x59/0x110 [drm_display_helper]
[   20.150732] Code: a1 c0 48 85 f6 48 89 83 b8 00 00 00 74 1c 48 8d bb b4 03 00 00 ba 30 00 00 00 e8 52 e5 60 db 48 8d 7b 08 5b 5d e9 b7 ea 37 db <48> 8b 70 50 48 85 f6 75 db 48 8b 30 eb d6 48 8d ab 88 04 00 00 48
[   20.150734] RSP: 0018:ffff9eb8013cb960 EFLAGS: 00010246
[   20.150736] RAX: 0000000000000000 RBX: ffff8f1983bfc508 RCX: ffffffffc0bd1bc0
[   20.150737] RDX: ffffffffc0a1de40 RSI: 0000000000000000 RDI: ffff8f1983bfc9f0
[   20.150738] RBP: ffff8f1983bfc9f0 R08: ffff8f199ca70008 R09: 00000000c0c0c0c0
[   20.150739] R10: 0000000000000000 R11: 0000000000000001 R12: ffff8f199da9af50
[   20.150740] R13: ffff8f199da9b092 R14: ffff8f199da9af2e R15: 0000000000000018
[   20.150741] FS:  00007ff9b9e6a840(0000) GS:ffff8f1caf800000(0000) knlGS:0000000000000000
[   20.150743] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   20.150744] CR2: 0000000000000050 CR3: 00000001033e4000 CR4: 00000000000406f0
[   20.150745] Call Trace:
[   20.150747]  <TASK>
[   20.150748]  ? __die_body.cold+0x19/0x1e
[   20.150753]  ? page_fault_oops+0xa8/0x230
[   20.150757]  ? drm_dp_aux_register+0x59/0x110 [drm_display_helper]
[   20.150767]  ? search_module_extables+0x4f/0x90
[   20.150771]  ? fixup_exception+0x36/0x2f0
[   20.150773]  ? exc_page_fault+0x88/0x1b0
[   20.150776]  ? asm_exc_page_fault+0x22/0x30
[   20.150779]  ? __pfx_radeon_dp_aux_transfer_atom+0x10/0x10 [radeon]
[   20.150888]  ? drm_dp_aux_register+0x59/0x110 [drm_display_helper]
[   20.150900]  radeon_dp_aux_init+0x91/0xc0 [radeon]
[   20.150984]  radeon_get_atom_connector_info_from_object_table+0x58e/0x880 [radeon]
[   20.151047]  ? radeon_get_atom_connector_info_from_supported_devices_table+0x5cf/0x600 [radeon]
[   20.151111]  ? kstrdup+0x4c/0x70
[   20.151115]  ? __kmalloc_noprof+0x24d/0x340
[   20.151118]  radeon_modeset_init+0x375/0x470 [radeon]
[   20.151187]  ? radeon_device_init+0x667/0xb40 [radeon]
[   20.151250]  radeon_driver_load_kms+0xc2/0x260 [radeon]
[   20.151312]  radeon_pci_probe+0xff/0x170 [radeon]
[   20.151374]  pci_device_probe+0xbe/0x1a0
[   20.151377]  really_probe+0xde/0x350
[   20.151380]  ? pm_runtime_barrier+0x61/0xb0
[   20.151383]  ? __pfx___driver_attach+0x10/0x10
[   20.151386]  __driver_probe_device+0x78/0x110
[   20.151388]  driver_probe_device+0x2d/0xc0
[   20.151390]  __driver_attach+0xc9/0x1c0
[   20.151393]  bus_for_each_dev+0x6a/0xb0
[   20.151395]  ? migrate_enable+0xbf/0xf0
[   20.151397]  bus_add_driver+0x139/0x220
[   20.151400]  driver_register+0x6e/0xc0
[   20.151402]  ? __pfx_radeon_module_init+0x10/0x10 [radeon]
[   20.151463]  do_one_initcall+0x42/0x210
[   20.151467]  ? __kmalloc_cache_noprof+0x89/0x230
[   20.151469]  do_init_module+0x60/0x210
[   20.151472]  init_module_from_file+0x89/0xc0
[   20.151475]  __x64_sys_finit_module+0x142/0x390
[   20.151477]  do_syscall_64+0x47/0x110
[   20.151480]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[   20.151483] RIP: 0033:0x7ff9b9d82279
[   20.151485] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 77 6b 0d 00 f7 d8 64 89 01 48
[   20.151486] RSP: 002b:00007fffc5f84708 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
[   20.151488] RAX: ffffffffffffffda RBX: 000055d02068d9b0 RCX: 00007ff9b9d82279
[   20.151489] RDX: 0000000000000000 RSI: 000055d0206807f0 RDI: 0000000000000012
[   20.151490] RBP: 0000000000000000 R08: 0000000000000001 R09: 000055d02066d540
[   20.151491] R10: 0000000000000040 R11: 0000000000000246 R12: 000055d0206807f0
[   20.151492] R13: 0000000000020000 R14: 000055d02067e510 R15: 0000000000000000
[   20.151494]  </TASK>
[   20.151494] Modules linked in: i2c_mux dvb_usb_rtl28xxu(+) dvb_usb_v2 dvb_core mc snd_emu10k1_synth radeon(+) snd_emux_synth snd_seq_midi_emul snd_seq_virmidi drm_ttm_helper snd_seq_midi snd_seq_midi_event ttm snd_seq edac_mce_amd snd_hda_codec_hdmi sha512_ssse3 sha512_generic sha256_ssse3 sha1_ssse3 snd_emu10k1 aesni_intel drm_suballoc_helper snd_hda_intel drm_display_helper snd_intel_dspcfg snd_hda_codec snd_util_mem gf128mul snd_ac97_codec snd_hda_core drm_kms_helper crypto_simd cryptd ac97_bus snd_rawmidi k10temp snd_seq_device snd_hwdep snd_pcm drm acpi_cpufreq evdev serio_raw pcspkr at24 emu10k1_gp gameport regmap_i2c i2c_algo_bit snd_timer video snd sp5100_tco soundcore wmi button ext4 crc32c_generic crc16 mbcache jbd2 uas usb_storage hid_generic usbhid hid sg sr_mod cdrom sd_mod ata_generic firewire_ohci crc32_pclmul crc32c_intel ahci i2c_piix4 firewire_core crc_itu_t pata_atiixp libahci i2c_smbus ohci_pci xhci_pci libata xhci_hcd ehci_pci ohci_hcd r8169 ehci_hcd realtek scsi_mod mdio_devres usbcore
[   20.151550]  scsi_common libphy usb_common
[   20.151553] CR2: 0000000000000050
[   20.151555] ---[ end trace 0000000000000000 ]---

Regards,

Arthur.

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: NULL pointer dereference after ib test on ring 7 succeeded
  2024-09-25  0:22             ` NULL pointer dereference after ib test on ring 7 succeeded Arthur Marsh
@ 2024-09-25  8:02               ` Thomas Zimmermann
  2024-09-30 15:25                 ` NULL pointer dereference with kernel 6.12.0-rc1 and ARUBA GPU Arthur Marsh
  0 siblings, 1 reply; 29+ messages in thread
From: Thomas Zimmermann @ 2024-09-25  8:02 UTC (permalink / raw)
  To: Arthur Marsh, alexdeucher
  Cc: Xinhui.Pan, airlied, alexander.deucher, amd-gfx, christian.koenig,
	daniel, dri-devel, iommu, linux-kernel, wuhoipok, x86

Hi

Am 25.09.24 um 02:22 schrieb Arthur Marsh:
> After rebuilding current Linus git head with:
>
> dma-mapping: report unlimited DMA addressing in IOMMU DMA path
> b348b6d17fd1d5d89b86db602f02bea54a754bd8

I cannot yet apply this patch locally as a function is missing. I'll 
wait for -rc1 to do further debugging.

Best regards
Thomas

>
> applied, the radeon module load gets further before hitting another
> NULL pointer dereference:
>
> [   17.777472] [drm] radeon kernel modesetting enabled.
> [   17.777536] radeon 0000:00:01.0: vgaarb: deactivate vga console
> [   17.778276] Console: switching to colour dummy device 80x25
> [   17.778519] [drm] initializing kernel modesetting (ARUBA 0x1002:0x990C 0x1002:0x0123 0x00).
> [   17.778600] ATOM BIOS: 113
> [   17.778658] radeon 0000:00:01.0: VRAM: 768M 0x0000000000000000 - 0x000000002FFFFFFF (768M used)
> [   17.778661] radeon 0000:00:01.0: GTT: 1024M 0x0000000030000000 - 0x000000006FFFFFFF
> [   17.778665] [drm] Detected VRAM RAM=768M, BAR=256M
> [   17.778665] [drm] RAM width 64bits DDR
> [   17.778764] [drm] radeon: 768M of VRAM memory ready
> [   17.778766] [drm] radeon: 1024M of GTT memory ready.
> [   17.778777] [drm] Loading ARUBA Microcode
> [   18.038084] [drm] Internal thermal controller without fan control
> [   18.038425] [drm] radeon: dpm initialized
> [   18.333508] [drm] Found VCE firmware/feedback version 50.0.1 / 17!
> [   18.333548] [drm] GART: num cpu pages 262144, num gpu pages 262144
> [   18.353624] [drm] PCIE GART of 1024M enabled (table at 0x00000000001D6000).
> [   18.353755] radeon 0000:00:01.0: WB enabled
> [   18.353758] radeon 0000:00:01.0: fence driver on ring 0 use gpu addr 0x0000000030000c00
> [   18.354136] radeon 0000:00:01.0: fence driver on ring 5 use gpu addr 0x0000000000075a18
> [   18.374206] radeon 0000:00:01.0: fence driver on ring 6 use gpu addr 0x0000000030000c18
> [   18.374208] radeon 0000:00:01.0: fence driver on ring 7 use gpu addr 0x0000000030000c1c
> [   18.374210] radeon 0000:00:01.0: fence driver on ring 1 use gpu addr 0x0000000030000c04
> [   18.374212] radeon 0000:00:01.0: fence driver on ring 2 use gpu addr 0x0000000030000c08
> [   18.374213] radeon 0000:00:01.0: fence driver on ring 3 use gpu addr 0x0000000030000c0c
> [   18.374214] radeon 0000:00:01.0: fence driver on ring 4 use gpu addr 0x0000000030000c10
> [   18.374469] radeon 0000:00:01.0: radeon: MSI limited to 32-bit
> [   18.374525] radeon 0000:00:01.0: radeon: using MSI.
> [   18.374604] [drm] radeon: irq initialized.
> [   18.392823] [drm] ring test on 0 succeeded in 3 usecs
> [   18.392831] [drm] ring test on 3 succeeded in 4 usecs
> [   18.392836] [drm] ring test on 4 succeeded in 3 usecs
> [   18.438526] [drm] ring test on 5 succeeded in 2 usecs
> [   18.458380] [drm] UVD initialized successfully.
> [   18.567616] [drm] ring test on 6 succeeded in 18 usecs
> [   18.567626] [drm] ring test on 7 succeeded in 3 usecs
> [   18.567627] [drm] VCE initialized successfully.
> [   18.567686] snd_hda_intel 0000:00:01.1: bound 0000:00:01.0 (ops radeon_audio_component_bind_ops [radeon])
> [   18.567925] [drm] ib test on ring 0 succeeded in 0 usecs
> [   18.567968] [drm] ib test on ring 3 succeeded in 0 usecs
> [   18.568008] [drm] ib test on ring 4 succeeded in 0 usecs
> [   19.094527] [drm] ib test on ring 5 succeeded
> [   19.257713] mc: Linux media interface: v0.10
> [   19.638235] [drm] ib test on ring 6 succeeded
> [   20.017069] usb 1-3: dvb_usb_v2: found a 'Realtek RTL2832U reference design' in warm state
> [   20.048473] usb 1-3: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer
> [   20.048493] dvbdev: DVB: registering new adapter (Realtek RTL2832U reference design)
> [   20.048497] usb 1-3: media controller created
> [   20.049487] dvbdev: dvb_create_media_entity: media entity 'dvb-demux' registered.
> [   20.150361] [drm] ib test on ring 7 succeeded
> [   20.150700] BUG: kernel NULL pointer dereference, address: 0000000000000050
> [   20.150702] #PF: supervisor read access in kernel mode
> [   20.150704] #PF: error_code(0x0000) - not-present page
> [   20.150705] PGD 0 P4D 0
> [   20.150707] Oops: Oops: 0000 [#1] PREEMPT_RT SMP NOPTI
> [   20.150710] CPU: 0 UID: 0 PID: 446 Comm: udevd Not tainted 6.11.0+ #6122
> [   20.150713] Hardware name: Gigabyte Technology Co., Ltd. To be filled by O.E.M./F2A78M-HD2, BIOS F2 05/28/2014
> [   20.150714] RIP: 0010:drm_dp_aux_register+0x59/0x110 [drm_display_helper]
> [   20.150732] Code: a1 c0 48 85 f6 48 89 83 b8 00 00 00 74 1c 48 8d bb b4 03 00 00 ba 30 00 00 00 e8 52 e5 60 db 48 8d 7b 08 5b 5d e9 b7 ea 37 db <48> 8b 70 50 48 85 f6 75 db 48 8b 30 eb d6 48 8d ab 88 04 00 00 48
> [   20.150734] RSP: 0018:ffff9eb8013cb960 EFLAGS: 00010246
> [   20.150736] RAX: 0000000000000000 RBX: ffff8f1983bfc508 RCX: ffffffffc0bd1bc0
> [   20.150737] RDX: ffffffffc0a1de40 RSI: 0000000000000000 RDI: ffff8f1983bfc9f0
> [   20.150738] RBP: ffff8f1983bfc9f0 R08: ffff8f199ca70008 R09: 00000000c0c0c0c0
> [   20.150739] R10: 0000000000000000 R11: 0000000000000001 R12: ffff8f199da9af50
> [   20.150740] R13: ffff8f199da9b092 R14: ffff8f199da9af2e R15: 0000000000000018
> [   20.150741] FS:  00007ff9b9e6a840(0000) GS:ffff8f1caf800000(0000) knlGS:0000000000000000
> [   20.150743] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [   20.150744] CR2: 0000000000000050 CR3: 00000001033e4000 CR4: 00000000000406f0
> [   20.150745] Call Trace:
> [   20.150747]  <TASK>
> [   20.150748]  ? __die_body.cold+0x19/0x1e
> [   20.150753]  ? page_fault_oops+0xa8/0x230
> [   20.150757]  ? drm_dp_aux_register+0x59/0x110 [drm_display_helper]
> [   20.150767]  ? search_module_extables+0x4f/0x90
> [   20.150771]  ? fixup_exception+0x36/0x2f0
> [   20.150773]  ? exc_page_fault+0x88/0x1b0
> [   20.150776]  ? asm_exc_page_fault+0x22/0x30
> [   20.150779]  ? __pfx_radeon_dp_aux_transfer_atom+0x10/0x10 [radeon]
> [   20.150888]  ? drm_dp_aux_register+0x59/0x110 [drm_display_helper]
> [   20.150900]  radeon_dp_aux_init+0x91/0xc0 [radeon]
> [   20.150984]  radeon_get_atom_connector_info_from_object_table+0x58e/0x880 [radeon]
> [   20.151047]  ? radeon_get_atom_connector_info_from_supported_devices_table+0x5cf/0x600 [radeon]
> [   20.151111]  ? kstrdup+0x4c/0x70
> [   20.151115]  ? __kmalloc_noprof+0x24d/0x340
> [   20.151118]  radeon_modeset_init+0x375/0x470 [radeon]
> [   20.151187]  ? radeon_device_init+0x667/0xb40 [radeon]
> [   20.151250]  radeon_driver_load_kms+0xc2/0x260 [radeon]
> [   20.151312]  radeon_pci_probe+0xff/0x170 [radeon]
> [   20.151374]  pci_device_probe+0xbe/0x1a0
> [   20.151377]  really_probe+0xde/0x350
> [   20.151380]  ? pm_runtime_barrier+0x61/0xb0
> [   20.151383]  ? __pfx___driver_attach+0x10/0x10
> [   20.151386]  __driver_probe_device+0x78/0x110
> [   20.151388]  driver_probe_device+0x2d/0xc0
> [   20.151390]  __driver_attach+0xc9/0x1c0
> [   20.151393]  bus_for_each_dev+0x6a/0xb0
> [   20.151395]  ? migrate_enable+0xbf/0xf0
> [   20.151397]  bus_add_driver+0x139/0x220
> [   20.151400]  driver_register+0x6e/0xc0
> [   20.151402]  ? __pfx_radeon_module_init+0x10/0x10 [radeon]
> [   20.151463]  do_one_initcall+0x42/0x210
> [   20.151467]  ? __kmalloc_cache_noprof+0x89/0x230
> [   20.151469]  do_init_module+0x60/0x210
> [   20.151472]  init_module_from_file+0x89/0xc0
> [   20.151475]  __x64_sys_finit_module+0x142/0x390
> [   20.151477]  do_syscall_64+0x47/0x110
> [   20.151480]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> [   20.151483] RIP: 0033:0x7ff9b9d82279
> [   20.151485] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 77 6b 0d 00 f7 d8 64 89 01 48
> [   20.151486] RSP: 002b:00007fffc5f84708 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
> [   20.151488] RAX: ffffffffffffffda RBX: 000055d02068d9b0 RCX: 00007ff9b9d82279
> [   20.151489] RDX: 0000000000000000 RSI: 000055d0206807f0 RDI: 0000000000000012
> [   20.151490] RBP: 0000000000000000 R08: 0000000000000001 R09: 000055d02066d540
> [   20.151491] R10: 0000000000000040 R11: 0000000000000246 R12: 000055d0206807f0
> [   20.151492] R13: 0000000000020000 R14: 000055d02067e510 R15: 0000000000000000
> [   20.151494]  </TASK>
> [   20.151494] Modules linked in: i2c_mux dvb_usb_rtl28xxu(+) dvb_usb_v2 dvb_core mc snd_emu10k1_synth radeon(+) snd_emux_synth snd_seq_midi_emul snd_seq_virmidi drm_ttm_helper snd_seq_midi snd_seq_midi_event ttm snd_seq edac_mce_amd snd_hda_codec_hdmi sha512_ssse3 sha512_generic sha256_ssse3 sha1_ssse3 snd_emu10k1 aesni_intel drm_suballoc_helper snd_hda_intel drm_display_helper snd_intel_dspcfg snd_hda_codec snd_util_mem gf128mul snd_ac97_codec snd_hda_core drm_kms_helper crypto_simd cryptd ac97_bus snd_rawmidi k10temp snd_seq_device snd_hwdep snd_pcm drm acpi_cpufreq evdev serio_raw pcspkr at24 emu10k1_gp gameport regmap_i2c i2c_algo_bit snd_timer video snd sp5100_tco soundcore wmi button ext4 crc32c_generic crc16 mbcache jbd2 uas usb_storage hid_generic usbhid hid sg sr_mod cdrom sd_mod ata_generic firewire_ohci crc32_pclmul crc32c_intel ahci i2c_piix4 firewire_core crc_itu_t pata_atiixp libahci i2c_smbus ohci_pci xhci_pci libata xhci_hcd ehci_pci ohci_hcd r8169 ehci_hcd realtek scsi_mod mdio_devres usbcore
> [   20.151550]  scsi_common libphy usb_common
> [   20.151553] CR2: 0000000000000050
> [   20.151555] ---[ end trace 0000000000000000 ]---
>
> Regards,
>
> Arthur.

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: radeon ARUBA NULL pointer dereference
  2024-09-24 19:30             ` Ewan Milne
@ 2024-09-25 18:13               ` Ewan Milne
  0 siblings, 0 replies; 29+ messages in thread
From: Ewan Milne @ 2024-09-25 18:13 UTC (permalink / raw)
  To: Alex Deucher
  Cc: Thomas Zimmermann, Arthur Marsh, Xinhui.Pan, airlied,
	alexander.deucher, amd-gfx, christian.koenig, daniel, dri-devel,
	linux-kernel, wuhoipok, iommu, the arch/x86 maintainers,
	Nilesh Javali, Martin K. Petersen

Follow-up, qla2xxx appears to be fixed, most recent test was with:

commit 684a64bf32b6e488004e0ad7f0d7e922798f65b6 (HEAD -> master,
origin/master, origin/HEAD)
Merge: f7fccaa77271 68898131d2df
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Tue Sep 24 15:44:18 2024 -0700

    Merge tag 'nfs-for-6.12-1' of
git://git.linux-nfs.org/projects/anna/linux-nfs

I suppose the most likely fix was probably this one but I do not have
the HW to verify
(report I got was on an AMD EPYC 7262):

commit b348b6d17fd1d5d89b86db602f02bea54a754bd8
Author: Leon Romanovsky <leon@kernel.org>
Date:   Sun Sep 22 21:09:48 2024 +0300

    dma-mapping: report unlimited DMA addressing in IOMMU DMA path

-Ewan

On Tue, Sep 24, 2024 at 3:30 PM Ewan Milne <emilne@redhat.com> wrote:
>
> I think we are seeing a similar problem w/qla2xxx panicing at boot:
>


^ permalink raw reply	[flat|nested] 29+ messages in thread

* NULL pointer dereference with kernel 6.12.0-rc1 and ARUBA GPU
  2024-09-25  8:02               ` Thomas Zimmermann
@ 2024-09-30 15:25                 ` Arthur Marsh
  2024-09-30 17:54                   ` Christian König
  0 siblings, 1 reply; 29+ messages in thread
From: Arthur Marsh @ 2024-09-30 15:25 UTC (permalink / raw)
  To: tzimmermann
  Cc: Xinhui.Pan, airlied, alexander.deucher, alexdeucher, amd-gfx,
	arthur.marsh, christian.koenig, daniel, dri-devel, iommu,
	linux-kernel, wuhoipok, x86

[   13.069630] [drm] radeon kernel modesetting enabled.
[   13.069681] radeon 0000:00:01.0: vgaarb: deactivate vga console
[   13.070435] Console: switching to colour dummy device 80x25
[   13.070632] [drm] initializing kernel modesetting (ARUBA 0x1002:0x990C 0x1002:0x0123 0x00).
[   13.070718] ATOM BIOS: 113
[   13.070778] radeon 0000:00:01.0: VRAM: 768M 0x0000000000000000 - 0x000000002FFFFFFF (768M used)
[   13.070781] radeon 0000:00:01.0: GTT: 1024M 0x0000000030000000 - 0x000000006FFFFFFF
[   13.070785] [drm] Detected VRAM RAM=768M, BAR=256M
[   13.070786] [drm] RAM width 64bits DDR
[   13.070884] [drm] radeon: 768M of VRAM memory ready
[   13.070885] [drm] radeon: 1024M of GTT memory ready.
[   13.070896] [drm] Loading ARUBA Microcode
[   13.504398] [drm] Internal thermal controller without fan control
[   13.504566] [drm] radeon: dpm initialized
[   13.839229] [drm] Found VCE firmware/feedback version 50.0.1 / 17!
[   13.839264] [drm] GART: num cpu pages 262144, num gpu pages 262144
[   13.863929] [drm] PCIE GART of 1024M enabled (table at 0x00000000001D6000).
[   13.864085] radeon 0000:00:01.0: WB enabled
[   13.864088] radeon 0000:00:01.0: fence driver on ring 0 use gpu addr 0x0000000030000c00
[   13.864467] radeon 0000:00:01.0: fence driver on ring 5 use gpu addr 0x0000000000075a18
[   13.884497] radeon 0000:00:01.0: fence driver on ring 6 use gpu addr 0x0000000030000c18
[   13.884502] radeon 0000:00:01.0: fence driver on ring 7 use gpu addr 0x0000000030000c1c
[   13.884503] radeon 0000:00:01.0: fence driver on ring 1 use gpu addr 0x0000000030000c04
[   13.884505] radeon 0000:00:01.0: fence driver on ring 2 use gpu addr 0x0000000030000c08
[   13.884506] radeon 0000:00:01.0: fence driver on ring 3 use gpu addr 0x0000000030000c0c
[   13.884507] radeon 0000:00:01.0: fence driver on ring 4 use gpu addr 0x0000000030000c10
[   13.884862] radeon 0000:00:01.0: radeon: MSI limited to 32-bit
[   13.884921] radeon 0000:00:01.0: radeon: using MSI.
[   13.885003] [drm] radeon: irq initialized.
[   13.903273] [drm] ring test on 0 succeeded in 3 usecs
[   13.903281] [drm] ring test on 3 succeeded in 4 usecs
[   13.903286] [drm] ring test on 4 succeeded in 3 usecs
[   13.949128] [drm] ring test on 5 succeeded in 2 usecs
[   13.968988] [drm] UVD initialized successfully.
[   14.078221] [drm] ring test on 6 succeeded in 17 usecs
[   14.078234] [drm] ring test on 7 succeeded in 3 usecs
[   14.078236] [drm] VCE initialized successfully.
[   14.078314] snd_hda_intel 0000:00:01.1: bound 0000:00:01.0 (ops radeon_audio_component_bind_ops [radeon])
[   14.078502] [drm] ib test on ring 0 succeeded in 0 usecs
[   14.078555] [drm] ib test on ring 3 succeeded in 0 usecs
[   14.078606] [drm] ib test on ring 4 succeeded in 0 usecs
[   14.153378] mc: Linux media interface: v0.10
[   14.593759] usb 1-3: dvb_usb_v2: found a 'Realtek RTL2832U reference design' in warm state
[   14.614227] [drm] ib test on ring 5 succeeded
[   14.625865] usb 1-3: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer
[   14.625885] dvbdev: DVB: registering new adapter (Realtek RTL2832U reference design)
[   14.625889] usb 1-3: media controller created
[   14.627064] dvbdev: dvb_create_media_entity: media entity 'dvb-demux' registered.
[   14.801142] i2c i2c-5: Added multiplexed i2c bus 6
[   14.801149] rtl2832 5-0010: Realtek RTL2832 successfully attached
[   14.801176] usb 1-3: DVB: registering adapter 0 frontend 0 (Realtek RTL2832 (DVB-T))...
[   14.801189] dvbdev: dvb_create_media_entity: media entity 'Realtek RTL2832 (DVB-T)' registered.
[   14.957783] i2c i2c-6: fc0012: Fitipower FC0012 successfully identified
[   15.158461] [drm] ib test on ring 6 succeeded
[   15.178787] videodev: Linux video capture interface: v2.00
[   15.460709] rtl2832_sdr rtl2832_sdr.1.auto: Registered as swradio0
[   15.460715] rtl2832_sdr rtl2832_sdr.1.auto: Realtek RTL2832 SDR attached
[   15.460718] rtl2832_sdr rtl2832_sdr.1.auto: SDR API is still slightly experimental and functionality changes may follow
[   15.477759] usb 1-3: dvb_usb_v2: 'Realtek RTL2832U reference design' successfully initialized and connected
[   15.477878] usbcore: registered new interface driver dvb_usb_rtl28xxu
[   15.670413] [drm] ib test on ring 7 succeeded
[   15.671111] BUG: kernel NULL pointer dereference, address: 0000000000000050
[   15.671114] #PF: supervisor read access in kernel mode
[   15.671117] #PF: error_code(0x0000) - not-present page
[   15.671119] PGD 0 P4D 0 
[   15.671123] Oops: Oops: 0000 [#1] PREEMPT_RT SMP NOPTI
[   15.671127] CPU: 2 UID: 0 PID: 437 Comm: udevd Not tainted 6.12.0-rc1 #6131
[   15.671132] Hardware name: Gigabyte Technology Co., Ltd. To be filled by O.E.M./F2A78M-HD2, BIOS F2 05/28/2014
[   15.671134] RIP: 0010:drm_dp_aux_register+0x59/0x110 [drm_display_helper]
[   15.671164] Code: 86 c0 48 85 f6 48 89 83 b8 00 00 00 74 1c 48 8d bb b4 03 00 00 ba 30 00 00 00 e8 52 35 bc c7 48 8d 7b 08 5b 5d e9 37 31 93 c7 <48> 8b 70 50 48 85 f6 75 db 48 8b 30 eb d6 48 8d ab 88 04 00 00 48
[   15.671167] RSP: 0018:ffffb37f80e33960 EFLAGS: 00010246
[   15.671170] RAX: 0000000000000000 RBX: ffff892d407ee508 RCX: ffffffffc09b3bc0
[   15.671172] RDX: ffffffffc0869e40 RSI: 0000000000000000 RDI: ffff892d407ee9f0
[   15.671174] RBP: ffff892d407ee9f0 R08: ffff892d42fb8008 R09: 00000000c0c0c0c0
[   15.671176] R10: 0000000000000000 R11: 0000000000000001 R12: ffff892d5b64af50
[   15.671178] R13: ffff892d5b64b092 R14: ffff892d5b64af2e R15: 0000000000000018
[   15.671181] FS:  00007f066d882840(0000) GS:ffff89306f900000(0000) knlGS:0000000000000000
[   15.671183] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   15.671185] CR2: 0000000000000050 CR3: 00000001047a6000 CR4: 00000000000406f0
[   15.671188] Call Trace:
[   15.671190]  <TASK>
[   15.671192]  ? __die_body.cold+0x19/0x1e
[   15.671200]  ? page_fault_oops+0xa8/0x230
[   15.671206]  ? drm_dp_aux_register+0x59/0x110 [drm_display_helper]
[   15.671227]  ? search_module_extables+0x4f/0x90
[   15.671233]  ? fixup_exception+0x36/0x2f0
[   15.671239]  ? exc_page_fault+0x88/0x1b0
[   15.671244]  ? asm_exc_page_fault+0x22/0x30
[   15.671251]  ? __pfx_radeon_dp_aux_transfer_atom+0x10/0x10 [radeon]
[   15.671437]  ? drm_dp_aux_register+0x59/0x110 [drm_display_helper]
[   15.671463]  radeon_dp_aux_init+0x91/0xc0 [radeon]
[   15.671634]  radeon_get_atom_connector_info_from_object_table+0x58e/0x880 [radeon]
[   15.671764]  ? radeon_get_atom_connector_info_from_supported_devices_table+0x5cf/0x600 [radeon]
[   15.671895]  ? kstrdup+0x4c/0x70
[   15.671902]  ? __kmalloc_noprof+0x24d/0x340
[   15.671908]  radeon_modeset_init+0x375/0x470 [radeon]
[   15.672050]  ? radeon_device_init+0x667/0xb40 [radeon]
[   15.672179]  radeon_driver_load_kms+0xc2/0x260 [radeon]
[   15.672308]  radeon_pci_probe+0xff/0x170 [radeon]
[   15.672436]  pci_device_probe+0xbe/0x1a0
[   15.672441]  really_probe+0xde/0x350
[   15.672447]  ? pm_runtime_barrier+0x61/0xb0
[   15.672452]  ? __pfx___driver_attach+0x10/0x10
[   15.672457]  __driver_probe_device+0x78/0x110
[   15.672462]  driver_probe_device+0x2d/0xc0
[   15.672467]  __driver_attach+0xc9/0x1c0
[   15.672472]  bus_for_each_dev+0x6a/0xb0
[   15.672476]  ? migrate_enable+0xbf/0xf0
[   15.672480]  bus_add_driver+0x139/0x220
[   15.672485]  driver_register+0x6e/0xc0
[   15.672491]  ? __pfx_radeon_module_init+0x10/0x10 [radeon]
[   15.672616]  do_one_initcall+0x42/0x210
[   15.672622]  ? __kmalloc_cache_noprof+0x89/0x230
[   15.672627]  do_init_module+0x60/0x210
[   15.672631]  init_module_from_file+0x89/0xc0
[   15.672637]  __x64_sys_finit_module+0x142/0x390
[   15.672643]  do_syscall_64+0x47/0x110
[   15.672647]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[   15.672653] RIP: 0033:0x7f066d6b3839
[   15.672657] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d b7 85 0d 00 f7 d8 64 89 01 48
[   15.672659] RSP: 002b:00007ffead344b38 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
[   15.672663] RAX: ffffffffffffffda RBX: 00005586f29e09b0 RCX: 00007f066d6b3839
[   15.672665] RDX: 0000000000000000 RSI: 00005586f29d08d0 RDI: 0000000000000011
[   15.672667] RBP: 0000000000000000 R08: 0000000000000000 R09: 00005586f29c0540
[   15.672669] R10: 00007f066d78cac0 R11: 0000000000000246 R12: 00005586f29d08d0
[   15.672671] R13: 0000000000020000 R14: 00005586f29d82e0 R15: 0000000000000000
[   15.672675]  </TASK>
[   15.672676] Modules linked in: rtl2832_sdr videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_common videodev fc0012 rtl2832 i2c_mux dvb_usb_rtl28xxu dvb_usb_v2 dvb_core mc snd_emu10k1_synth snd_emux_synth snd_seq_midi_emul snd_seq_virmidi radeon(+) snd_seq_midi snd_seq_midi_event snd_seq snd_emu10k1 drm_ttm_helper ttm snd_hda_codec_hdmi drm_suballoc_helper snd_hda_intel snd_util_mem drm_display_helper snd_ac97_codec snd_intel_dspcfg snd_hda_codec snd_hda_core ac97_bus snd_hwdep snd_rawmidi snd_seq_device snd_pcm drm_kms_helper snd_timer edac_mce_amd k10temp sha512_ssse3 sha512_generic sha256_ssse3 sha1_ssse3 drm aesni_intel snd gf128mul at24 crypto_simd cryptd soundcore acpi_cpufreq regmap_i2c emu10k1_gp gameport pcspkr evdev serio_raw i2c_algo_bit video sp5100_tco wmi button ext4 crc32c_generic crc16 mbcache jbd2 hid_generic usbhid hid sg sr_mod cdrom sd_mod ata_generic crc32_pclmul firewire_ohci crc32c_intel firewire_core ahci i2c_piix4 crc_itu_t pata_atiixp i2c_smbus r8169 libahci ohci_pci xhci_pci libata
[   15.672761]  realtek ohci_hcd ehci_pci xhci_hcd ehci_hcd mdio_devres scsi_mod scsi_common libphy usbcore usb_common
[   15.672773] CR2: 0000000000000050
[   15.672776] ---[ end trace 0000000000000000 ]---

^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: NULL pointer dereference with kernel 6.12.0-rc1 and ARUBA GPU
  2024-09-30 15:25                 ` NULL pointer dereference with kernel 6.12.0-rc1 and ARUBA GPU Arthur Marsh
@ 2024-09-30 17:54                   ` Christian König
  2024-10-07 12:44                     ` Thomas Zimmermann
  0 siblings, 1 reply; 29+ messages in thread
From: Christian König @ 2024-09-30 17:54 UTC (permalink / raw)
  To: Arthur Marsh, tzimmermann
  Cc: Xinhui.Pan, airlied, alexander.deucher, alexdeucher, amd-gfx,
	daniel, dri-devel, iommu, linux-kernel, wuhoipok, x86

I've been running into the same issue as well. Going to take a look.

Christian.

Am 30.09.24 um 17:25 schrieb Arthur Marsh:
> [   13.069630] [drm] radeon kernel modesetting enabled.
> [   13.069681] radeon 0000:00:01.0: vgaarb: deactivate vga console
> [   13.070435] Console: switching to colour dummy device 80x25
> [   13.070632] [drm] initializing kernel modesetting (ARUBA 0x1002:0x990C 0x1002:0x0123 0x00).
> [   13.070718] ATOM BIOS: 113
> [   13.070778] radeon 0000:00:01.0: VRAM: 768M 0x0000000000000000 - 0x000000002FFFFFFF (768M used)
> [   13.070781] radeon 0000:00:01.0: GTT: 1024M 0x0000000030000000 - 0x000000006FFFFFFF
> [   13.070785] [drm] Detected VRAM RAM=768M, BAR=256M
> [   13.070786] [drm] RAM width 64bits DDR
> [   13.070884] [drm] radeon: 768M of VRAM memory ready
> [   13.070885] [drm] radeon: 1024M of GTT memory ready.
> [   13.070896] [drm] Loading ARUBA Microcode
> [   13.504398] [drm] Internal thermal controller without fan control
> [   13.504566] [drm] radeon: dpm initialized
> [   13.839229] [drm] Found VCE firmware/feedback version 50.0.1 / 17!
> [   13.839264] [drm] GART: num cpu pages 262144, num gpu pages 262144
> [   13.863929] [drm] PCIE GART of 1024M enabled (table at 0x00000000001D6000).
> [   13.864085] radeon 0000:00:01.0: WB enabled
> [   13.864088] radeon 0000:00:01.0: fence driver on ring 0 use gpu addr 0x0000000030000c00
> [   13.864467] radeon 0000:00:01.0: fence driver on ring 5 use gpu addr 0x0000000000075a18
> [   13.884497] radeon 0000:00:01.0: fence driver on ring 6 use gpu addr 0x0000000030000c18
> [   13.884502] radeon 0000:00:01.0: fence driver on ring 7 use gpu addr 0x0000000030000c1c
> [   13.884503] radeon 0000:00:01.0: fence driver on ring 1 use gpu addr 0x0000000030000c04
> [   13.884505] radeon 0000:00:01.0: fence driver on ring 2 use gpu addr 0x0000000030000c08
> [   13.884506] radeon 0000:00:01.0: fence driver on ring 3 use gpu addr 0x0000000030000c0c
> [   13.884507] radeon 0000:00:01.0: fence driver on ring 4 use gpu addr 0x0000000030000c10
> [   13.884862] radeon 0000:00:01.0: radeon: MSI limited to 32-bit
> [   13.884921] radeon 0000:00:01.0: radeon: using MSI.
> [   13.885003] [drm] radeon: irq initialized.
> [   13.903273] [drm] ring test on 0 succeeded in 3 usecs
> [   13.903281] [drm] ring test on 3 succeeded in 4 usecs
> [   13.903286] [drm] ring test on 4 succeeded in 3 usecs
> [   13.949128] [drm] ring test on 5 succeeded in 2 usecs
> [   13.968988] [drm] UVD initialized successfully.
> [   14.078221] [drm] ring test on 6 succeeded in 17 usecs
> [   14.078234] [drm] ring test on 7 succeeded in 3 usecs
> [   14.078236] [drm] VCE initialized successfully.
> [   14.078314] snd_hda_intel 0000:00:01.1: bound 0000:00:01.0 (ops radeon_audio_component_bind_ops [radeon])
> [   14.078502] [drm] ib test on ring 0 succeeded in 0 usecs
> [   14.078555] [drm] ib test on ring 3 succeeded in 0 usecs
> [   14.078606] [drm] ib test on ring 4 succeeded in 0 usecs
> [   14.153378] mc: Linux media interface: v0.10
> [   14.593759] usb 1-3: dvb_usb_v2: found a 'Realtek RTL2832U reference design' in warm state
> [   14.614227] [drm] ib test on ring 5 succeeded
> [   14.625865] usb 1-3: dvb_usb_v2: will pass the complete MPEG2 transport stream to the software demuxer
> [   14.625885] dvbdev: DVB: registering new adapter (Realtek RTL2832U reference design)
> [   14.625889] usb 1-3: media controller created
> [   14.627064] dvbdev: dvb_create_media_entity: media entity 'dvb-demux' registered.
> [   14.801142] i2c i2c-5: Added multiplexed i2c bus 6
> [   14.801149] rtl2832 5-0010: Realtek RTL2832 successfully attached
> [   14.801176] usb 1-3: DVB: registering adapter 0 frontend 0 (Realtek RTL2832 (DVB-T))...
> [   14.801189] dvbdev: dvb_create_media_entity: media entity 'Realtek RTL2832 (DVB-T)' registered.
> [   14.957783] i2c i2c-6: fc0012: Fitipower FC0012 successfully identified
> [   15.158461] [drm] ib test on ring 6 succeeded
> [   15.178787] videodev: Linux video capture interface: v2.00
> [   15.460709] rtl2832_sdr rtl2832_sdr.1.auto: Registered as swradio0
> [   15.460715] rtl2832_sdr rtl2832_sdr.1.auto: Realtek RTL2832 SDR attached
> [   15.460718] rtl2832_sdr rtl2832_sdr.1.auto: SDR API is still slightly experimental and functionality changes may follow
> [   15.477759] usb 1-3: dvb_usb_v2: 'Realtek RTL2832U reference design' successfully initialized and connected
> [   15.477878] usbcore: registered new interface driver dvb_usb_rtl28xxu
> [   15.670413] [drm] ib test on ring 7 succeeded
> [   15.671111] BUG: kernel NULL pointer dereference, address: 0000000000000050
> [   15.671114] #PF: supervisor read access in kernel mode
> [   15.671117] #PF: error_code(0x0000) - not-present page
> [   15.671119] PGD 0 P4D 0
> [   15.671123] Oops: Oops: 0000 [#1] PREEMPT_RT SMP NOPTI
> [   15.671127] CPU: 2 UID: 0 PID: 437 Comm: udevd Not tainted 6.12.0-rc1 #6131
> [   15.671132] Hardware name: Gigabyte Technology Co., Ltd. To be filled by O.E.M./F2A78M-HD2, BIOS F2 05/28/2014
> [   15.671134] RIP: 0010:drm_dp_aux_register+0x59/0x110 [drm_display_helper]
> [   15.671164] Code: 86 c0 48 85 f6 48 89 83 b8 00 00 00 74 1c 48 8d bb b4 03 00 00 ba 30 00 00 00 e8 52 35 bc c7 48 8d 7b 08 5b 5d e9 37 31 93 c7 <48> 8b 70 50 48 85 f6 75 db 48 8b 30 eb d6 48 8d ab 88 04 00 00 48
> [   15.671167] RSP: 0018:ffffb37f80e33960 EFLAGS: 00010246
> [   15.671170] RAX: 0000000000000000 RBX: ffff892d407ee508 RCX: ffffffffc09b3bc0
> [   15.671172] RDX: ffffffffc0869e40 RSI: 0000000000000000 RDI: ffff892d407ee9f0
> [   15.671174] RBP: ffff892d407ee9f0 R08: ffff892d42fb8008 R09: 00000000c0c0c0c0
> [   15.671176] R10: 0000000000000000 R11: 0000000000000001 R12: ffff892d5b64af50
> [   15.671178] R13: ffff892d5b64b092 R14: ffff892d5b64af2e R15: 0000000000000018
> [   15.671181] FS:  00007f066d882840(0000) GS:ffff89306f900000(0000) knlGS:0000000000000000
> [   15.671183] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [   15.671185] CR2: 0000000000000050 CR3: 00000001047a6000 CR4: 00000000000406f0
> [   15.671188] Call Trace:
> [   15.671190]  <TASK>
> [   15.671192]  ? __die_body.cold+0x19/0x1e
> [   15.671200]  ? page_fault_oops+0xa8/0x230
> [   15.671206]  ? drm_dp_aux_register+0x59/0x110 [drm_display_helper]
> [   15.671227]  ? search_module_extables+0x4f/0x90
> [   15.671233]  ? fixup_exception+0x36/0x2f0
> [   15.671239]  ? exc_page_fault+0x88/0x1b0
> [   15.671244]  ? asm_exc_page_fault+0x22/0x30
> [   15.671251]  ? __pfx_radeon_dp_aux_transfer_atom+0x10/0x10 [radeon]
> [   15.671437]  ? drm_dp_aux_register+0x59/0x110 [drm_display_helper]
> [   15.671463]  radeon_dp_aux_init+0x91/0xc0 [radeon]
> [   15.671634]  radeon_get_atom_connector_info_from_object_table+0x58e/0x880 [radeon]
> [   15.671764]  ? radeon_get_atom_connector_info_from_supported_devices_table+0x5cf/0x600 [radeon]
> [   15.671895]  ? kstrdup+0x4c/0x70
> [   15.671902]  ? __kmalloc_noprof+0x24d/0x340
> [   15.671908]  radeon_modeset_init+0x375/0x470 [radeon]
> [   15.672050]  ? radeon_device_init+0x667/0xb40 [radeon]
> [   15.672179]  radeon_driver_load_kms+0xc2/0x260 [radeon]
> [   15.672308]  radeon_pci_probe+0xff/0x170 [radeon]
> [   15.672436]  pci_device_probe+0xbe/0x1a0
> [   15.672441]  really_probe+0xde/0x350
> [   15.672447]  ? pm_runtime_barrier+0x61/0xb0
> [   15.672452]  ? __pfx___driver_attach+0x10/0x10
> [   15.672457]  __driver_probe_device+0x78/0x110
> [   15.672462]  driver_probe_device+0x2d/0xc0
> [   15.672467]  __driver_attach+0xc9/0x1c0
> [   15.672472]  bus_for_each_dev+0x6a/0xb0
> [   15.672476]  ? migrate_enable+0xbf/0xf0
> [   15.672480]  bus_add_driver+0x139/0x220
> [   15.672485]  driver_register+0x6e/0xc0
> [   15.672491]  ? __pfx_radeon_module_init+0x10/0x10 [radeon]
> [   15.672616]  do_one_initcall+0x42/0x210
> [   15.672622]  ? __kmalloc_cache_noprof+0x89/0x230
> [   15.672627]  do_init_module+0x60/0x210
> [   15.672631]  init_module_from_file+0x89/0xc0
> [   15.672637]  __x64_sys_finit_module+0x142/0x390
> [   15.672643]  do_syscall_64+0x47/0x110
> [   15.672647]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
> [   15.672653] RIP: 0033:0x7f066d6b3839
> [   15.672657] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d b7 85 0d 00 f7 d8 64 89 01 48
> [   15.672659] RSP: 002b:00007ffead344b38 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
> [   15.672663] RAX: ffffffffffffffda RBX: 00005586f29e09b0 RCX: 00007f066d6b3839
> [   15.672665] RDX: 0000000000000000 RSI: 00005586f29d08d0 RDI: 0000000000000011
> [   15.672667] RBP: 0000000000000000 R08: 0000000000000000 R09: 00005586f29c0540
> [   15.672669] R10: 00007f066d78cac0 R11: 0000000000000246 R12: 00005586f29d08d0
> [   15.672671] R13: 0000000000020000 R14: 00005586f29d82e0 R15: 0000000000000000
> [   15.672675]  </TASK>
> [   15.672676] Modules linked in: rtl2832_sdr videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_common videodev fc0012 rtl2832 i2c_mux dvb_usb_rtl28xxu dvb_usb_v2 dvb_core mc snd_emu10k1_synth snd_emux_synth snd_seq_midi_emul snd_seq_virmidi radeon(+) snd_seq_midi snd_seq_midi_event snd_seq snd_emu10k1 drm_ttm_helper ttm snd_hda_codec_hdmi drm_suballoc_helper snd_hda_intel snd_util_mem drm_display_helper snd_ac97_codec snd_intel_dspcfg snd_hda_codec snd_hda_core ac97_bus snd_hwdep snd_rawmidi snd_seq_device snd_pcm drm_kms_helper snd_timer edac_mce_amd k10temp sha512_ssse3 sha512_generic sha256_ssse3 sha1_ssse3 drm aesni_intel snd gf128mul at24 crypto_simd cryptd soundcore acpi_cpufreq regmap_i2c emu10k1_gp gameport pcspkr evdev serio_raw i2c_algo_bit video sp5100_tco wmi button ext4 crc32c_generic crc16 mbcache jbd2 hid_generic usbhid hid sg sr_mod cdrom sd_mod ata_generic crc32_pclmul firewire_ohci crc32c_intel firewire_core ahci i2c_piix4 crc_itu_t pata_atiixp i2c_smbus r8169 libahci ohci_pci xhci_pci libata
> [   15.672761]  realtek ohci_hcd ehci_pci xhci_hcd ehci_hcd mdio_devres scsi_mod scsi_common libphy usbcore usb_common
> [   15.672773] CR2: 0000000000000050
> [   15.672776] ---[ end trace 0000000000000000 ]---


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: NULL pointer dereference with kernel 6.12.0-rc1 and ARUBA GPU
  2024-09-30 17:54                   ` Christian König
@ 2024-10-07 12:44                     ` Thomas Zimmermann
  0 siblings, 0 replies; 29+ messages in thread
From: Thomas Zimmermann @ 2024-10-07 12:44 UTC (permalink / raw)
  To: Christian König, Arthur Marsh
  Cc: Xinhui.Pan, airlied, alexander.deucher, alexdeucher, amd-gfx,
	daniel, dri-devel, iommu, linux-kernel, wuhoipok, x86

Hi

Am 30.09.24 um 19:54 schrieb Christian König:
> I've been running into the same issue as well. Going to take a look.

Any results?

>
> Christian.
>
> Am 30.09.24 um 17:25 schrieb Arthur Marsh:
>> [   13.069630] [drm] radeon kernel modesetting enabled.
>> [   13.069681] radeon 0000:00:01.0: vgaarb: deactivate vga console
>> [   13.070435] Console: switching to colour dummy device 80x25
>> [   13.070632] [drm] initializing kernel modesetting (ARUBA 
>> 0x1002:0x990C 0x1002:0x0123 0x00).
>> [   13.070718] ATOM BIOS: 113
>> [   13.070778] radeon 0000:00:01.0: VRAM: 768M 0x0000000000000000 - 
>> 0x000000002FFFFFFF (768M used)
>> [   13.070781] radeon 0000:00:01.0: GTT: 1024M 0x0000000030000000 - 
>> 0x000000006FFFFFFF
>> [   13.070785] [drm] Detected VRAM RAM=768M, BAR=256M
>> [   13.070786] [drm] RAM width 64bits DDR
>> [   13.070884] [drm] radeon: 768M of VRAM memory ready
>> [   13.070885] [drm] radeon: 1024M of GTT memory ready.
>> [   13.070896] [drm] Loading ARUBA Microcode
>> [   13.504398] [drm] Internal thermal controller without fan control
>> [   13.504566] [drm] radeon: dpm initialized
>> [   13.839229] [drm] Found VCE firmware/feedback version 50.0.1 / 17!
>> [   13.839264] [drm] GART: num cpu pages 262144, num gpu pages 262144
>> [   13.863929] [drm] PCIE GART of 1024M enabled (table at 
>> 0x00000000001D6000).
>> [   13.864085] radeon 0000:00:01.0: WB enabled
>> [   13.864088] radeon 0000:00:01.0: fence driver on ring 0 use gpu 
>> addr 0x0000000030000c00
>> [   13.864467] radeon 0000:00:01.0: fence driver on ring 5 use gpu 
>> addr 0x0000000000075a18
>> [   13.884497] radeon 0000:00:01.0: fence driver on ring 6 use gpu 
>> addr 0x0000000030000c18
>> [   13.884502] radeon 0000:00:01.0: fence driver on ring 7 use gpu 
>> addr 0x0000000030000c1c
>> [   13.884503] radeon 0000:00:01.0: fence driver on ring 1 use gpu 
>> addr 0x0000000030000c04
>> [   13.884505] radeon 0000:00:01.0: fence driver on ring 2 use gpu 
>> addr 0x0000000030000c08
>> [   13.884506] radeon 0000:00:01.0: fence driver on ring 3 use gpu 
>> addr 0x0000000030000c0c
>> [   13.884507] radeon 0000:00:01.0: fence driver on ring 4 use gpu 
>> addr 0x0000000030000c10
>> [   13.884862] radeon 0000:00:01.0: radeon: MSI limited to 32-bit
>> [   13.884921] radeon 0000:00:01.0: radeon: using MSI.
>> [   13.885003] [drm] radeon: irq initialized.
>> [   13.903273] [drm] ring test on 0 succeeded in 3 usecs
>> [   13.903281] [drm] ring test on 3 succeeded in 4 usecs
>> [   13.903286] [drm] ring test on 4 succeeded in 3 usecs
>> [   13.949128] [drm] ring test on 5 succeeded in 2 usecs
>> [   13.968988] [drm] UVD initialized successfully.
>> [   14.078221] [drm] ring test on 6 succeeded in 17 usecs
>> [   14.078234] [drm] ring test on 7 succeeded in 3 usecs
>> [   14.078236] [drm] VCE initialized successfully.
>> [   14.078314] snd_hda_intel 0000:00:01.1: bound 0000:00:01.0 (ops 
>> radeon_audio_component_bind_ops [radeon])
>> [   14.078502] [drm] ib test on ring 0 succeeded in 0 usecs
>> [   14.078555] [drm] ib test on ring 3 succeeded in 0 usecs
>> [   14.078606] [drm] ib test on ring 4 succeeded in 0 usecs
>> [   14.153378] mc: Linux media interface: v0.10
>> [   14.593759] usb 1-3: dvb_usb_v2: found a 'Realtek RTL2832U 
>> reference design' in warm state
>> [   14.614227] [drm] ib test on ring 5 succeeded
>> [   14.625865] usb 1-3: dvb_usb_v2: will pass the complete MPEG2 
>> transport stream to the software demuxer
>> [   14.625885] dvbdev: DVB: registering new adapter (Realtek RTL2832U 
>> reference design)
>> [   14.625889] usb 1-3: media controller created
>> [   14.627064] dvbdev: dvb_create_media_entity: media entity 
>> 'dvb-demux' registered.
>> [   14.801142] i2c i2c-5: Added multiplexed i2c bus 6
>> [   14.801149] rtl2832 5-0010: Realtek RTL2832 successfully attached
>> [   14.801176] usb 1-3: DVB: registering adapter 0 frontend 0 
>> (Realtek RTL2832 (DVB-T))...
>> [   14.801189] dvbdev: dvb_create_media_entity: media entity 'Realtek 
>> RTL2832 (DVB-T)' registered.
>> [   14.957783] i2c i2c-6: fc0012: Fitipower FC0012 successfully 
>> identified
>> [   15.158461] [drm] ib test on ring 6 succeeded
>> [   15.178787] videodev: Linux video capture interface: v2.00
>> [   15.460709] rtl2832_sdr rtl2832_sdr.1.auto: Registered as swradio0
>> [   15.460715] rtl2832_sdr rtl2832_sdr.1.auto: Realtek RTL2832 SDR 
>> attached
>> [   15.460718] rtl2832_sdr rtl2832_sdr.1.auto: SDR API is still 
>> slightly experimental and functionality changes may follow
>> [   15.477759] usb 1-3: dvb_usb_v2: 'Realtek RTL2832U reference 
>> design' successfully initialized and connected
>> [   15.477878] usbcore: registered new interface driver dvb_usb_rtl28xxu
>> [   15.670413] [drm] ib test on ring 7 succeeded
>> [   15.671111] BUG: kernel NULL pointer dereference, address: 
>> 0000000000000050
>> [   15.671114] #PF: supervisor read access in kernel mode
>> [   15.671117] #PF: error_code(0x0000) - not-present page
>> [   15.671119] PGD 0 P4D 0
>> [   15.671123] Oops: Oops: 0000 [#1] PREEMPT_RT SMP NOPTI
>> [   15.671127] CPU: 2 UID: 0 PID: 437 Comm: udevd Not tainted 
>> 6.12.0-rc1 #6131
>> [   15.671132] Hardware name: Gigabyte Technology Co., Ltd. To be 
>> filled by O.E.M./F2A78M-HD2, BIOS F2 05/28/2014
>> [   15.671134] RIP: 0010:drm_dp_aux_register+0x59/0x110 
>> [drm_display_helper]
>> [   15.671164] Code: 86 c0 48 85 f6 48 89 83 b8 00 00 00 74 1c 48 8d 
>> bb b4 03 00 00 ba 30 00 00 00 e8 52 35 bc c7 48 8d 7b 08 5b 5d e9 37 
>> 31 93 c7 <48> 8b 70 50 48 85 f6 75 db 48 8b 30 eb d6 48 8d ab 88 04 
>> 00 00 48
>> [   15.671167] RSP: 0018:ffffb37f80e33960 EFLAGS: 00010246
>> [   15.671170] RAX: 0000000000000000 RBX: ffff892d407ee508 RCX: 
>> ffffffffc09b3bc0
>> [   15.671172] RDX: ffffffffc0869e40 RSI: 0000000000000000 RDI: 
>> ffff892d407ee9f0
>> [   15.671174] RBP: ffff892d407ee9f0 R08: ffff892d42fb8008 R09: 
>> 00000000c0c0c0c0
>> [   15.671176] R10: 0000000000000000 R11: 0000000000000001 R12: 
>> ffff892d5b64af50
>> [   15.671178] R13: ffff892d5b64b092 R14: ffff892d5b64af2e R15: 
>> 0000000000000018
>> [   15.671181] FS:  00007f066d882840(0000) GS:ffff89306f900000(0000) 
>> knlGS:0000000000000000
>> [   15.671183] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
>> [   15.671185] CR2: 0000000000000050 CR3: 00000001047a6000 CR4: 
>> 00000000000406f0
>> [   15.671188] Call Trace:
>> [   15.671190]  <TASK>
>> [   15.671192]  ? __die_body.cold+0x19/0x1e
>> [   15.671200]  ? page_fault_oops+0xa8/0x230
>> [   15.671206]  ? drm_dp_aux_register+0x59/0x110 [drm_display_helper]
>> [   15.671227]  ? search_module_extables+0x4f/0x90
>> [   15.671233]  ? fixup_exception+0x36/0x2f0
>> [   15.671239]  ? exc_page_fault+0x88/0x1b0
>> [   15.671244]  ? asm_exc_page_fault+0x22/0x30
>> [   15.671251]  ? __pfx_radeon_dp_aux_transfer_atom+0x10/0x10 [radeon]
>> [   15.671437]  ? drm_dp_aux_register+0x59/0x110 [drm_display_helper]
>> [   15.671463]  radeon_dp_aux_init+0x91/0xc0 [radeon]
>> [   15.671634] 
>> radeon_get_atom_connector_info_from_object_table+0x58e/0x880 [radeon]
>> [   15.671764]  ? 
>> radeon_get_atom_connector_info_from_supported_devices_table+0x5cf/0x600 
>> [radeon]
>> [   15.671895]  ? kstrdup+0x4c/0x70
>> [   15.671902]  ? __kmalloc_noprof+0x24d/0x340
>> [   15.671908]  radeon_modeset_init+0x375/0x470 [radeon]
>> [   15.672050]  ? radeon_device_init+0x667/0xb40 [radeon]
>> [   15.672179]  radeon_driver_load_kms+0xc2/0x260 [radeon]
>> [   15.672308]  radeon_pci_probe+0xff/0x170 [radeon]
>> [   15.672436]  pci_device_probe+0xbe/0x1a0
>> [   15.672441]  really_probe+0xde/0x350
>> [   15.672447]  ? pm_runtime_barrier+0x61/0xb0
>> [   15.672452]  ? __pfx___driver_attach+0x10/0x10
>> [   15.672457]  __driver_probe_device+0x78/0x110
>> [   15.672462]  driver_probe_device+0x2d/0xc0
>> [   15.672467]  __driver_attach+0xc9/0x1c0
>> [   15.672472]  bus_for_each_dev+0x6a/0xb0
>> [   15.672476]  ? migrate_enable+0xbf/0xf0
>> [   15.672480]  bus_add_driver+0x139/0x220
>> [   15.672485]  driver_register+0x6e/0xc0
>> [   15.672491]  ? __pfx_radeon_module_init+0x10/0x10 [radeon]
>> [   15.672616]  do_one_initcall+0x42/0x210
>> [   15.672622]  ? __kmalloc_cache_noprof+0x89/0x230
>> [   15.672627]  do_init_module+0x60/0x210
>> [   15.672631]  init_module_from_file+0x89/0xc0
>> [   15.672637]  __x64_sys_finit_module+0x142/0x390
>> [   15.672643]  do_syscall_64+0x47/0x110
>> [   15.672647]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
>> [   15.672653] RIP: 0033:0x7f066d6b3839
>> [   15.672657] Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 
>> 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 
>> 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d b7 85 0d 00 f7 d8 64 
>> 89 01 48
>> [   15.672659] RSP: 002b:00007ffead344b38 EFLAGS: 00000246 ORIG_RAX: 
>> 0000000000000139
>> [   15.672663] RAX: ffffffffffffffda RBX: 00005586f29e09b0 RCX: 
>> 00007f066d6b3839
>> [   15.672665] RDX: 0000000000000000 RSI: 00005586f29d08d0 RDI: 
>> 0000000000000011
>> [   15.672667] RBP: 0000000000000000 R08: 0000000000000000 R09: 
>> 00005586f29c0540
>> [   15.672669] R10: 00007f066d78cac0 R11: 0000000000000246 R12: 
>> 00005586f29d08d0
>> [   15.672671] R13: 0000000000020000 R14: 00005586f29d82e0 R15: 
>> 0000000000000000
>> [   15.672675]  </TASK>
>> [   15.672676] Modules linked in: rtl2832_sdr videobuf2_vmalloc 
>> videobuf2_memops videobuf2_v4l2 videobuf2_common videodev fc0012 
>> rtl2832 i2c_mux dvb_usb_rtl28xxu dvb_usb_v2 dvb_core mc 
>> snd_emu10k1_synth snd_emux_synth snd_seq_midi_emul snd_seq_virmidi 
>> radeon(+) snd_seq_midi snd_seq_midi_event snd_seq snd_emu10k1 
>> drm_ttm_helper ttm snd_hda_codec_hdmi drm_suballoc_helper 
>> snd_hda_intel snd_util_mem drm_display_helper snd_ac97_codec 
>> snd_intel_dspcfg snd_hda_codec snd_hda_core ac97_bus snd_hwdep 
>> snd_rawmidi snd_seq_device snd_pcm drm_kms_helper snd_timer 
>> edac_mce_amd k10temp sha512_ssse3 sha512_generic sha256_ssse3 
>> sha1_ssse3 drm aesni_intel snd gf128mul at24 crypto_simd cryptd 
>> soundcore acpi_cpufreq regmap_i2c emu10k1_gp gameport pcspkr evdev 
>> serio_raw i2c_algo_bit video sp5100_tco wmi button ext4 
>> crc32c_generic crc16 mbcache jbd2 hid_generic usbhid hid sg sr_mod 
>> cdrom sd_mod ata_generic crc32_pclmul firewire_ohci crc32c_intel 
>> firewire_core ahci i2c_piix4 crc_itu_t pata_atiixp i2c_smbus r8169 
>> libahci ohci_pci xhci_pci libata
>> [   15.672761]  realtek ohci_hcd ehci_pci xhci_hcd ehci_hcd 
>> mdio_devres scsi_mod scsi_common libphy usbcore usb_common
>> [   15.672773] CR2: 0000000000000050
>> [   15.672776] ---[ end trace 0000000000000000 ]---
>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)


^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2024-10-07 12:44 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-30 16:59 [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc Wu Hoi Pok
2024-06-30 16:59 ` [PATCH v3 1/6] drm/radeon: change variable name "dev" to "ddev" for consistency Wu Hoi Pok
2024-07-03  8:42   ` Thomas Zimmermann
2024-06-30 16:59 ` [PATCH v3 2/6] drm/radeon: remove load callback from kms_driver Wu Hoi Pok
2024-07-03  8:43   ` Thomas Zimmermann
2024-09-19 16:56   ` Arthur Marsh
2024-09-24  2:08     ` radeon ARUBA NULL pointer dereference Arthur Marsh
2024-09-24 12:20       ` Thomas Zimmermann
2024-09-24 12:42         ` Thomas Zimmermann
2024-09-24 14:22           ` Alex Deucher
2024-09-24 19:30             ` Ewan Milne
2024-09-25 18:13               ` Ewan Milne
2024-09-25  0:22             ` NULL pointer dereference after ib test on ring 7 succeeded Arthur Marsh
2024-09-25  8:02               ` Thomas Zimmermann
2024-09-30 15:25                 ` NULL pointer dereference with kernel 6.12.0-rc1 and ARUBA GPU Arthur Marsh
2024-09-30 17:54                   ` Christian König
2024-10-07 12:44                     ` Thomas Zimmermann
2024-06-30 16:59 ` [PATCH v3 3/6] drm/radeon: use variable flags as parameter Wu Hoi Pok
2024-07-03  8:44   ` Thomas Zimmermann
2024-06-30 16:59 ` [PATCH v3 4/6] drm/radeon: add helper rdev_to_drm(rdev) Wu Hoi Pok
2024-07-03  8:44   ` Thomas Zimmermann
2024-06-30 16:59 ` [PATCH v3 5/6] drm/radeon: change rdev->ddev to rdev_to_drm(rdev) Wu Hoi Pok
2024-07-03  8:46   ` Thomas Zimmermann
2024-06-30 16:59 ` [PATCH v3 6/6] drm/radeon: change drm_dev_alloc to devm_drm_dev_alloc Wu Hoi Pok
2024-07-03  8:47   ` Thomas Zimmermann
2024-07-08 20:04     ` Alex Deucher
2024-07-03  8:52 ` [PATCH v3 0/6] drm/radeon: remove load callback & drm_dev_alloc Thomas Zimmermann
2024-07-04  4:58   ` Hoi Pok Wu
2024-07-04 13:02     ` Christian König

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox