https://bugzilla.kernel.org/show_bug.cgi?id=196777
--- Comment #12 from Justin M. Forbes (jmforbes@linuxtx.org) --- (In reply to Gerd Hoffmann from comment #11)
(In reply to Justin M. Forbes from comment #10)
After going through these with a number of users:
qxl: fix primary surface handling - This patch is widely reported to cause serious screen flickering that is not there without it, making the system unusable.
Workaround #1: turn off wayland.
Possible as a short term fix, but with wayland being pretty much "the way forward" it doesn't seem to be a workable long term solution.
Workaround #2: use virtio-vga instead. wayland doesn't use qxl 2d accel anyway.
Fundamental problem here is that the qxl virtual hardware simply doesn't support pageflip, we have to destroy + re-create the primary surface instead. This is where the flicker comes from.
Commit "058e9f5c82 drm/qxl: simple crtc page flipping emulated using buffer copy" handles the issue with a pretty gross hack, blitting one framebuffer over the other instead of a proper primary surface update. With atomic modesetting that doesn't work any more.
We could possibly decouple the primary surface from the drm framebuffers, so the drm framebuffers effectively become shadow framebuffers, and every display update becomes a drm framebuffer -> primary surface blit. Not sure whenever that scheme can work properly with xorg though. Also has a high chance to cause xorg performance regressions.
So this brings up an interesting problem in how things are to move forward. It came up as a blocker in Fedora 27 today. Let's say we find a way to force boxes to revert to virtio-vga. That wouldn't change any existing VMs, and it is something we have no control over when the host is not Fedora as well. It also would be a problem for non wayland guests.