From: daniel.vetter@ffwll.ch (Daniel Vetter) To: linux-snps-arc@lists.infradead.org Subject: [PATCH 03/27] drm/arc: Actually bother with handling atomic events. Date: Wed, 8 Jun 2016 14:18:55 +0200 [thread overview] Message-ID: <1465388359-8070-3-git-send-email-daniel.vetter@ffwll.ch> (raw) In-Reply-To: <1465388359-8070-1-git-send-email-daniel.vetter@ffwll.ch> The drm core has a nice ready-made helper for exactly the simple case where it should fire on the next vblank. Note that arming the vblank event in _begin is probably too early, and might easily result in the vblank firing too early, before the new set of planes are actually disabled. But that's kinda a minor issue compared to just outright hanging userspace. v2: Be more robust and either arm, when the CRTC is on, or just send the event out right away. Cc: Carlos Palminha <palminha at synopsys.com> Cc: Alexey Brodkin <abrodkin at synopsys.com> Cc: linux-snps-arc at lists.infradead.org Signed-off-by: Daniel Vetter <daniel.vetter at intel.com> --- drivers/gpu/drm/arc/arcpgu_crtc.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c index d5ca0c280e68..c9f183b11df9 100644 --- a/drivers/gpu/drm/arc/arcpgu_crtc.c +++ b/drivers/gpu/drm/arc/arcpgu_crtc.c @@ -145,16 +145,17 @@ static int arc_pgu_crtc_atomic_check(struct drm_crtc *crtc, static void arc_pgu_crtc_atomic_begin(struct drm_crtc *crtc, struct drm_crtc_state *state) { - struct arcpgu_drm_private *arcpgu = crtc_to_arcpgu_priv(crtc); - unsigned long flags; - - if (crtc->state->event) { - struct drm_pending_vblank_event *event = crtc->state->event; + struct drm_pending_vblank_event *event = crtc->state->event; + if (event) { crtc->state->event = NULL; - event->pipe = drm_crtc_index(crtc); - WARN_ON(drm_crtc_vblank_get(crtc) != 0); + spin_lock_irq(&crtc->dev->event_lock); + if (drm_crtc_vblank_get(crtc) == 0) + drm_crtc_arm_vblank_event(crtc, event); + else + drm_crtc_send_vblank_event(crtc, event); + spin_unlock_irq(&crtc->dev->event_lock); } } -- 2.8.1
WARNING: multiple messages have this Message-ID (diff)
From: Daniel Vetter <daniel.vetter@ffwll.ch> To: DRI Development <dri-devel@lists.freedesktop.org> Cc: Daniel Vetter <daniel.vetter@ffwll.ch>, linux-snps-arc@lists.infradead.org, Alexey Brodkin <abrodkin@synopsys.com>, Carlos Palminha <palminha@synopsys.com>, Daniel Vetter <daniel.vetter@intel.com> Subject: [PATCH 03/27] drm/arc: Actually bother with handling atomic events. Date: Wed, 8 Jun 2016 14:18:55 +0200 [thread overview] Message-ID: <1465388359-8070-3-git-send-email-daniel.vetter@ffwll.ch> (raw) In-Reply-To: <1465388359-8070-1-git-send-email-daniel.vetter@ffwll.ch> The drm core has a nice ready-made helper for exactly the simple case where it should fire on the next vblank. Note that arming the vblank event in _begin is probably too early, and might easily result in the vblank firing too early, before the new set of planes are actually disabled. But that's kinda a minor issue compared to just outright hanging userspace. v2: Be more robust and either arm, when the CRTC is on, or just send the event out right away. Cc: Carlos Palminha <palminha@synopsys.com> Cc: Alexey Brodkin <abrodkin@synopsys.com> Cc: linux-snps-arc@lists.infradead.org Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> --- drivers/gpu/drm/arc/arcpgu_crtc.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c index d5ca0c280e68..c9f183b11df9 100644 --- a/drivers/gpu/drm/arc/arcpgu_crtc.c +++ b/drivers/gpu/drm/arc/arcpgu_crtc.c @@ -145,16 +145,17 @@ static int arc_pgu_crtc_atomic_check(struct drm_crtc *crtc, static void arc_pgu_crtc_atomic_begin(struct drm_crtc *crtc, struct drm_crtc_state *state) { - struct arcpgu_drm_private *arcpgu = crtc_to_arcpgu_priv(crtc); - unsigned long flags; - - if (crtc->state->event) { - struct drm_pending_vblank_event *event = crtc->state->event; + struct drm_pending_vblank_event *event = crtc->state->event; + if (event) { crtc->state->event = NULL; - event->pipe = drm_crtc_index(crtc); - WARN_ON(drm_crtc_vblank_get(crtc) != 0); + spin_lock_irq(&crtc->dev->event_lock); + if (drm_crtc_vblank_get(crtc) == 0) + drm_crtc_arm_vblank_event(crtc, event); + else + drm_crtc_send_vblank_event(crtc, event); + spin_unlock_irq(&crtc->dev->event_lock); } } -- 2.8.1 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2016-06-08 12:18 UTC|newest] Thread overview: 120+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-06-08 12:18 [PATCH 01/27] drm/atomic-helper: Massage swap_state signature somewhat Daniel Vetter 2016-06-08 12:18 ` [PATCH 02/27] drm/arc: Nuke event_list Daniel Vetter 2016-06-08 12:18 ` Daniel Vetter 2016-06-08 14:13 ` Maarten Lankhorst 2016-06-08 14:13 ` Maarten Lankhorst 2016-06-08 12:18 ` Daniel Vetter [this message] 2016-06-08 12:18 ` [PATCH 03/27] drm/arc: Actually bother with handling atomic events Daniel Vetter 2016-06-08 14:14 ` Maarten Lankhorst 2016-06-08 14:14 ` Maarten Lankhorst 2016-06-08 14:30 ` Daniel Vetter 2016-06-08 14:30 ` Daniel Vetter 2016-06-09 10:54 ` Alexey Brodkin 2016-06-09 10:54 ` Alexey Brodkin 2016-06-09 12:26 ` Daniel Vetter 2016-06-09 12:26 ` Daniel Vetter 2016-06-09 12:48 ` Alexey Brodkin 2016-06-09 12:48 ` Alexey Brodkin 2016-06-09 13:23 ` Daniel Vetter 2016-06-09 13:23 ` Daniel Vetter 2016-06-09 13:27 ` Alexey Brodkin 2016-06-09 13:27 ` Alexey Brodkin 2016-06-09 13:52 ` Daniel Vetter 2016-06-09 13:52 ` Daniel Vetter 2016-06-09 14:29 ` Alexey Brodkin 2016-06-09 14:29 ` Alexey Brodkin 2016-06-09 14:31 ` Daniel Vetter 2016-06-09 14:31 ` Daniel Vetter 2016-06-09 14:37 ` Daniel Vetter 2016-06-09 14:37 ` Daniel Vetter 2016-06-10 13:23 ` Alexey Brodkin 2016-06-10 13:23 ` Alexey Brodkin 2016-06-10 14:19 ` Daniel Vetter 2016-06-10 14:19 ` Daniel Vetter 2016-06-10 14:54 ` Daniel Vetter 2016-06-10 14:54 ` Daniel Vetter 2016-06-10 15:01 ` Alexey Brodkin 2016-06-10 15:01 ` Alexey Brodkin 2016-06-10 15:09 ` Daniel Vetter 2016-06-10 15:09 ` Daniel Vetter 2016-06-10 15:16 ` Alexey Brodkin 2016-06-10 15:16 ` Alexey Brodkin 2016-06-08 12:18 ` [PATCH 04/27] drm/fsl-du: Implement some semblance of vblank event handling Daniel Vetter 2016-06-08 14:15 ` Maarten Lankhorst 2016-06-08 12:18 ` [PATCH 05/27] drm/hisilicon: " Daniel Vetter 2016-06-08 14:17 ` Maarten Lankhorst 2016-06-08 14:32 ` Daniel Vetter 2016-06-08 12:18 ` [PATCH 06/27] drm/sun4i: " Daniel Vetter 2016-06-09 9:03 ` Maarten Lankhorst 2017-01-02 12:23 ` Laurent Pinchart 2016-06-08 12:18 ` [PATCH 07/27] drm/atomic: kerneldoc for drm_atomic_crtc_needs_modeset Daniel Vetter 2016-06-08 14:11 ` Liviu Dudau 2016-06-09 9:03 ` Maarten Lankhorst 2016-06-08 12:19 ` [PATCH 08/27] drm/atomic: Add struct drm_crtc_commit to track async updates Daniel Vetter 2016-06-08 14:41 ` Maarten Lankhorst 2016-06-09 10:09 ` Liviu Dudau 2016-06-08 12:19 ` [PATCH 09/27] drm/atomic-helper: roll out commit synchronization Daniel Vetter 2016-06-08 14:40 ` Maarten Lankhorst 2016-06-08 15:15 ` [PATCH] " Daniel Vetter 2017-01-02 12:09 ` Laurent Pinchart 2017-01-04 8:49 ` Daniel Vetter 2016-06-09 14:22 ` [PATCH 09/27] " Maarten Lankhorst 2016-06-08 12:19 ` [PATCH 10/27] drm/atomic-helper: nonblocking commit support Daniel Vetter 2016-06-08 14:44 ` Maarten Lankhorst 2016-06-08 15:05 ` Daniel Vetter 2016-06-08 15:54 ` Chris Wilson 2016-06-08 16:19 ` Daniel Vetter 2016-06-08 16:22 ` Daniel Vetter 2016-06-08 12:19 ` [PATCH 11/27] drm/arc: Implement nonblocking commit correctly Daniel Vetter 2016-06-08 12:19 ` Daniel Vetter 2016-06-08 14:27 ` Maarten Lankhorst 2016-06-08 14:27 ` Maarten Lankhorst 2016-06-08 12:19 ` [PATCH 12/27] drm/hdlcd: Use helper support for nonblocking commits Daniel Vetter 2016-06-08 12:19 ` [PATCH 13/27] drm/i915: Signal drm events for atomic Daniel Vetter 2016-06-08 14:25 ` Maarten Lankhorst 2016-06-08 12:19 ` [PATCH 14/27] drm/i915: Roll out the helper nonblock tracking Daniel Vetter 2016-06-09 14:01 ` Maarten Lankhorst 2016-06-08 12:19 ` [PATCH 15/27] drm/i915: nonblocking commit Daniel Vetter 2016-06-09 14:03 ` Maarten Lankhorst 2016-06-09 14:40 ` Daniel Vetter 2016-06-08 12:19 ` [PATCH 16/27] drm/i915: Use atomic commits for legacy page_flips Daniel Vetter 2016-06-08 14:24 ` Chris Wilson 2016-06-08 14:34 ` Daniel Vetter 2016-06-08 12:19 ` [PATCH 17/27] drm/i915: Move fb_bits updating later in atomic_commit Daniel Vetter 2016-06-08 12:19 ` [PATCH 18/27] drm/rockchip: Disarm vop->is_enabled Daniel Vetter 2016-06-08 12:19 ` [PATCH 19/27] drm/rockchip: Fix crtc_state->event signalling Daniel Vetter 2016-06-08 12:19 ` [PATCH 20/27] drm/rockchip: convert to helper nonblocking atomic commit Daniel Vetter 2016-06-08 12:19 ` [PATCH 21/27] drm/rockchip: Nuke pending event handling in preclose Daniel Vetter 2016-06-10 15:21 ` Daniel Vetter 2016-06-08 12:19 ` [PATCH 22/27] drm/virtio: Don't reinvent a flipping wheel Daniel Vetter 2016-06-09 22:07 ` [PATCH] " Daniel Vetter 2016-06-10 15:20 ` Daniel Vetter 2016-06-13 9:20 ` Gerd Hoffmann 2016-06-13 13:34 ` Daniel Vetter 2016-06-14 14:25 ` Gerd Hoffmann 2016-06-14 14:33 ` Daniel Vetter 2016-06-08 12:19 ` [PATCH 23/27] drm: Replace fb_helper->atomic with mode_config->atomic_commit Daniel Vetter 2016-06-08 12:36 ` Boris Brezillon 2016-06-12 9:01 ` Ying Liu 2016-06-13 7:58 ` Daniel Vetter 2016-06-13 9:26 ` Ying Liu 2016-06-13 14:01 ` Daniel Vetter 2016-06-20 5:55 ` Ying Liu 2016-06-20 13:26 ` Daniel Vetter 2016-06-08 12:19 ` [PATCH 24/27] drm: Resurrect atomic rmfb code Daniel Vetter 2016-07-13 10:15 ` Maarten Lankhorst 2016-07-13 10:56 ` Daniel Vetter 2016-06-08 12:19 ` [PATCH 25/27] drm/sti: Don't call drm_helper_disable_unused_functions Daniel Vetter 2016-06-08 12:19 ` [PATCH 26/27] drm/crtc-helper: disable_unused_functions really isn't for atomic Daniel Vetter 2016-06-08 22:36 ` Laurent Pinchart 2016-06-09 8:26 ` Daniel Vetter 2016-06-21 9:12 ` Laurent Pinchart 2016-06-21 9:46 ` Daniel Vetter 2016-06-09 22:14 ` [PATCH] drm/omapdrm: don't call drm_helper_disable_unused_functions Daniel Vetter 2016-06-09 22:50 ` Laurent Pinchart 2016-06-10 6:24 ` Tomi Valkeinen 2016-06-10 6:26 ` Tomi Valkeinen 2016-06-21 8:02 ` Daniel Vetter 2016-06-08 12:19 ` [PATCH 27/27] drm/atomic-helper: Annotate a bunch more RETURNS: sections Daniel Vetter 2016-06-08 14:11 ` [PATCH 01/27] drm/atomic-helper: Massage swap_state signature somewhat Maarten Lankhorst 2016-06-09 22:06 ` [PATCH] " Daniel Vetter
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1465388359-8070-3-git-send-email-daniel.vetter@ffwll.ch \ --to=daniel.vetter@ffwll.ch \ --cc=linux-snps-arc@lists.infradead.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.