On Tue, Mar 25, 2014 at 01:25:15PM +0100, Thierry Reding wrote: > From: Thierry Reding <treding at nvidia.com> > > Commit 62ff94a54921 "drm/crtc-helper: remove LOCKING from kerneldoc" > causes drm_helper_crtc_in_use() and drm_helper_encoder_in_use() to > complain loudly during a kernel panic or sysrq processing. This is > caused by nobody acquiring the modeset lock in these code paths. > > This patch fixes this by trying to acquire the modeset lock for each > FB helper that's forced to kernel mode. If the lock can't be acquired, > it's likely that somebody else is performing a modeset. However, doing > another modeset concurrently might make things even worse, so the safe > option is to simply bail out in that case. > > Signed-off-by: Thierry Reding <treding at nvidia.com>
Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch> I guess we should also try to grab the crtc locks, but blocking ongoing pageflips shouldn't be too harmful. Otherwise I think this should help a bit in some of the hilarious failures I've seen when kms itself blows up. -Daniel > --- > drivers/gpu/drm/drm_fb_helper.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c > index 9580393628a0..afce7cbd5149 100644 > --- a/drivers/gpu/drm/drm_fb_helper.c > +++ b/drivers/gpu/drm/drm_fb_helper.c > @@ -325,12 +325,21 @@ static bool drm_fb_helper_force_kernel_mode(void) > return false; > > list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) { > - if (helper->dev->switch_power_state == DRM_SWITCH_POWER_OFF) > + struct drm_device *dev = helper->dev; > + > + if (dev->switch_power_state == DRM_SWITCH_POWER_OFF) > + continue; > + > + if (!mutex_trylock(&dev->mode_config.mutex)) { > + error = true; > continue; > + } > > ret = drm_fb_helper_restore_fbdev_mode(helper); > if (ret) > error = true; > + > + mutex_unlock(&dev->mode_config.mutex); > } > return error; > } > -- > 1.9.1 > -- Daniel Vetter Software Engineer, Intel Corporation +41 (0) 79 365 57 48 - http://blog.ffwll.ch