[Intel-gfx] [PATCH 2/3] drm: Skip the waitqueue setup for vblank queries
Daniel Vetter
daniel at ffwll.ch
Thu Mar 16 09:23:50 UTC 2017
On Wed, Mar 15, 2017 at 08:40:26PM +0000, Chris Wilson wrote:
> Avoid adding to the waitqueue and reprobing the current vblank if the
> caller is only querying the current vblank sequence and timestamp, where
> we know that the wait would return immediately.
>
> v2: Add CRTC identifier to debug messages
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Cc: Daniel Vetter <daniel at ffwll.ch>
> Cc: Michel Dänzer <michel at daenzer.net>
> Cc: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> Cc: Dave Airlie <airlied at redhat.com>,
> Cc: Mario Kleiner <mario.kleiner.de at gmail.com>
> Reviewed-by: Michel Dänzer <michel at daenzer.net>
> Reviewed-and-tested-by: Mario Kleiner <mario.kleiner.de at gmail.com>
Merged the first two from this series, thanks.
-Daniel
> ---
> drivers/gpu/drm/drm_irq.c | 24 +++++++++++++-----------
> 1 file changed, 13 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c
> index e64b05ea95ea..53a526c7b24d 100644
> --- a/drivers/gpu/drm/drm_irq.c
> +++ b/drivers/gpu/drm/drm_irq.c
> @@ -1610,7 +1610,7 @@ int drm_wait_vblank(struct drm_device *dev, void *data,
>
> ret = drm_vblank_get(dev, pipe);
> if (ret) {
> - DRM_DEBUG("failed to acquire vblank counter, %d\n", ret);
> + DRM_DEBUG("crtc %d failed to acquire vblank counter, %d\n", pipe, ret);
> return ret;
> }
> seq = drm_vblank_count(dev, pipe);
> @@ -1638,13 +1638,15 @@ int drm_wait_vblank(struct drm_device *dev, void *data,
> return drm_queue_vblank_event(dev, pipe, vblwait, file_priv);
> }
>
> - DRM_DEBUG("waiting on vblank count %u, crtc %u\n",
> - vblwait->request.sequence, pipe);
> - DRM_WAIT_ON(ret, vblank->queue, 3 * HZ,
> - (((drm_vblank_count(dev, pipe) -
> - vblwait->request.sequence) <= (1 << 23)) ||
> - !vblank->enabled ||
> - !dev->irq_enabled));
> + if (vblwait->request.sequence != seq) {
> + DRM_DEBUG("waiting on vblank count %u, crtc %u\n",
> + vblwait->request.sequence, pipe);
> + DRM_WAIT_ON(ret, vblank->queue, 3 * HZ,
> + (((drm_vblank_count(dev, pipe) -
> + vblwait->request.sequence) <= (1 << 23)) ||
> + !vblank->enabled ||
> + !dev->irq_enabled));
> + }
>
> if (ret != -EINTR) {
> struct timeval now;
> @@ -1653,10 +1655,10 @@ int drm_wait_vblank(struct drm_device *dev, void *data,
> vblwait->reply.tval_sec = now.tv_sec;
> vblwait->reply.tval_usec = now.tv_usec;
>
> - DRM_DEBUG("returning %u to client\n",
> - vblwait->reply.sequence);
> + DRM_DEBUG("crtc %d returning %u to client\n",
> + pipe, vblwait->reply.sequence);
> } else {
> - DRM_DEBUG("vblank wait interrupted by signal\n");
> + DRM_DEBUG("crtc %d vblank wait interrupted by signal\n", pipe);
> }
>
> done:
> --
> 2.11.0
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
More information about the Intel-gfx
mailing list