bhyve: Suppress unimplemented MSR related warnings

When using bhyve on x86, rdmsr and wrmsr can emit many warnings when
dealing with unimplemented MSRs. An option x86.verbosemsr is created to
control these warnings. By default, the MSR related warnings are
suppressed to avoid spamming the console.

Sponsored by: Netflix
Reviewed by: imp, jhb
Pull Request: https://github.com/freebsd/freebsd-src/pull/1611
This commit is contained in:
brendabrandy 2025-03-11 16:19:58 -07:00 committed by Warner Losh
parent 3209f63851
commit a27328ea39
3 changed files with 16 additions and 4 deletions

View file

@ -63,6 +63,7 @@ bhyve_init_config(void)
set_config_bool("acpi_tables_in_memory", true);
set_config_value("memory.size", "256M");
set_config_bool("x86.strictmsr", true);
set_config_bool("x86.verbosemsr", false);
set_config_value("lpc.fwcfg", "bhyve");
}

View file

@ -107,8 +107,11 @@ vmexit_rdmsr(struct vmctx *ctx __unused, struct vcpu *vcpu,
val = 0;
error = emulate_rdmsr(vcpu, vme->u.msr.code, &val);
if (error != 0) {
EPRINTLN("rdmsr to register %#x on vcpu %d",
vme->u.msr.code, vcpu_id(vcpu));
if (get_config_bool("x86.strictmsr") ||
get_config_bool("x86.verbosemsr")) {
EPRINTLN("rdmsr to register %#x on vcpu %d",
vme->u.msr.code, vcpu_id(vcpu));
}
if (get_config_bool("x86.strictmsr")) {
vm_inject_gp(vcpu);
return (VMEXIT_CONTINUE);
@ -137,8 +140,11 @@ vmexit_wrmsr(struct vmctx *ctx __unused, struct vcpu *vcpu,
error = emulate_wrmsr(vcpu, vme->u.msr.code, vme->u.msr.wval);
if (error != 0) {
EPRINTLN("wrmsr to register %#x(%#lx) on vcpu %d",
vme->u.msr.code, vme->u.msr.wval, vcpu_id(vcpu));
if (get_config_bool("x86.strictmsr") ||
get_config_bool("x86.verbosemsr")) {
EPRINTLN("wrmsr to register %#x(%#lx) on vcpu %d",
vme->u.msr.code, vme->u.msr.wval, vcpu_id(vcpu));
}
if (get_config_bool("x86.strictmsr")) {
vm_inject_gp(vcpu);
return (VMEXIT_CONTINUE);

View file

@ -240,6 +240,11 @@ By default, writes are ignored and reads return all bits set.
Inject a general protection fault if a guest accesses a Model Specific
Register (MSR) that is not emulated.
If this is false, writes are ignored and reads return zero.
.It Va x86.verbosemsr Ta bool Ta false Ta
Enable verbose MSR print out. When this option is true,
messages related to reading from (rdmsr) and writing to (wrmsr)
MSRs on virtual CPUs will be printed out. This can be useful for
debugging purposes.
.It Va x86.vmexit_on_hlt Ta bool Ta false Ta
Force a VM exit when a guest CPU executes the
.Dv HLT