On Wednesday, March 22, 2017 10:50:52 PM EDT Daniel Vetter wrote:
No need to grab both plane and crtc locks at the same time, we can do them one after the other. If userspace races it'll get what it deserves either way.
This removes another user of drm_modeset_lock_crtc. There's only one left.
Signed-off-by: Daniel Vetter daniel.vetter@intel.com
drivers/gpu/drm/drm_crtc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c index 660b4c8715de..df1ff0b8818b 100644 --- a/drivers/gpu/drm/drm_crtc.c +++ b/drivers/gpu/drm/drm_crtc.c @@ -406,16 +406,18 @@ int drm_mode_getcrtc(struct drm_device *dev, if (!crtc) return -ENOENT;
- drm_modeset_lock_crtc(crtc, crtc->primary); crtc_resp->gamma_size = crtc->gamma_size;
drm_modeset_lock(&crtc->primary->mutex, NULL); if (crtc->primary->state && crtc->primary->state->fb) crtc_resp->fb_id = crtc->primary->state->fb->base.id; else if (!crtc->primary->state && crtc->primary->fb) crtc_resp->fb_id = crtc->primary->fb->base.id; else crtc_resp->fb_id = 0;
drm_modeset_unlock(&crtc->primary->mutex);
drm_modeset_lock(&crtc->mutex, NULL); if (crtc->state) { crtc_resp->x = crtc->primary->state->src_x >> 16; crtc_resp->y = crtc->primary->state->src_y >> 16;
What about crtc->primary here? Shouldn't that also be locked with the crtc-
primary->mutex or do we treat state differently? Still not 100% on the exact
locking semantics.
Harry
@@ -437,7 +439,7 @@ int drm_mode_getcrtc(struct drm_device *dev, crtc_resp->mode_valid = 0; } }
- drm_modeset_unlock_crtc(crtc);
drm_modeset_unlock(&crtc->mutex);
return 0;
}