In commit 99264a61dfcda41d86d0960cf2d4c0fc2758a773 Author: Daniel Vetter <daniel.vetter@ffwll.ch> Date: Wed Apr 15 19:34:43 2015 +0200 drm/vblank: Fixup and document timestamp update/read barriers I've switched vblank->count from atomic_t to unsigned long and accidentally created an integer comparison bug in drm_vblank_count_and_time since vblanke->count might overflow the u32 local copy and hence the retry loop never succeed. Fix this by consistently using u32.
Unified · Split
| @@ -75,7 +75,7 @@ module_param_named(timestamp_precision_usec, drm_timestamp_precision, int, 0600) · 74 unmodified lines | ||
| 75 | 75 | module_param_named(timestamp_monotonic, drm_timestamp_monotonic, int, 0600); |
| 76 | 76 | |
| 77 | 77 | static void store_vblank(struct drm_device *dev, int crtc, |
| 78 | − unsigned vblank_count_inc, | |
| 78 | + u32 vblank_count_inc, | |
| 79 | 79 | struct timeval *t_vblank) |
| 80 | 80 | { |
| 81 | 81 | struct drm_vblank_crtc *vblank = &dev->vblank[crtc]; |
| @@ -691,7 +691,7 @@ struct drm_vblank_crtc { · 690 unmodified lines | ||
| 691 | 691 | struct timer_list disable_timer; /* delayed disable timer */ |
| 692 | 692 | |
| 693 | 693 | /* vblank counter, protected by dev->vblank_time_lock for writes */ |
| 694 | − unsigned long count; | |
| 694 | + u32 count; | |
| 695 | 695 | /* vblank timestamps, protected by dev->vblank_time_lock for writes */ |
| 696 | 696 | struct timeval time[DRM_VBLANKTIME_RBSIZE]; |
| 697 | 697 | |