On Wed, May 27, 2026 at 3:39 PM Thomas Zimmermann <[email protected]> wrote: > > 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.
To avoid this being a regression, you need to test that this change does not regress input latency. As discussed on IRC, compositors use vblank data to predict the time of the next flip event. For each device that you are touching here, there are two possibilities: - The vblank data is related to the flip timing, i.e. flip events and vblank events are sent at almost the same time. In this case removing these apis removes the path for compositors to predict the time of the next flip event. Input latency will therefore regress after idle periods when the compositor no longer has the time of the last vblank. - The vblank data has nothing to do with the time of the next flip event. In this case this series could in fact improve latency because it removes the incorrect data from the compositor. Whether the times of the flip events correspond to hardware timings is not relevant. Everything in wayland compositors is scheduled against flip event timings and they are also forwarded to clients for their frame scheduling. If the flip timings are wrong/out of sync with the hardware, then removing the vblank apis does not improve this situation. > > 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 >
