APPLIED: [SRU][Bionic][PATCH 0/1] QEMU/KVM display is garbled when booting from kernel EFI stub due to missing bochs-drm module

Kelsey Skunberg kelsey.skunberg at canonical.com
Fri Apr 24 17:32:55 UTC 2020


On 2020-04-15 14:33:49 , Matthew Ruffell wrote:
> BugLink: https://bugs.launchpad.net/bugs/1872863
> 
> [Impact]
> 
> A recent grub2 SRU, LP #1864533, now forces the kernel to boot via the kernel
> EFI stub whenever EFI is enabled. This causes problems for QEMU/KVM virtual 
> machines which use the VGA=std video device, as the efifb driver yields an 
> unreadable garbled screen. See the attached image.
> 
> The correct framebuffer driver to use in this situation is bochs-drm, and 
> modprobing it from a HWE kernel fixes the issues.
> 
> bochs-drm is missing from Bionic since CONFIG_DRM_BOCHS was disabled in LP 
> #1378648 due to bochs-drm causing problems in a PowerKVM machine. This problem
> appears to be fixed now, and bochs-drm has been re-enabled for Disco and up, in 
> LP #1795857 and has been proven safe.
> 
> This has also come up again in LP #1823152, as well as chatter on LP #1795857
> to get this enabled on Bionic.
> 
> The customer which is experiencing this issue cannot switch to VGA=qxl as a
> workaround, and must use VGA=std, hence I suggest we re-enable bochs-drm for
> Bionic.
> 
> [Fix]
> 
> I noticed on Focal, if you boot, the framebuffer is initially efifb:
> 
> [ 0.603716] efifb: probing for efifb
> [ 0.603733] efifb: framebuffer at 0xc0000000, using 1876k, total 1875k
> [ 0.603735] efifb: mode is 800x600x32, linelength=3200, pages=1
> [ 0.603736] efifb: scrolling: redraw
> [ 0.603738] efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
> [ 0.604462] Console: switching to colour frame buffer device 100x37
> [ 0.605829] fb0: EFI VGA frame buffer device 
> 
> This soon changes to bochs-drm about a second later:
> 
> [ 0.935988] bochs-drm 0000:00:01.0: remove_conflicting_pci_framebuffers: bar 0: 0xc0000000 -> 0xc0ffffff
> [ 0.937023] bochs-drm 0000:00:01.0: remove_conflicting_pci_framebuffers: bar 2: 0xc1c8c000 -> 0xc1c8cfff
> [ 0.937776] checking generic (c0000000 1d5000) vs hw (c0000000 1000000)
> [ 0.937776] fb0: switching to bochsdrmfb from EFI VGA
> [ 0.939085] Console: switching to colour dummy device 80x25
> [ 0.939117] bochs-drm 0000:00:01.0: vgaarb: deactivate vga console
> [ 0.939210] [drm] Found bochs VGA, ID 0xb0c5.
> [ 0.939212] [drm] Framebuffer size 16384 kB @ 0xc0000000, mmio @ 0xc1c8c000.
> [ 0.941955] lpc_ich 0000:00:1f.0: I/O space for GPIO uninitialized
> [ 0.942069] [TTM] Zone kernel: Available graphics memory: 2006780 KiB
> [ 0.942081] [TTM] Initializing pool allocator
> [ 0.942089] [TTM] Initializing DMA pool allocator
> [ 0.943026] virtio_blk virtio2: [vda] 20971520 512-byte logical blocks (10.7 GB/10.0 GiB)
> [ 0.944019] [drm] Found EDID data blob.
> [ 0.944162] [drm] Initialized bochs-drm 1.0.0 20130925 for 0000:00:01.0 on minor 0
> [ 0.944979] fbcon: bochs-drmdrmfb (fb0) is primary device
> [ 0.947712] Console: switching to colour frame buffer device 128x48 
> 
> On bionic, the framebuffer never changes from efifb, since the bochs-drm kernel
> module is not built, and it is also present on the module banlist in
> /etc/modprobe.d/blacklist-framebuffer.conf
> 
> bochs-drm needs to be enabled to be built in the kernel config, and removed from
> the module blacklist in kmod.
> 
> 
> [Testcase]
> 
> Create a new QEMU/KVM virtual machine, I used virt-manager. Before you install
> the OS, check the box to modify settings before install. In the "Overview" tab,
> enable EFI by setting the firmware to "UEFI x86_64: /usr/share/OVMF/OVMF_CODE.secboot.fd".
> 
> Set the video device to qxl while you install Bionic. Once the install is done,
> reboot, do a "apt update" and "apt upgrade", to ensure you have grub2
> 2.02-2ubuntu8.15 installed.
> 
> Shut the VM down, and set the video device to VGA. Or VGA=std if you use the
> QEMU command line.
> 
> Start the VM up, and the screen will be garbled. See attached picture.
> 
> If you install my test packages, which are available here:
> 
> https://launchpad.net/~mruffell/+archive/ubuntu/sf272653-test 
> 
> Instructions to install (on a bionic system):
> 
> 1) sudo add-apt-repository ppa:mruffell/sf272653-test
> 2) sudo apt-get update
> 3) sudo apt install linux-image-unsigned-4.15.0-96-generic linux-modules-4.15.0-96-generic \
> linux-modules-extra-4.15.0-96-generic linux-headers-4.15.0-96-generic linux-headers-4.15.0-96 \
> libkmod2 kmod
> 4) sudo reboot
> 5) uname -rv
> 4.15.0-96-generic #97+TEST272653v20200409b1-Ubuntu SMP Thu Apr 9 04:09:18 UTC 2020 
> 
> If you reboot, the screen will be perfectly readable, since the bochs-drm driver
> will be in use.
> 
> [Regression Potential]
> 
> We are enabling a display driver on Bionic which was previously disabled, so
> there will be some virtual machines making the jump to using bochs-drm since
> it would now be available.
> 
> I don't think that this is a bad thing, and in many ways will probably end up
> improving some user's experience. Although there are two scenarios where
> a regression could happen:
> 
> 1 - frequently gamers use GPU passthrough to their kvm based virtual
> machines, and I have seen them expect, or hardcode their kernel command lines
> to use the efifb driver. I actually find this strange, as if you read the
> kernel documentation, the efifb driver is meant for Apple Macintosh computers
> only: https://www.kernel.org/doc/html/latest/fb/efifb.html
> Since most gamers have to jump through a lot of hoops to get GPU passthrough
> working, and most have moved on from Bionic, I don't expect this to be a problem.
> 
> 2 - if the bug with PowerKVM machines isn't actually fixed in Bionic, it will 
> cause a regression on POWER. We just need to test this on POWER and ensure
> that the bug in LP #1378648 was fixed. If not, then we could just disable
> bochs-drm on POWER, leaving it enabled for all other archs.
> 
> Matthew Ruffell (1):
>   UBUNTU: [Config] Enable CONFIG_DRM_BOCHS as module for all archs
> 
>  debian.master/config/annotations          | 3 +--
>  debian.master/config/config.common.ubuntu | 2 +-
>  2 files changed, 2 insertions(+), 3 deletions(-)
>

Applied to Bionic/master-next. Thank you! 

-Kelsey
 
> -- 
> 2.25.1
> 
> 
> -- 
> kernel-team mailing list
> kernel-team at lists.ubuntu.com
> https://lists.ubuntu.com/mailman/listinfo/kernel-team



More information about the kernel-team mailing list