mirror of
https://github.com/torvalds/linux.git
synced 2024-12-04 18:13:04 +00:00
KVM: VMX: Fold ept_update_paging_mode_cr4() into its caller
ept_update_paging_mode_cr4() accesses vcpu->arch.cr4 directly, which usually needs to be accessed via kvm_read_cr4(). In this case, we can't, since cr4 is in the process of being updated. Instead of adding inane comments, fold the function into its caller (vmx_set_cr4), so it can use the not-yet-committed cr4 directly. Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
ce03e4f21a
commit
bc23008b61
@ -1680,16 +1680,6 @@ static void ept_update_paging_mode_cr0(unsigned long *hw_cr0,
|
|||||||
*hw_cr0 &= ~X86_CR0_WP;
|
*hw_cr0 &= ~X86_CR0_WP;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ept_update_paging_mode_cr4(unsigned long *hw_cr4,
|
|
||||||
struct kvm_vcpu *vcpu)
|
|
||||||
{
|
|
||||||
if (!is_paging(vcpu)) {
|
|
||||||
*hw_cr4 &= ~X86_CR4_PAE;
|
|
||||||
*hw_cr4 |= X86_CR4_PSE;
|
|
||||||
} else if (!(vcpu->arch.cr4 & X86_CR4_PAE))
|
|
||||||
*hw_cr4 &= ~X86_CR4_PAE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void vmx_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)
|
static void vmx_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)
|
||||||
{
|
{
|
||||||
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
struct vcpu_vmx *vmx = to_vmx(vcpu);
|
||||||
@ -1767,8 +1757,14 @@ static void vmx_set_cr4(struct kvm_vcpu *vcpu, unsigned long cr4)
|
|||||||
KVM_RMODE_VM_CR4_ALWAYS_ON : KVM_PMODE_VM_CR4_ALWAYS_ON);
|
KVM_RMODE_VM_CR4_ALWAYS_ON : KVM_PMODE_VM_CR4_ALWAYS_ON);
|
||||||
|
|
||||||
vcpu->arch.cr4 = cr4;
|
vcpu->arch.cr4 = cr4;
|
||||||
if (enable_ept)
|
if (enable_ept) {
|
||||||
ept_update_paging_mode_cr4(&hw_cr4, vcpu);
|
if (!is_paging(vcpu)) {
|
||||||
|
hw_cr4 &= ~X86_CR4_PAE;
|
||||||
|
hw_cr4 |= X86_CR4_PSE;
|
||||||
|
} else if (!(cr4 & X86_CR4_PAE)) {
|
||||||
|
hw_cr4 &= ~X86_CR4_PAE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
vmcs_writel(CR4_READ_SHADOW, cr4);
|
vmcs_writel(CR4_READ_SHADOW, cr4);
|
||||||
vmcs_writel(GUEST_CR4, hw_cr4);
|
vmcs_writel(GUEST_CR4, hw_cr4);
|
||||||
|
Loading…
Reference in New Issue
Block a user