The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=15c1f0cc2c1f991fc3895d2a96f48705604d1987
commit 15c1f0cc2c1f991fc3895d2a96f48705604d1987 Author: Mark Johnston <ma...@freebsd.org> AuthorDate: 2023-06-19 19:46:02 +0000 Commit: Mark Johnston <ma...@freebsd.org> CommitDate: 2023-06-19 19:46:02 +0000 bhyve: Register hlt and pause vmexit handlers unconditionally These exit handlers might not be used if the corresponding VM capabilities are not set, but there is no harm in putting them into the handler table regardless. Doing so simplifies initialization code, makes it easier to split vmexit handlers into a separate file, and lets us declare the handler table as const. Reviewed by: corvink, jhb MFC after: 2 weeks Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D40572 --- usr.sbin/bhyve/bhyverun.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/usr.sbin/bhyve/bhyverun.c b/usr.sbin/bhyve/bhyverun.c index f5365a352d07..888fbe1cd8fc 100644 --- a/usr.sbin/bhyve/bhyverun.c +++ b/usr.sbin/bhyve/bhyverun.c @@ -930,7 +930,7 @@ vmexit_ipi(struct vmctx *ctx __unused, struct vcpu *vcpu __unused, return (error); } -static vmexit_handler_t handler[VM_EXITCODE_MAX] = { +static const vmexit_handler_t handler[VM_EXITCODE_MAX] = { [VM_EXITCODE_INOUT] = vmexit_inout, [VM_EXITCODE_INOUT_STR] = vmexit_inout, [VM_EXITCODE_VMX] = vmexit_vmx, @@ -946,6 +946,8 @@ static vmexit_handler_t handler[VM_EXITCODE_MAX] = { [VM_EXITCODE_DEBUG] = vmexit_debug, [VM_EXITCODE_BPT] = vmexit_breakpoint, [VM_EXITCODE_IPI] = vmexit_ipi, + [VM_EXITCODE_HLT] = vmexit_hlt, + [VM_EXITCODE_PAUSE] = vmexit_pause, }; static void @@ -1012,7 +1014,7 @@ num_vcpus_allowed(struct vmctx *ctx, struct vcpu *vcpu) } static void -fbsdrun_set_capabilities(struct vcpu *vcpu, bool bsp) +fbsdrun_set_capabilities(struct vcpu *vcpu) { int err, tmp; @@ -1023,8 +1025,6 @@ fbsdrun_set_capabilities(struct vcpu *vcpu, bool bsp) exit(4); } vm_set_capability(vcpu, VM_CAP_HALT_EXIT, 1); - if (bsp) - handler[VM_EXITCODE_HLT] = vmexit_hlt; } if (get_config_bool_default("x86.vmexit_on_pause", false)) { @@ -1038,8 +1038,6 @@ fbsdrun_set_capabilities(struct vcpu *vcpu, bool bsp) exit(4); } vm_set_capability(vcpu, VM_CAP_PAUSE_EXIT, 1); - if (bsp) - handler[VM_EXITCODE_PAUSE] = vmexit_pause; } if (get_config_bool_default("x86.x2apic", false)) @@ -1130,7 +1128,7 @@ spinup_vcpu(struct vcpu_info *vi, bool bsp) int error; if (!bsp) { - fbsdrun_set_capabilities(vi->vcpu, false); + fbsdrun_set_capabilities(vi->vcpu); /* * Enable the 'unrestricted guest' mode for APs. @@ -1432,7 +1430,7 @@ main(int argc, char *argv[]) exit(4); } - fbsdrun_set_capabilities(bsp, true); + fbsdrun_set_capabilities(bsp); /* Allocate per-VCPU resources. */ vcpu_info = calloc(guest_ncpus, sizeof(*vcpu_info));