From: daniel.vetter@ffwll.ch (Daniel Vetter) To: linux-snps-arc@lists.infradead.org Subject: [PATCH 14/26] drm/arc: Actually bother with handling atomic events. Date: Sun, 29 May 2016 20:35:11 +0200 [thread overview] Message-ID: <1464546923-13439-15-git-send-email-daniel.vetter@ffwll.ch> (raw) In-Reply-To: <1464546923-13439-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>, Intel Graphics Development <intel-gfx@lists.freedesktop.org>, Alexey Brodkin <abrodkin@synopsys.com>, Carlos Palminha <palminha@synopsys.com>, Daniel Vetter <daniel.vetter@intel.com>, linux-snps-arc@lists.infradead.org Subject: [PATCH 14/26] drm/arc: Actually bother with handling atomic events. Date: Sun, 29 May 2016 20:35:11 +0200 [thread overview] Message-ID: <1464546923-13439-15-git-send-email-daniel.vetter@ffwll.ch> (raw) In-Reply-To: <1464546923-13439-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
next prev parent reply other threads:[~2016-05-29 18:35 UTC|newest] Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-05-29 18:34 [PATCH 00/26] RFC: generic nonblocking support in the atomic helpers Daniel Vetter 2016-05-29 18:34 ` [PATCH 01/26] drm/atomic-helper: use for_each_*_in_state more Daniel Vetter 2016-05-30 12:17 ` Maarten Lankhorst 2016-05-30 15:02 ` Daniel Vetter 2016-05-29 18:34 ` [PATCH 02/26] drm/i915: Use drm_atomic_get_existing_plane_state Daniel Vetter 2016-05-30 13:10 ` [Intel-gfx] " Maarten Lankhorst 2016-05-29 18:35 ` [PATCH 03/26] drm/msm: Use for_each_*_in_state Daniel Vetter 2016-05-29 18:35 ` [PATCH 04/26] drm/rcar-du: " Daniel Vetter 2016-05-30 9:18 ` Laurent Pinchart 2016-05-30 9:58 ` Maarten Lankhorst 2016-05-30 14:54 ` [Intel-gfx] " Daniel Vetter 2016-06-02 22:54 ` Laurent Pinchart 2016-06-03 6:55 ` [Intel-gfx] " Daniel Vetter 2016-06-03 9:40 ` Laurent Pinchart 2016-06-03 9:45 ` Daniel Vetter 2016-06-03 9:50 ` Laurent Pinchart 2016-05-29 18:35 ` [PATCH 05/26] drm/vc4: Use for_each_plane_in_state Daniel Vetter 2016-05-29 18:35 ` [PATCH 06/26] drm/atomic: Add __drm_atomic_get_current_plane_state Daniel Vetter 2016-05-30 11:42 ` [Intel-gfx] " Maarten Lankhorst 2016-05-30 15:05 ` Daniel Vetter 2016-05-31 8:35 ` [Intel-gfx] " Maarten Lankhorst 2016-05-29 18:35 ` [PATCH 07/26] drm/exynos: Use for_each_crtc_in_state Daniel Vetter 2016-05-31 12:19 ` Inki Dae 2016-06-13 0:52 ` Inki Dae 2016-05-29 18:35 ` [PATCH 08/26] drm: Consolidate connector arrays in drm_atomic_state Daniel Vetter 2016-05-30 14:59 ` Ville Syrjälä 2016-05-30 15:13 ` Daniel Vetter 2016-05-30 15:25 ` [Intel-gfx] " Ville Syrjälä 2016-05-30 15:33 ` Daniel Vetter 2016-05-30 15:45 ` Ville Syrjälä 2016-05-30 15:48 ` [Intel-gfx] " Daniel Vetter 2016-05-29 18:35 ` [PATCH 09/26] drm: Consolidate plane " Daniel Vetter 2016-05-29 18:35 ` [PATCH 10/26] drm: Consolidate crtc " Daniel Vetter 2016-05-29 18:35 ` [PATCH 11/26] drm/fence: add fence to drm_pending_event Daniel Vetter 2016-05-29 18:35 ` [PATCH 12/26] drm/atomic-helper: Massage swap_state signature somewhat Daniel Vetter 2016-05-30 13:08 ` Maarten Lankhorst 2016-05-30 15:09 ` [Intel-gfx] " Daniel Vetter 2016-05-31 8:43 ` Maarten Lankhorst 2016-05-31 10:46 ` Daniel Vetter 2016-05-31 12:20 ` Maarten Lankhorst 2016-05-29 18:35 ` [PATCH 13/26] drm/arc: Nuke event_list Daniel Vetter 2016-05-29 18:35 ` Daniel Vetter 2016-05-29 18:35 ` Daniel Vetter [this message] 2016-05-29 18:35 ` [PATCH 14/26] drm/arc: Actually bother with handling atomic events Daniel Vetter 2016-05-29 18:35 ` [PATCH 15/26] drm/arc: Implement nonblocking commit correctly Daniel Vetter 2016-05-29 18:35 ` Daniel Vetter 2016-05-30 8:15 ` [Intel-gfx] " Maarten Lankhorst 2016-05-30 8:15 ` Maarten Lankhorst 2016-05-30 9:24 ` Daniel Vetter 2016-05-30 9:24 ` Daniel Vetter 2016-05-30 9:36 ` [Intel-gfx] " Maarten Lankhorst 2016-05-30 9:36 ` Maarten Lankhorst 2016-05-30 15:10 ` [Intel-gfx] " Daniel Vetter 2016-05-30 15:10 ` Daniel Vetter 2016-05-29 18:35 ` [PATCH 16/26] drm/hdlcd: Use helper support for nonblocking commits Daniel Vetter 2016-05-31 11:02 ` Liviu Dudau 2016-05-31 11:07 ` Daniel Vetter 2016-05-31 13:13 ` Liviu Dudau 2016-05-29 18:35 ` [PATCH 17/26] drm/fsl-du: Implement some semblance of vblank event handling Daniel Vetter 2016-05-29 18:35 ` [PATCH 18/26] drm/hisilicon: " Daniel Vetter 2016-05-29 18:35 ` [PATCH 19/26] drm/sun4i: " Daniel Vetter 2016-06-01 16:18 ` Maxime Ripard 2016-06-01 22:02 ` Daniel Vetter 2016-05-29 18:35 ` [PATCH 20/26] drm/atomic: kerneldoc for drm_atomic_crtc_needs_modeset Daniel Vetter 2016-05-29 18:35 ` [PATCH 21/26] drm/atomic-helper: nonblocking commit support Daniel Vetter 2016-05-30 8:01 ` [PATCH] " Daniel Vetter 2016-05-31 14:22 ` [Intel-gfx] " Maarten Lankhorst 2016-05-31 14:33 ` Daniel Vetter 2016-05-29 18:35 ` [PATCH 22/26] drm/i915: Signal drm events for atomic Daniel Vetter 2016-05-29 18:35 ` [PATCH 23/26] drm/i915: Roll out the helper nonblock tracking Daniel Vetter 2016-05-29 18:35 ` [PATCH 24/26] drm/rockchip: convert to helper nonblocking atomic commit Daniel Vetter 2016-05-29 18:35 ` [PATCH 25/26] drm/rockchip: Nuke pending event handling in preclose Daniel Vetter 2016-05-29 18:35 ` [PATCH 26/26] drm/virtio: Don't reinvent a flipping wheel Daniel Vetter 2016-05-31 13:40 ` ✗ Ro.CI.BAT: failure for RFC: generic nonblocking support in the atomic helpers Patchwork 2016-05-31 13:42 ` Patchwork 2016-05-31 14:29 ` Patchwork
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=1464546923-13439-15-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.