drm/tilcdc: WARN if CRTC is touched without CRTC lock
authorJyri Sarha <jsarha@ti.com>
Tue, 6 Sep 2016 14:25:08 +0000 (17:25 +0300)
committerJyri Sarha <jsarha@ti.com>
Wed, 7 Sep 2016 12:54:43 +0000 (15:54 +0300)
WARN if CRTC is touched without CRTC lock. The crtc functions should
not be called simultaneously from multiple threads. Having the DRM
CRTC lock should take care of that.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/tilcdc/tilcdc_crtc.c

index c1cbabc..639821f 100644 (file)
@@ -153,6 +153,8 @@ static void tilcdc_crtc_enable(struct drm_crtc *crtc)
        struct drm_device *dev = crtc->dev;
        struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
 
+       WARN_ON(!drm_modeset_is_locked(&crtc->mutex));
+
        if (tilcdc_crtc->enabled)
                return;
 
@@ -177,6 +179,8 @@ void tilcdc_crtc_disable(struct drm_crtc *crtc)
        struct drm_device *dev = crtc->dev;
        struct tilcdc_drm_private *priv = dev->dev_private;
 
+       WARN_ON(!drm_modeset_is_locked(&crtc->mutex));
+
        if (!tilcdc_crtc->enabled)
                return;
 
@@ -249,6 +253,8 @@ int tilcdc_crtc_update_fb(struct drm_crtc *crtc,
        struct drm_device *dev = crtc->dev;
        unsigned long flags;
 
+       WARN_ON(!drm_modeset_is_locked(&crtc->mutex));
+
        if (tilcdc_crtc->event) {
                dev_err(dev->dev, "already pending page flip!\n");
                return -EBUSY;
@@ -353,6 +359,8 @@ static void tilcdc_crtc_mode_set_nofb(struct drm_crtc *crtc)
        struct drm_display_mode *mode = &crtc->state->adjusted_mode;
        struct drm_framebuffer *fb = crtc->primary->state->fb;
 
+       WARN_ON(!drm_modeset_is_locked(&crtc->mutex));
+
        if (WARN_ON(!info))
                return;