|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging-4.9] x86/hvm: Fix bit checking for CR4 and MSR_EFER
commit 04f7fbcc8fcab7f3a59e33798b74582b55dd735a
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Fri Feb 1 12:07:21 2019 +0100
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Fri Feb 1 12:07:21 2019 +0100
x86/hvm: Fix bit checking for CR4 and MSR_EFER
Before the cpuid_policy logic came along, %cr4/EFER auditing on migrate-in
was
complicated, because at that point no CPUID information had been set for the
guest. Auditing against the host CPUID was better than nothing, but not
ideal.
Similarly at the time, PVHv1 lacked the "CPUID passed through from hardware"
behaviour with PV guests had, and PVH dom0 had to be special-cased to be
able
to boot.
Order of information in the migration stream is still an issue (hence we
still
need to keep the restore parameter to cope with a nested virt corner case
for
%cr4), but since Xen 4.9, all domains start with a suitable CPUID policy,
which is a more appropriate upper bound than host_cpuid_policy.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
Reviewed-by: Wei Liu <wei.liu2@xxxxxxxxxx>
master commit: 9d8c1d1814b744d0fb41085463db5d8ae025607e
master date: 2019-01-29 11:28:11 +0000
---
xen/arch/x86/hvm/hvm.c | 14 ++------------
1 file changed, 2 insertions(+), 12 deletions(-)
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index 7495d249c4..0cbb0f577b 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -882,12 +882,7 @@ const char *hvm_efer_valid(const struct vcpu *v, uint64_t
value,
signed int cr0_pg)
{
const struct domain *d = v->domain;
- const struct cpuid_policy *p;
-
- if ( cr0_pg < 0 && !is_hardware_domain(d) )
- p = d->arch.cpuid;
- else
- p = &host_policy;
+ const struct cpuid_policy *p = d->arch.cpuid;
if ( value & ~EFER_KNOWN_MASK )
return "Unknown bits set";
@@ -928,14 +923,9 @@ const char *hvm_efer_valid(const struct vcpu *v, uint64_t
value,
unsigned long hvm_cr4_guest_valid_bits(const struct vcpu *v, bool restore)
{
const struct domain *d = v->domain;
- const struct cpuid_policy *p;
+ const struct cpuid_policy *p = d->arch.cpuid;
bool mce, vmxe;
- if ( !restore && !is_hardware_domain(d) )
- p = d->arch.cpuid;
- else
- p = &host_policy;
-
/* Logic broken out simply to aid readability below. */
mce = p->basic.mce || p->basic.mca;
vmxe = p->basic.vmx && (restore || nestedhvm_enabled(d));
--
generated by git-patchbot for /home/xen/git/xen.git#staging-4.9
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |