Page MenuHomeFreeBSD

bhyve: Sleep briefly in the VMEXIT_DEBUG handler
ClosedPublic

Authored by markj on Mar 20 2023, 2:57 PM.
Tags
None
Referenced Files
F168824262: D39174.id.diff
Sun, Aug 30, 8:06 AM
F168804609: D39174.id119246.diff
Sun, Aug 30, 6:05 AM
F168760785: D39174.diff
Sun, Aug 30, 12:42 AM
Unknown Object (File)
Fri, Aug 28, 1:03 AM
Unknown Object (File)
Thu, Aug 27, 6:50 PM
Unknown Object (File)
Wed, Aug 26, 12:54 AM
Unknown Object (File)
Tue, Aug 25, 1:17 PM
Unknown Object (File)
Tue, Aug 25, 10:18 AM
Subscribers

Details

Summary

As of commit 0bda8d3e9f7a ("vmm: permit some IPIs to be handled by
userspace") and commit 9cc9abf409cc ("bhyve: create all vcpus on
startup"), we have a misbehaviour where AP vCPU threads spin until they
receive a SIPI. In particular, since they are "suspended", they simply
call the VMEXIT_DEBUG handler in a loop, but the handler is a no-op by
default.

This is tricky to fix since the gdb stub isn't aware of whether a given
vCPU is supposed to be running. For 13.2's sake, introduce a simple
workaround wherein the VMEXIT_DEBUG handler sleeps for a short period.
This ensures that host CPU usage remains sane when VMs are starting.

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Skipped
Unit
Tests Skipped
Build Status
Buildable 50484
Build 47375: arc lint + arc unit