On Thu, Jul 18, 2019 at 06:15:01PM +0200, Sam Ravnborg wrote:
DRM_WAIT_ON() is from the deprecated drm_os_linux header and the modern replacement is the wait_event_*.
The return values differ, so a conversion is needed to keep the original interface towards userspace. Introduced a switch/case to make code obvious and to allow different debug prints depending on the result.
Signed-off-by: Sam Ravnborg sam@ravnborg.org
Reviewed-by: Sean Paul sean@poorly.run
Cc: Maarten Lankhorst maarten.lankhorst@linux.intel.com Cc: Maxime Ripard maxime.ripard@bootlin.com Cc: Sean Paul sean@poorly.run Cc: David Airlie airlied@linux.ie Cc: Daniel Vetter daniel@ffwll.ch
drivers/gpu/drm/drm_vblank.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/drm_vblank.c b/drivers/gpu/drm/drm_vblank.c index 603ab105125d..8e9ac187500e 100644 --- a/drivers/gpu/drm/drm_vblank.c +++ b/drivers/gpu/drm/drm_vblank.c @@ -31,7 +31,6 @@ #include <drm/drm_drv.h> #include <drm/drm_framebuffer.h> #include <drm/drm_print.h> -#include <drm/drm_os_linux.h> #include <drm/drm_vblank.h>
#include "drm_internal.h" @@ -1672,19 +1671,31 @@ int drm_wait_vblank_ioctl(struct drm_device *dev, void *data, if (req_seq != seq) { DRM_DEBUG("waiting on vblank count %llu, crtc %u\n", req_seq, pipe);
DRM_WAIT_ON(ret, vblank->queue, 3 * HZ,
vblank_passed(drm_vblank_count(dev, pipe),
req_seq) ||
!READ_ONCE(vblank->enabled));
ret = wait_event_interruptible_timeout(vblank->queue,
vblank_passed(drm_vblank_count(dev, pipe), req_seq) ||
!READ_ONCE(vblank->enabled),
}msecs_to_jiffies(3000));
- if (ret != -EINTR) {
- switch (ret) {
- case 0:
/* timeout */
drm_wait_vblank_reply(dev, pipe, &vblwait->reply);ret = -EBUSY;
DRM_DEBUG("crtc %d returning %u to client\n",
DRM_DEBUG("timeout waiting for vblank. crtc %d returning %u to client\n", pipe, vblwait->reply.sequence);
- } else {
break;
- case -ERESTARTSYS:
/* interrupted by signal */
DRM_DEBUG("crtc %d vblank wait interrupted by signal\n", pipe);ret = -EINTR;
break;
- default:
ret = 0;
drm_wait_vblank_reply(dev, pipe, &vblwait->reply);
DRM_DEBUG("crtc %d returning %u to client\n",
pipe, vblwait->reply.sequence);
}break;
done:
2.20.1