path: root/drivers/gpu/drm/drm_drv.c
diff options
authorDaniel Vetter <>2019-09-17 14:09:35 +0200
committerDaniel Vetter <>2019-09-18 11:27:18 +0200
commite0f32f78e51b9989ee89f608fd0dd10e9c230652 (patch)
tree1366fbedc6657f40ab97bbc4b87db52286c850b9 /drivers/gpu/drm/drm_drv.c
parent2472518e44eee3a45bd436a4162046790b74767a (diff)
drm/kms: Duct-tape for mode object lifetime checksdrm-misc-next-fixes-2019-09-18
commit 4f5368b5541a902f6596558b05f5c21a9770dd32 Author: Daniel Vetter <> Date: Fri Jun 14 08:17:23 2019 +0200 drm/kms: Catch mode_object lifetime errors uncovered a bit a mess in dp drivers. Most drivers (from a quick look, all except i915) register all the dp stuff in their init code, which is too early. With CONFIG_DRM_DP_AUX_CHARDEV this will blow up, because drm_dp_aux_register tries to add a child to a device in sysfs (the connector) which doesn't even exist yet. No one seems to have cared thus far. But with the above change I also moved the setting of dev->registered after the ->load callback, in an attempt to keep old drivers from hitting any WARN_ON backtraces. But that moved radeon.ko from the "working, by accident" to "now also broken" category. Since this is a huge mess I figured a revert would be simplest. But this check has already caught issues in i915: commit 1b9bd09630d4db4827cc04d358a41a16a6bc2cb0 Author: Ville Syrjälä <> Date: Tue Aug 20 19:16:57 2019 +0300 drm/i915: Do not create a new max_bpc prop for MST connectors Hence I'd like to retain it. Fix the radeon regression by moving the setting of dev->registered back to were it was, and stop the backtraces with an explicit check for dev->driver->load. Everyone else will stay as broken with CONFIG_DRM_DP_AUX_CHARDEV. The next patch will improve the kerneldoc and add a todo entry for this. Fixes: 4f5368b5541a ("drm/kms: Catch mode_object lifetime errors") Cc: Sean Paul <> Cc: Maarten Lankhorst <> Reported-by: Michel Dänzer <> Reviewed-by: Michel Dänzer <> Tested-by: Michel Dänzer <> Cc: Michel Dänzer <> Signed-off-by: Daniel Vetter <> Link:
Diffstat (limited to 'drivers/gpu/drm/drm_drv.c')
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index c456c3d3def2..769feefeeeef 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -976,14 +976,14 @@ int drm_dev_register(struct drm_device *dev, unsigned long flags)
if (ret)
goto err_minors;
+ dev->registered = true;
if (dev->driver->load) {
ret = dev->driver->load(dev, flags);
if (ret)
goto err_minors;
- dev->registered = true;
if (drm_core_check_feature(dev, DRIVER_MODESET))