Skip to content

Pin qboot firmware for QEMU microvm guests - #504

Draft
sjmiller609 wants to merge 1 commit into
mainfrom
hypeship/pin-microvm-qboot
Draft

sjmiller609 wants to merge 1 commit into
mainfrom
hypeship/pin-microvm-qboot

Conversation

@sjmiller609

Copy link
Copy Markdown
Collaborator

Summary

QEMU microvm guests never finish booting on hosts where the distro's bios-microvm.bin is SeaBIOS instead of qboot. This happens on Ubuntu 26.04 (QEMU 10.2.1), where bios-microvm.bin comes from the seabios package. Debian 12 symlinks it to qboot.rom, so hosts on Debian are unaffected.

With SeaBIOS as microvm firmware, the guest's MADT has no IOAPIC entries. The guest kernel then takes a divide error in start_kernel right after IRQ init. That happens before the serial console registers, so the serial log stays empty and the instance stays in Initializing until the test times out. TestQEMUMicroVMEndToEnd and TestQEMUMicroVMStandbyAndRestore fail on any runner with that QEMU package.

This change passes -bios qboot.rom explicitly for microvm. qboot is upstream QEMU's default microvm firmware, and it is the same file Debian already uses, so behavior and snapshot ROM contents on existing hosts don't change.

Testing

  • Reproduced in an Ubuntu 26.04 container (QEMU 10.2.1) on a Debian 6.1 host. A bare -machine microvm -kernel boot with the hypeman guest kernel oopses under the default firmware and boots with -bios qboot.rom.
  • make test-linux TEST=TestQEMUMicroVM in that container:
    • without this change: TestQEMUMicroVMEndToEnd fails with did not reach Running ... (last state: Initializing), matching CI
    • with this change: EndToEnd, StandbyAndRestore, ForkFromRunningNetwork and WarmForkChain all pass
  • go test ./lib/hypervisor/qemu/ passes.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant