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_cpuid_policy;
+ const struct cpuid_policy *p = d->arch.cpuid;
if ( value & ~EFER_KNOWN_MASK )
return "Unknown bits set";
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_cpuid_policy;
-
/* Logic broken out simply to aid readability below. */
mce = p->basic.mce || p->basic.mca;
vmxe = p->basic.vmx && (restore || nestedhvm_enabled(d));
X86_CR4_PCE |
(p->basic.fxsr ? X86_CR4_OSFXSR : 0) |
(p->basic.sse ? X86_CR4_OSXMMEXCPT : 0) |
+ (p->feat.umip ? X86_CR4_UMIP : 0) |
(vmxe ? X86_CR4_VMXE : 0) |
(p->feat.fsgsbase ? X86_CR4_FSGSBASE : 0) |
(p->basic.pcid ? X86_CR4_PCIDE : 0) |
(p->basic.xsave ? X86_CR4_OSXSAVE : 0) |
(p->feat.smep ? X86_CR4_SMEP : 0) |
(p->feat.smap ? X86_CR4_SMAP : 0) |
- (p->feat.umip ? X86_CR4_UMIP : 0) |
(p->feat.pku ? X86_CR4_PKE : 0));
}