On 01/21/2016 09:28 AM, Mario Kleiner wrote:
... just like drm_vblank_pre/post_modeset. That those were broken is a regression which needs to be fixed anyway. I don't think switching to drm_vblank_on/off is suitable for stable trees.
Looking at Vlastimil's original post again, I'd say the most likely culprit is 4dfd6486 ("drm: Use vblank timestamps to guesstimate how many vblanks were missed").
Yeah, this is what I bisected to.
Yes, i think reverting that one alone would likely fix it by reverting to the old vblank update logic.
Yep I said in the original mail that reverting on top of 4.4 fixed it. Well not just this single commit, but also some patches on top (e.g. radeon and amdgpu adaptations to that commit, IIRC it wouldn't have compiled otherwise).
Once drm_vblank_off is called, drm_vblank_get will no-op and return an error, so clients can't enable vblank irqs during the modeset - pageflip ioctl and waitvblank ioctl would fail while a modeset happens - hopefully userspace handles this correctly everywhere.
We've fixed xf86-video-ati for this.
I'll hack up a patch for demonstration now.
You're a bit late to that party. :)
http://lists.freedesktop.org/archives/dri-devel/2015-May/083614.html http://lists.freedesktop.org/archives/dri-devel/2015-July/086451.html
Oops. Just sent out my little (so far untested) creations. Yes, they are essentially the same as Daniel's patches. The only addition is to also fix that other potential small race i describe by slightly moving the xxx_pm_compute_clocks() calls around. And a fix for drm_vblank_get/put imbalance in radeon_pm if vblank_on/off would be used.
Thanks, I'll test.
-mario