drm: Fixup locking WARNINGs in drm_mode_config_reset
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Wed, 29 Jul 2015 06:32:43 +0000 (08:32 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 6 Aug 2015 12:13:02 +0000 (14:13 +0200)
With

commit 7a3f3d6667f5f9ffd1517f6b21d64bbf5312042c
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Thu Jul 9 23:44:28 2015 +0200

    drm: Check locking in drm_for_each_connector

we started checking the locking in drm_for_each_connector but somehow
I totally missed drm_mode_config_reset. There's no problem there since
this function should only be called in single-threaded contexts
(driver load or resume), so just wrap the loop with the right lock.

v2: Drink coffee and all that ...

Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reported-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Tested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
drivers/gpu/drm/drm_crtc.c

index dfac394d060207d66121400211f580ff86d7e5cf..7d02e32b4e94555074021f50ce5eaace9aa3d6fe 100644 (file)
@@ -5273,12 +5273,14 @@ void drm_mode_config_reset(struct drm_device *dev)
                if (encoder->funcs->reset)
                        encoder->funcs->reset(encoder);
 
+       mutex_lock(&dev->mode_config.mutex);
        drm_for_each_connector(connector, dev) {
                connector->status = connector_status_unknown;
 
                if (connector->funcs->reset)
                        connector->funcs->reset(connector);
        }
+       mutex_unlock(&dev->mode_config.mutex);
 }
 EXPORT_SYMBOL(drm_mode_config_reset);