Commit 16ef3dfe authored by Daniel Vetter's avatar Daniel Vetter Committed by Rob Clark

omapdrm: only take crtc->mutex in crtc callbacks

Omapdrm doesn't do anything nefarious with crtc load detection or has
any shared resources, so this is enough. We also need to adjust the
WARN_ON.
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
parent 8bb0daff
...@@ -274,17 +274,16 @@ static void page_flip_worker(struct work_struct *work) ...@@ -274,17 +274,16 @@ static void page_flip_worker(struct work_struct *work)
struct omap_crtc *omap_crtc = struct omap_crtc *omap_crtc =
container_of(work, struct omap_crtc, page_flip_work); container_of(work, struct omap_crtc, page_flip_work);
struct drm_crtc *crtc = &omap_crtc->base; struct drm_crtc *crtc = &omap_crtc->base;
struct drm_device *dev = crtc->dev;
struct drm_display_mode *mode = &crtc->mode; struct drm_display_mode *mode = &crtc->mode;
struct drm_gem_object *bo; struct drm_gem_object *bo;
drm_modeset_lock_all(dev); mutex_lock(&crtc->mutex);
omap_plane_mode_set(omap_crtc->plane, crtc, crtc->fb, omap_plane_mode_set(omap_crtc->plane, crtc, crtc->fb,
0, 0, mode->hdisplay, mode->vdisplay, 0, 0, mode->hdisplay, mode->vdisplay,
crtc->x << 16, crtc->y << 16, crtc->x << 16, crtc->y << 16,
mode->hdisplay << 16, mode->vdisplay << 16, mode->hdisplay << 16, mode->vdisplay << 16,
vblank_cb, crtc); vblank_cb, crtc);
drm_modeset_unlock_all(dev); mutex_unlock(&crtc->mutex);
bo = omap_framebuffer_bo(crtc->fb, 0); bo = omap_framebuffer_bo(crtc->fb, 0);
drm_gem_object_unreference_unlocked(bo); drm_gem_object_unreference_unlocked(bo);
...@@ -417,7 +416,7 @@ static void apply_worker(struct work_struct *work) ...@@ -417,7 +416,7 @@ static void apply_worker(struct work_struct *work)
* the callbacks and list modification all serialized * the callbacks and list modification all serialized
* with respect to modesetting ioctls from userspace. * with respect to modesetting ioctls from userspace.
*/ */
drm_modeset_lock_all(dev); mutex_lock(&crtc->mutex);
dispc_runtime_get(); dispc_runtime_get();
/* /*
...@@ -462,16 +461,15 @@ static void apply_worker(struct work_struct *work) ...@@ -462,16 +461,15 @@ static void apply_worker(struct work_struct *work)
out: out:
dispc_runtime_put(); dispc_runtime_put();
drm_modeset_unlock_all(dev); mutex_unlock(&crtc->mutex);
} }
int omap_crtc_apply(struct drm_crtc *crtc, int omap_crtc_apply(struct drm_crtc *crtc,
struct omap_drm_apply *apply) struct omap_drm_apply *apply)
{ {
struct omap_crtc *omap_crtc = to_omap_crtc(crtc); struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
struct drm_device *dev = crtc->dev;
WARN_ON(!mutex_is_locked(&dev->mode_config.mutex)); WARN_ON(!mutex_is_locked(&crtc->mutex));
/* no need to queue it again if it is already queued: */ /* no need to queue it again if it is already queued: */
if (apply->queued) if (apply->queued)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment