aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_irq.c
diff options
context:
space:
mode:
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>2017-04-04 12:52:21 -0400
committerDaniel Stone <daniels@collabora.com>2017-04-04 15:59:12 -0400
commit5db06a8a98f515f67446a69c57577c4c363ec65d (patch)
treed9c5720e05dd7727bb2ed4ca2a1e8504be88d450 /drivers/gpu/drm/drm_irq.c
parent1bbfe9d1a315bb573d4f10bbf443b68b5ddac473 (diff)
drm: Pass CRTC ID in userspace vblank events
With the atomic API, it is possible that a single commit affects multiple crtcs. If the user requests an event with that commit, one event will be sent for each CRTC, but it is not possible to distinguish which crtc an event is for in user space. To solve this, the reserved field in struct drm_vblank_event is repurposed to include the crtc_id which the event is for. The DRM_CAP_CRTC_IN_VBLANK_EVENT is added to allow userspace to query if the crtc field will be set properly. [daniels: Rebased, using Maarten's forward-port.] Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com> Signed-off-by: Daniel Stone <daniels@collabora.com> Cc: Maarten Lankhorst <maarten.lankhorst@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170404165221.28240-2-daniels@collabora.com
Diffstat (limited to 'drivers/gpu/drm/drm_irq.c')
-rw-r--r--drivers/gpu/drm/drm_irq.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
index dac1b2593cb1..8c866cac62dd 100644
--- a/drivers/gpu/drm/drm_irq.c
+++ b/drivers/gpu/drm/drm_irq.c
@@ -1026,6 +1026,7 @@ void drm_crtc_arm_vblank_event(struct drm_crtc *crtc,
1026 1026
1027 e->pipe = pipe; 1027 e->pipe = pipe;
1028 e->event.sequence = drm_vblank_count(dev, pipe); 1028 e->event.sequence = drm_vblank_count(dev, pipe);
1029 e->event.crtc_id = crtc->base.id;
1029 list_add_tail(&e->base.link, &dev->vblank_event_list); 1030 list_add_tail(&e->base.link, &dev->vblank_event_list);
1030} 1031}
1031EXPORT_SYMBOL(drm_crtc_arm_vblank_event); 1032EXPORT_SYMBOL(drm_crtc_arm_vblank_event);
@@ -1056,6 +1057,7 @@ void drm_crtc_send_vblank_event(struct drm_crtc *crtc,
1056 now = get_drm_timestamp(); 1057 now = get_drm_timestamp();
1057 } 1058 }
1058 e->pipe = pipe; 1059 e->pipe = pipe;
1060 e->event.crtc_id = crtc->base.id;
1059 send_vblank_event(dev, e, seq, &now); 1061 send_vblank_event(dev, e, seq, &now);
1060} 1062}
1061EXPORT_SYMBOL(drm_crtc_send_vblank_event); 1063EXPORT_SYMBOL(drm_crtc_send_vblank_event);