All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCHv2 43/45] drm: omapdrm: don't wait in crtc_atomic_flush
Date: Sat, 06 Jun 2015 07:20:07 +0300	[thread overview]
Message-ID: <1586080.enSORYyxLl@avalon> (raw)
In-Reply-To: <1433408582-9828-44-git-send-email-tomi.valkeinen@ti.com>

Hi Tomi,

Thank you for the patch.

On Thursday 04 June 2015 12:03:00 Tomi Valkeinen wrote:
> omap_crtc_atomic_flush() sets the GO bit and waits for it to get unset,
> which tells us the HW has taken the new configuration into use.
> 
> This is unnecessary as omap_atomic_complete() waits for all the GO bits
> to get unset. In fact, waiting is wrong, as with multiple CRTCs we would
> not get the the changes to all the CRTCs as soon as possible, but only
> one after another.
> 
> This patch removes the wait.
> 
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
> ---
>  drivers/gpu/drm/omapdrm/omap_crtc.c | 12 ------------
>  1 file changed, 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c
> b/drivers/gpu/drm/omapdrm/omap_crtc.c index 8f905d2c8074..2ec34dc0c66c
> 100644
> --- a/drivers/gpu/drm/omapdrm/omap_crtc.c
> +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
> @@ -17,8 +17,6 @@
>   * this program.  If not, see <http://www.gnu.org/licenses/>.
>   */
> 
> -#include <linux/completion.h>
> -
>  #include <drm/drm_atomic.h>
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_crtc.h>
> @@ -52,8 +50,6 @@ struct omap_crtc {
>  	/* pending event */
>  	struct drm_pending_vblank_event *event;
> 
> -	struct completion completion;
> -
>  	bool ignore_digit_sync_lost;
>  };
> 
> @@ -317,8 +313,6 @@ static void omap_crtc_vblank_irq(struct omap_drm_irq
> *irq, uint32_t irqstatus)
> 
>  	/* wakeup userspace */
>  	omap_crtc_complete_page_flip(&omap_crtc->base);
> -
> -	complete(&omap_crtc->completion);
>  }
> 
>  static int omap_crtc_flush(struct drm_crtc *crtc)
> @@ -332,10 +326,6 @@ static int omap_crtc_flush(struct drm_crtc *crtc)
>  	if (dispc_mgr_is_enabled(omap_crtc->channel)) {
>  		dispc_mgr_go(omap_crtc->channel);
>  		omap_irq_register(crtc->dev, &omap_crtc->vblank_irq);
> -
> -		WARN_ON(!wait_for_completion_timeout(&omap_crtc->completion,
> -						     msecs_to_jiffies(100)));
> -		reinit_completion(&omap_crtc->completion);

I wonder whether this could introduce a race condition between the CRTC vblank 
interrupt handler register here, and the wait for gos in atomic_commit. The 
latter might run before our CRTC vblank interrupt handler, potentially 
starting processing of the next commit with vblank_irq still registered.

Bonus points if you can remove vblank_irq completely while fixing that :-) I'd 
rather see omap_crtc_vblank_irq() being called directly and unconditionally 
from omap_irq_handler(), and the drm_crtc_handle_vblank() call being moved to 
omap_crtc_vblank_irq().

>  	}
> 
>  	return 0;
> @@ -517,8 +507,6 @@ struct drm_crtc *omap_crtc_init(struct drm_device *dev,
> 
>  	crtc = &omap_crtc->base;
> 
> -	init_completion(&omap_crtc->completion);
> -
>  	omap_crtc->channel = channel;
>  	omap_crtc->name = channel_names[channel];

-- 
Regards,

Laurent Pinchart

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

  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
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 [this message]
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=1586080.enSORYyxLl@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.