From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCHv2 41/45] drm: omapdrm: remove omap_crtc_wait_page_flip
Date: Sat, 06 Jun 2015 07:09:34 +0300 [thread overview]
Message-ID: <2119555.L6uFpPdt4e@avalon> (raw)
In-Reply-To: <1433408582-9828-42-git-send-email-tomi.valkeinen@ti.com>
Hi Tomi,
Thank you for the patch.
On Thursday 04 June 2015 12:02:58 Tomi Valkeinen wrote:
> omap_crtc_disable() waits for pending page flips to finish. However,
> omap_crtc_disable() is always called via omap_atomic_complete() and we
> never have page flips going on at that time.
Why is that ? Because our omap_atomic_complete() implementation waits for
vblanks before allowing the next atomic commit to run, and that our vblank IRQ
handler completes all pending page flips ? If so, I believe we have a few
corner cases that won't work properly.
For instance, if the user performs a full mode set on a CRTC without change
the framebuffer, an event can be queued but
drm_atomic_helper_wait_for_vblanks() won't wait for vblank on that CRTC as
framebuffer_changed() will return false. If the next commit then disables the
CRTC the event might not have completed yet.
> So remove the omap_crtc_wait_page_flip() and related code.
>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
> ---
> drivers/gpu/drm/omapdrm/omap_crtc.c | 32 --------------------------------
> 1 file changed, 32 deletions(-)
>
> diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c
> b/drivers/gpu/drm/omapdrm/omap_crtc.c index abfafd1600b8..2c0d91a67418
> 100644
> --- a/drivers/gpu/drm/omapdrm/omap_crtc.c
> +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
> @@ -51,7 +51,6 @@ struct omap_crtc {
>
> /* pending event */
> struct drm_pending_vblank_event *event;
> - wait_queue_head_t flip_wait;
>
> struct completion completion;
>
> @@ -277,41 +276,12 @@ static void omap_crtc_complete_page_flip(struct
> drm_crtc *crtc) else
> event->base.destroy(&event->base);
>
> - wake_up(&omap_crtc->flip_wait);
> drm_crtc_vblank_put(crtc);
> }
>
> spin_unlock_irqrestore(&dev->event_lock, flags);
> }
>
> -static bool omap_crtc_page_flip_pending(struct drm_crtc *crtc)
> -{
> - struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
> - struct drm_device *dev = crtc->dev;
> - unsigned long flags;
> - bool pending;
> -
> - spin_lock_irqsave(&dev->event_lock, flags);
> - pending = omap_crtc->event != NULL;
> - spin_unlock_irqrestore(&dev->event_lock, flags);
> -
> - return pending;
> -}
> -
> -static void omap_crtc_wait_page_flip(struct drm_crtc *crtc)
> -{
> - struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
> -
> - if (wait_event_timeout(omap_crtc->flip_wait,
> - !omap_crtc_page_flip_pending(crtc),
> - msecs_to_jiffies(50)))
> - return;
> -
> - dev_warn(crtc->dev->dev, "page flip timeout!\n");
> -
> - omap_crtc_complete_page_flip(crtc);
> -}
> -
> static void omap_crtc_error_irq(struct omap_drm_irq *irq, uint32_t
> irqstatus) {
> struct omap_crtc *omap_crtc =
> @@ -404,7 +374,6 @@ static void omap_crtc_disable(struct drm_crtc *crtc)
>
> DBG("%s", omap_crtc->name);
>
> - omap_crtc_wait_page_flip(crtc);
> drm_crtc_vblank_off(crtc);
> }
>
> @@ -541,7 +510,6 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev,
>
> crtc = &omap_crtc->base;
>
> - init_waitqueue_head(&omap_crtc->flip_wait);
> init_completion(&omap_crtc->completion);
>
> omap_crtc->channel = channel;
--
Regards,
Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2015-06-06 6:24 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-04 9:02 [PATCHv2 00/45] Convert omapdrm to the atomic updates API Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 01/45] drm: omapdrm: Store the rotation property in dev->mode_config Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 02/45] drm: omapdrm: Apply settings synchronously Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 03/45] drm: omapdrm: Rename omap_crtc_page_flip_locked to omap_crtc_page_flip Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 04/45] drm: omapdrm: Rename omap_crtc page flip-related fields Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 05/45] drm: omapdrm: Simplify IRQ registration Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 06/45] drm: omapdrm: Cancel pending page flips when closing device Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 07/45] drm: omapdrm: Rework page flip handling Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 08/45] drm: omapdrm: Turn vblank on/off when enabling/disabling CRTC Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 09/45] drm: omapdrm: Fix page flip race with CRTC disable Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 10/45] drm: omapdrm: Clean up #include's Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 11/45] drm: omapdrm: Rename CRTC DSS operations with an omap_crtc_dss_ prefix Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 12/45] drm: omapdrm: Rework CRTC enable/disable for atomic updates Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 13/45] drm: omapdrm: Implement encoder .disable() and .enable() operations Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 14/45] drm: omapdrm: Wire up atomic state object scaffolding Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 15/45] drm: omapdrm: Implement planes atomic operations Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 16/45] drm: omapdrm: Handle primary plane config through atomic plane ops Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 17/45] drm: omapdrm: Switch plane update to atomic helpers Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 18/45] drm: omapdrm: Switch mode config " Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 19/45] drm: omapdrm: Switch connector DPMS " Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 20/45] drm: omapdrm: Replace encoder mode_fixup with atomic_check Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 21/45] drm: omapdrm: Implement asynchronous commit support Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 22/45] drm: omapdrm: Switch page flip to atomic helpers Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 23/45] drm: omapdrm: Drop manual framebuffer pin handling Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 24/45] drm: omapdrm: Switch crtc and plane set_property to atomic helpers Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 25/45] drm: omapdrm: Move plane info and win out of the plane structure Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 26/45] drm: omapdrm: Move crtc info out of the crtc structure Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 27/45] drm: omapdrm: Remove omap_crtc enabled field Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 28/45] drm: omapdrm: Remove omap_plane " Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 29/45] drm: omapdrm: Make the omap_crtc_flush function static Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 30/45] drm: omapdrm: Don't get/put dispc in omap_crtc_flush() Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 31/45] drm: omapdrm: omap_crtc_flush() isn't called with modeset locked Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 32/45] drm: omapdrm: Support unlinking page flip events prematurely Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 33/45] drm: omapdrm: Remove nested PM get/sync when configuring encoders Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 34/45] drm: omapdrm: Simplify DSS power management Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 35/45] drm: omapdrm: Move encoder setup to encoder operations Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 36/45] drm: omapdrm: Don't flush CRTC when enabling or disabling it Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 37/45] drm: omapdrm: Don't setup planes manually from CRTC .enable()/.disable() Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 38/45] drm: omapdrm: omap_plane_setup() cannot fail, use WARN Tomi Valkeinen
2015-06-06 3:14 ` Laurent Pinchart
2015-06-04 9:02 ` [PATCHv2 39/45] drm: omapdrm: inline omap_plane_setup into update/disable Tomi Valkeinen
2015-06-06 3:15 ` Laurent Pinchart
2015-06-04 9:02 ` [PATCHv2 40/45] drm: omapdrm: if omap_plane_atomic_update fails, disable plane Tomi Valkeinen
2015-06-06 3:23 ` Laurent Pinchart
2015-06-04 9:02 ` [PATCHv2 41/45] drm: omapdrm: remove omap_crtc_wait_page_flip Tomi Valkeinen
2015-06-06 4:09 ` Laurent Pinchart [this message]
2015-06-08 16:02 ` Tomi Valkeinen
2015-06-04 9:02 ` [PATCHv2 42/45] drm: omapdrm: add omap_atomic_wait_for_gos() Tomi Valkeinen
2015-06-06 4:10 ` Laurent Pinchart
2015-06-08 8:36 ` Tomi Valkeinen
2015-06-04 9:03 ` [PATCHv2 43/45] drm: omapdrm: don't wait in crtc_atomic_flush Tomi Valkeinen
2015-06-06 4:20 ` Laurent Pinchart
2015-06-04 9:03 ` [PATCHv2 44/45] drm: omapdrm: merge omap_crtc_flush and omap_crtc_atomic_flush Tomi Valkeinen
2015-06-06 4:01 ` Laurent Pinchart
2015-06-04 9:03 ` [PATCHv2 45/45] drm: omapdrm: add lock for fb pinning Tomi Valkeinen
2015-06-06 4:30 ` Laurent Pinchart
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=2119555.L6uFpPdt4e@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=tomi.valkeinen@ti.com \
/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: link
Be 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.