summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLucas Stach <l.stach@pengutronix.de>2015-02-20 17:09:59 +0100
committerPhilipp Zabel <p.zabel@pengutronix.de>2015-04-14 11:48:38 +0200
commit594ec30073c1ef99a1bd8a20e59b0e10ac9549bb (patch)
tree81ebb94413951d50a1d1b049d2890a41d766396d
parentc3520f94576f9c53cbf1d13407ef2a5b64f2d09f (diff)
downloadkmsfbwrap-594ec30073c1ef99a1bd8a20e59b0e10ac9549bb.tar.gz
kmsfbwrap-594ec30073c1ef99a1bd8a20e59b0e10ac9549bb.tar.xz
bgi: make FBIO_WAITFORVSYNC really synchronous
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
-rw-r--r--src/bgi.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/bgi.c b/src/bgi.c
index e8a8a79..b0ed349 100644
--- a/src/bgi.c
+++ b/src/bgi.c
@@ -75,6 +75,14 @@ static void fbdev_write(fuse_req_t req, const char *buf, size_t size,
fb->pos += size;
}
+static int wait_vblank_sync(struct kms_fb *fb)
+{
+ union drm_wait_vblank vblank = {};
+ vblank.request.type = _DRM_VBLANK_RELATIVE;
+ vblank.request.sequence = 1;
+ return ioctl(drmfd, DRM_IOCTL_WAIT_VBLANK, &vblank);
+}
+
static int wait_vblank(struct kms_fb *fb)
{
char buffer[1024];
@@ -319,7 +327,7 @@ static void fbdev_ioctl(fuse_req_t req, int cmd, void *arg,
break;
case FBIO_WAITFORVSYNC:
if (fb->vsync.e != NEVER)
- wait_vblank(fb);
+ wait_vblank_sync(fb);
fuse_reply_ioctl(req, 0, NULL, 0);
break;
case FBIOGET_FSCREENINFO: