* [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