From: Dave Voutila Subject: Re: fix reboot of alpine linux guests in vmd To: Alexander Bluhm Cc: tech@openbsd.org, mlarkin@openbsd.org Date: Tue, 13 Jan 2026 10:35:02 -0500 Alexander Bluhm writes: > On Mon, Jan 05, 2026 at 09:23:20PM -0500, Dave Voutila wrote: >> This has bothered me for awhile and I finally got to the bottom of >> it. On some Alpine Linux versions, attempting a reboot via reboot(1) >> results in a double fault and a hung vcpu. You get a panic like: >> >> [ 615.066340] traps: PANIC: double fault, error_code: 0x0 >> [ 615.066347] Oops: double fault: 0000 [#1] SMP PTI >> [ 615.066353] CPU: 0 UID: 0 PID: 2381 Comm: init Not tainted 6.18.2-0-virt #1-Alpine PREEMPT(none) >> [ 615.066355] Hardware name: OpenBSD VMM, BIOS 1.16.3p0-OpenBSD-vmm 01/01/2011 >> [ 615.066356] RIP: 0008:0x9a070 >> [ 615.066360] Code: Unable to access opcode bytes at 0x9a046. >> [ 615.066361] RSP: 0018:00000000405ebb78 EFLAGS: 00010046 >> [ 615.066362] RAX: ffff951d00098000 RBX: 0000000000000000 RCX: 0000000000000000 >> [ 615.066363] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000 >> [ 615.066363] RBP: 0000000000000000 R08: 0000000000000000 R09: 0000000000000000 >> [ 615.066364] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000001 >> [ 615.066364] R13: 00000000fee1de01 R14: 0000000028121969 R15: ffffffffb1a63ea0 >> [ 615.066365] FS: 00007f836bf6eb28(0000) GS:ffff951e2a16a000(0000) knlGS:0000000000000000 >> [ 615.066366] CS: 0008 DS: 0000 ES: 0000 CR0: 0000000080050013 >> [ 615.066366] CR2: 00000000405ebb68 CR3: 000000000009c000 CR4: 0000000000b50eb0 >> >> It appears for some reason Alpine Linux kernels don't go the >> triple-fault route that most other distro kernels do and instead tries a >> reset function in the BIOS. At some point, the trampoline setup to get >> into the BIOS must be getting busted. >> >> I'm not sure the exact cause, but by tweaking the RAM vs. Reserved point >> for the first memory regions setup by vmd, it avoids breaking things. >> >> OK? > > Tested on Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz > > My alpine Linux still does not reboot. I have not seen the panic > you mention. Hmm, this looks like it terminates instead? Did it terminate like this without the diff? How much memory do you assign to this guest? I strongly suspect the culprit is still how we define memory regions and my diff only fixes it for specific sizes. > > Welcome to Alpine Linux 3.22 > > lt63:~# reboot > lt63:~# * Stopping tcpbench ... [ ok ] > * Stopping sshd ... [ ok ] > * Saving random number generator seed ... * Seeding 256 bits and crediting > * Saving 256 bits of creditable seed for next boot > [ ok ] > * Stopping NTP Server ... [ ok ] > * Stopping iperf3 ... [ ok ] > * Stopping busybox crond ... [ ok ] > * Stopping busybox syslog ... [ ok ] > * Unmounting loop devices > * Unmounting filesystems > * Unmounting /tmp ... [ ok ] > * Unmounting /boot ... [ ok ] > * Deactivating swap devices ... [ ok ] > * Setting hardware clock using the system clock [UTC] ... [ ok ] > * Stopping busybox mdev ... [ ok ] > * Terminating remaining processes ...[ 37.141768] reboot: Restarting system > > This is vmd -dvv output > > vm/lt63: vcpu_process_com_data: guest reading com1 when not ready > vm/lt63: virtio_shutdown: waiting on device pid 19551 > vm/lt63: virtio_dispatch_dev: pipe dead (EV_READ) > vm/lt63/vionet0: rx_run_loop: exiting (0) > vm/lt63/vionet1: tx_run_loop: exiting (0) > vm/lt63/vionet0: tx_run_loop: exiting (0) > vm/lt63/vionet1: rx_run_loop: exiting (0) > vm/lt63: virtio_shutdown: device for pid 19551 is stopped > vm/lt63: virtio_shutdown: waiting on device pid 27363 > vm/lt63: virtio_shutdown: device for pid 27363 is stopped > vm/lt63: virtio_shutdown: waiting on device pid 11734 > vm/lt63: virtio_shutdown: device for pid 11734 is stopped > vmm: vmm_sighdlr: handling signal 20 > vmm: vmm_sighdlr: terminated vm lt63 (id 4) > vmm: vm_remove: vmm vmm_sighdlr removing vm 4 from running config > vmm: vm_stop: vmm vmm_sighdlr stopping vm 4 > vmd: vm_stop: vmd vmd_dispatch_vmm stopping vm 4 > > bluhm