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 <ch...@chris-wilson.co.uk>
> Cc: Ville Syrjälä <ville.syrj...@linux.intel.com>
> Cc: Daniel Vetter <dan...@ffwll.ch>
> Cc: Michel Dänzer <mic...@daenzer.net>
> Cc: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
> Cc: Dave Airlie <airl...@redhat.com>,
> Cc: Mario Kleiner <mario.kleiner...@gmail.com>
> Reviewed-by: Michel Dänzer <mic...@daenzer.net>
> Reviewed-and-tested-by: Mario Kleiner <mario.kleiner...@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
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to