On 06/07/17 07:10 AM, Keith Packard wrote:
This modifies the datatypes used by the vblank code to provide both 64 bits of vblank count and to increase the resolution of the vblank timestamp from microseconds to nanoseconds.
The driver interfaces have also been changed to return 64-bits of vblank count; fortunately all of the code necessary to widen that value was already included to handle devices returning fewer than 32-bits.
This will provide the necessary datatypes for the Vulkan API.
Signed-off-by: Keith Packard keithp@keithp.com
[...]
@@ -1492,9 +1515,11 @@ int drm_wait_vblank(struct drm_device *dev, void *data,
switch (vblwait->request.type & _DRM_VBLANK_TYPES_MASK) { case _DRM_VBLANK_RELATIVE:
vblwait->request.sequence += seq;
vblwait->request.type &= ~_DRM_VBLANK_RELATIVE;req_seq = seq + vblwait->request.sequence;
Subtle breakage here: vblwait->request.sequence must still get updated for _DRM_VBLANK_RELATIVE, in case we're interrupted by a signal.
@@ -317,6 +317,9 @@ int via_driver_irq_postinstall(struct drm_device *dev) if (!dev_priv) return -EINVAL;
- if (dev->driver->get_vblank_counter)
dev->max_vblank_count = 0xffffffff;
What's the purpose of this? All drivers providing get_vblank_counter should already initialize max_vblank_count correctly.