[PATCH 3/6] drm: Fix drm_vblank_pre/post_modeset regression from Linux 4.4

Vlastimil Babka vbabka at suse.cz
Wed Feb 24 08:59:35 UTC 2016


On 02/12/2016 08:30 PM, Mario Kleiner wrote:
> Changes to drm_update_vblank_count() in Linux 4.4 broke the
> behaviour of the pre/post modeset functions as the new update
> code doesn't deal with hw vblank counter resets inbetween calls
> to drm_vblank_pre_modeset an drm_vblank_post_modeset, as it
> should.
>
> This causes mistreatment of such hw counter resets as counter
> wraparound, and thereby large forward jumps of the software
> vblank counter which in turn cause vblank event dispatching
> and vblank waits to fail/hang --> userspace clients hang.
>
> This symptom was reported on radeon-kms to cause a infinite
> hang of KDE Plasma 5 shell's login procedure, preventing users
> from logging in.
>
> Fix this by detecting when drm_update_vblank_count() is called
> inside a pre->post modeset interval. If so, clamp valid vblank
> increments to the safe values 0 and 1, pretty much restoring
> the update behavior of the old update code of Linux 4.3 and
> earlier. Also reset the last recorded hw vblank count at call
> to drm_vblank_post_modeset() to be safe against hw that after
> modesetting, dpms on etc. only fires its first vblank irq after
> drm_vblank_post_modeset() was already called.
>
> Reported-by: Vlastimil Babka <vbabka at suse.cz>
> Signed-off-by: Mario Kleiner <mario.kleiner.de at gmail.com>
> Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> Tested-by: Vlastimil Babka <vbabka at suse.cz>

FWIW I have applied patches 1-4 of this v2 to 4.4.2 and it works fine so 
far on my radeon. Patch 6/6 was for nouveau so I ignored it, and 5/6 
didn't have stable tag (and from the description I couldn't decide if I 
should include it or not).

Thanks, Vlastimil


More information about the dri-devel mailing list