x86/msr: add log messages to MSR state load error paths

Some error paths in the MSR state loading logic don't contain error messages,
which makes debugging them quite hard without adding extra patches to print the
information.

Add two new log messages to the MSR state load path that print information
about the entry that failed to load, for both PV and HVM.

While there also adjust XEN_DOMCTL_set_vcpu_msrs to return -ENXIO in case the
MSR is unhandled or can't be loaded, so it matches the error code used by HVM
MSR loading (and it's less ambiguous than -EINVAL).

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Roger Pau Monné authored and Jan Beulich committed 2024-10-09 09:55:38 +02:00
1 parent dcbf8210f3
commit 2f413e22fa
2 files changed
+15

No files matched your search

+8
View File
@@ -1162,6 +1162,7 @@ long arch_do_domctl(
if ( msr.reserved )
break;
ret = -ENXIO;
switch ( msr.index )
{
case MSR_SPEC_CTRL:
@@ -1170,9 +1171,16 @@ long arch_do_domctl(
case MSR_AMD64_DR0_ADDRESS_MASK:
case MSR_AMD64_DR1_ADDRESS_MASK ... MSR_AMD64_DR3_ADDRESS_MASK:
if ( guest_wrmsr(v, msr.index, msr.value) != X86EMUL_OKAY )
{
printk(XENLOG_G_ERR
"%pv load MSR %#x with value %#lx failed\n",
v, msr.index, msr.value);
break;
}
continue;
}
printk(XENLOG_G_ERR "%pv attempted load of unhandled MSR %#x\n",
v, msr.index);
break;
}
+7
View File
@@ -1535,10 +1535,17 @@ static int cf_check hvm_load_cpu_msrs(struct domain *d, hvm_domain_context_t *h)
rc = guest_wrmsr(v, ctxt->msr[i].index, ctxt->msr[i].val);
if ( rc != X86EMUL_OKAY )
{
printk(XENLOG_G_ERR
"HVM %pv load MSR %#x with value %#lx failed\n",
v, ctxt->msr[i].index, ctxt->msr[i].val);
return -ENXIO;
}
break;
default:
printk(XENLOG_G_ERR "HVM %pv attempted load of unhandled MSR %#x\n",
v, ctxt->msr[i].index);
return -ENXIO;
}
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.