[PATCH] drm: Try to acquire modeset lock on panic or sysrq
David Herrmann
dh.herrmann at gmail.com
Wed Mar 26 05:33:24 PDT 2014
Hi
On Tue, Mar 25, 2014 at 1:25 PM, Thierry Reding
<thierry.reding at gmail.com> 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>
> ---
> 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;
Reviewed-by: David Herrmann <dh.herrmann at gmail.com>
Thanks
David
> continue;
> + }
>
> ret = drm_fb_helper_restore_fbdev_mode(helper);
> if (ret)
> error = true;
> +
> + mutex_unlock(&dev->mode_config.mutex);
> }
> return error;
> }
> --
> 1.9.1
>
More information about the dri-devel
mailing list