DRM's WAIT_VBLANK ioctl synchronizes user-space clients to display refresh. This is meaningless with vblank timers, which run unrelated to the hardware's vblank.
Disable the ioctl for simulated vblanks. Set DRM_VBLANK_FLAG_SIMULATED for CRTCs with simulated vblank events in all such drivers. The vblank timers of these devices still rate-limit the number of page-flip events to match the display refresh. According to maintainers, user-space compositors do not require the ioctl for rate-limitting display output. Weston, Kwin and Mutter rely on completion events. Mutter optionally uses the WAIT_VBLANK ioctl only to optimize the time from input to output. When testing with mutter and weston, the page-flip rate appears correct with the patch set applied. This change has been discussed at length on IRC recently. https://people.freedesktop.org/~cbrill/dri-log/?channel=dri-devel&highlight_names=&date=2026-05-08&show_html=true https://people.freedesktop.org/~cbrill/dri-log/?channel=dri-devel&highlight_names=&date=2026-05-12&show_html=true https://people.freedesktop.org/~cbrill/dri-log/?channel=dri-devel&highlight_names=&date=2026-05-13&show_html=true https://people.freedesktop.org/~cbrill/dri-log/?channel=dri-devel&highlight_names=&date=2026-05-15&show_html=true v2: - add filter to CRTC_GET_SEQUENCE and CRTC_QUEUE_SEQUENCE ioctls (Michel) - clarify Mutter's behavior in cover letter (Michel) Thomas Zimmermann (9): drm/vblank: Add drmm_vblank_init() to indicate managed cleanup drm/vblank: Add DRM_VBLANK_FLAG_SIMULATED drm/amdgpu: vkms: Set DRM_VBLANK_FLAG_SIMULATED drm/bochs: Set DRM_VBLANK_FLAG_SIMULATED drm/cirrus: Set DRM_VBLANK_FLAG_SIMULATED drm/hypervdrm: Set DRM_VBLANK_FLAG_SIMULATED drm/qxl: Set DRM_VBLANK_FLAG_SIMULATED drm/virtgpu: Set DRM_VBLANK_FLAG_SIMULATED drm/vkms: Set DRM_VBLANK_FLAG_SIMULATED drivers/gpu/drm/amd/amdgpu/amdgpu_vkms.c | 3 ++- drivers/gpu/drm/drm_vblank.c | 26 +++++++++++++++------ drivers/gpu/drm/drm_vblank_helper.c | 2 +- drivers/gpu/drm/hyperv/hyperv_drm_modeset.c | 2 +- drivers/gpu/drm/qxl/qxl_display.c | 2 +- drivers/gpu/drm/tiny/bochs.c | 2 +- drivers/gpu/drm/tiny/cirrus-qemu.c | 2 +- drivers/gpu/drm/virtio/virtgpu_display.c | 2 +- drivers/gpu/drm/vkms/vkms_drv.c | 4 ++-- include/drm/drm_crtc.h | 2 +- include/drm/drm_device.h | 2 +- include/drm/drm_vblank.h | 15 +++++++++++- 12 files changed, 45 insertions(+), 19 deletions(-) base-commit: 5fb5a9a63cf5ece68e0eeb6fa397da27712bccf0 -- 2.54.0
