Date: Sat, 18 Jul 2026 11:22:52 +0000 From: bugzilla-noreply@freebsd.org To: virtualization@FreeBSD.org Subject: [Bug 296872] bhyve guest hangs at start_init (100%+ vCPU spin in lock_delay) on AMD Ryzen (Zen2/SVM), 15.1-RELEASE host; identical guest boots on 14.3 Intel host Message-ID: <bug-296872-27103@https.bugs.freebsd.org/bugzilla/>
index | next in thread | raw e-mail
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296872 Bug ID: 296872 Summary: bhyve guest hangs at start_init (100%+ vCPU spin in lock_delay) on AMD Ryzen (Zen2/SVM), 15.1-RELEASE host; identical guest boots on 14.3 Intel host Product: Base System Version: 15.1-RELEASE Hardware: amd64 OS: Any Status: New Severity: Affects Some People Priority: --- Component: bhyve Assignee: virtualization@FreeBSD.org Reporter: ozgur@kazancci.com Created attachment 272954 --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=272954&action=edit The zip file contains: 01-host-info.txt - 02-bhyve-cmdline.txt - 03-bhyvectl-getall-1 - 03-bhyvectl-getall-2 - 03-bhyvectl-getall-3 - 04-guest-console Overview -------- A FreeBSD 15.1-RELEASE amd64 guest under bhyve reaches userland (the kernel prints "start_init: trying /sbin/init") and then hangs permanently. The bhyve process pins ~100% CPU per vCPU (~213% for 4 vCPUs, ~120% for 1 vCPU). The guest never reaches multi-user; no login prompt, no network. The identical guest disk image boots normally on a different host (Intel Haswell, 14.3-RELEASE), isolating the problem to the 15.1 host's vmm/SVM path on AMD. bhyvectl shows the guest spinning in lock_delay() with millions of intercepted PAUSE instructions and no interrupt-window activity — the classic signature of a waited-for timer/interrupt never being delivered to the guest. Host environment ---------------- - Host: FreeBSD 15.1-RELEASE-p1 amd64 (GENERIC) - CPU: AMD Ryzen 7 3700X (Zen2), Family=0x17 Model=0x71, AMD Features2=<...,SVM,...> - vmm.ko loaded; managed via vm-bhyve 1.7.4 (also reproduced with 1.7.99.87) - hw.vmm.svm.num_asids=32768, features=1293567, vmcb_clean=1023 - hw.vmm.amdvi.enable=0 (no PCI passthrough / IOMMU in use) Guest ----- - FreeBSD 15.1-RELEASE amd64 GENERIC (official 15.1 dist sets; also repro from the stock 15.1 bootonly install ISO's own installer kernel). - loader: bhyveload (NOT UEFI -> not an edk2 firmware issue). - Reproduced with disk = nvme AND virtio-blk; backing = zvol AND raw file; cpu=4 AND cpu=1. bhyve invocation (verbatim, from vm-bhyve) ------------------------------------------ bhyve -c 4 -m 8G -AHPw -U <uuid> -u \ -s 0,hostbridge -s 31,lpc \ -s 0:4:0,virtio-blk,/zroot/vm/web1/disk0.img \ -s 0:5:0,virtio-net,tap0,mac=... \ -l com1,/dev/nmdm-web1.1A web1 (-H yield-on-HLT and -w ignore-unimplemented-MSR are both present.) Steps to reproduce ------------------ 1. On the AMD Ryzen 3700X / 15.1-RELEASE-p1 host, create a FreeBSD 15.1 amd64 guest (bhyveload loader, virtio-blk or nvme disk, virtio-net). 2. Boot the guest. Actual result ------------- Kernel loads, probes devices, mounts root, prints: Trying to mount root from ufs:/dev/ufs/rootfs []... start_init: trying /sbin/init ...then NO further output. bhyve spins ~100% CPU per vCPU indefinitely. No /etc/rc output, no login, no network. Guest is unresponsive (destroyable via bhyvectl --destroy). Expected result --------------- Guest completes /etc/rc and reaches login (as it does on a 14.3 Intel host with the same image). Diagnostic evidence (bhyvectl --get-all, twice ~4s apart while hung) ------------------------------------------------------------------- rip[0] 0xffffffff80bd77b2 (sample 1) rip[0] 0xffffffff80bd77b0 (sample 2) -> RIP oscillates within 2 bytes == tight PAUSE spin loop. -> nm on guest kernel: 0xffffffff80bd77a0 = lock_delay() => spinning in lock_delay(). number of vm exits due to exceptions : 0 -> 0 (rules out MSR/#GP loop) vm exits due to external interrupt : 11390 -> 13712 (~580/s) number of times pause was intercepted : 9415553 -> 10025216 (~600k/s) vm exits due to interrupt window opening: 0 -> 0 vm exits due to nested page fault : 11657 -> 11657 (no growth) Interpretation: ~600k PAUSE/s with RIP fixed in lock_delay() => guest stuck on a spinlock; exceptions=0 => not an MSR loop; interrupt-window=0 with a lock owner waiting => a timer/callout interrupt is not being delivered; no forward progress. Cross-check / isolation (key data point) ---------------------------------------- The SAME 15.1 amd64 guest image, created with the identical procedure, boots CLEANLY to a login prompt on: Intel Core i7-4790 (Haswell, VT-x), FreeBSD 14.3-RELEASE-p15. => Guest image/config is correct; the fault is on the AMD/15.1 host side. Additional observations ------------------------ - Reproduced with cpu=1 (rules out AP-launch/SMP-startup-only bugs; points at the interrupt/timer delivery layer). - Warm reboot AND cold power-cycle of the AMD host do not change behaviour (expected for a deterministic software issue; argues against stuck hardware/firmware state). - Preceded by guest-side "nvme: Resetting controller due to a timeout" during heavy fsync I/O — a SYMPTOM (I/O completion interrupts not arriving), not the cause; reproduces afterwards on every boot including with virtio-blk (no nvme). Workarounds attempted that did NOT help (guest still hangs in lock_delay) ------------------------------------------------------------------------- guest hw.x2apic_enable=0; guest kern.eventtimer.timer=HPET; cpu=1; nvme & virtio-blk; zvol & raw file; vm-bhyve 1.7.4 & 1.7.99.87; vmm kldunload/kldload. (hw.vmm.svm.num_asids=1 made the guest fail to run entirely — inconclusive.) Probable root cause ------------------- A regression in the 15.x vmm(4) AMD SVM path delivering a timer/APIC interrupt (or in event-injection / interrupt-window handling) to the guest. The guest reaches early userland, a thread blocks on a callout/timer, the interrupt is never injected, the lock is never released, another context spins in lock_delay() forever. The 15.x vmm refactor is known to have produced at least one AMD-relevant regression (FreeBSD-EN-25:20.vmm, PCI-passthru IOMMU); this appears to be a separate regression in the same subsystem on the non-passthru interrupt path. Willing to test patches / a rebuilt vmm.ko and provide additional bhyvectl --get-all dumps or a bhyve -G gdb-stub session on request. -- You are receiving this mail because: You are the assignee for the bug.home | help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-296872-27103>
