aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.9.21/0081-KVM-x86-Update-cpuid-properly-when-CR4.OSXAVE-or-CR4.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.9.21/0081-KVM-x86-Update-cpuid-properly-when-CR4.OSXAVE-or-CR4.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.9.21/0081-KVM-x86-Update-cpuid-properly-when-CR4.OSXAVE-or-CR4.patch63
1 files changed, 0 insertions, 63 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.9.21/0081-KVM-x86-Update-cpuid-properly-when-CR4.OSXAVE-or-CR4.patch b/common/recipes-kernel/linux/linux-yocto-4.9.21/0081-KVM-x86-Update-cpuid-properly-when-CR4.OSXAVE-or-CR4.patch
deleted file mode 100644
index f44b77a1..00000000
--- a/common/recipes-kernel/linux/linux-yocto-4.9.21/0081-KVM-x86-Update-cpuid-properly-when-CR4.OSXAVE-or-CR4.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From a41340930388022d17c5acfa7c00edc80fa486f6 Mon Sep 17 00:00:00 2001
-From: Wei Huang <wei@redhat.com>
-Date: Tue, 1 May 2018 09:49:54 -0500
-Subject: [PATCH 81/93] KVM: x86: Update cpuid properly when CR4.OSXAVE or
- CR4.PKE is changed
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-commit c4d2188206bafa177ea58e9a25b952baa0bf7712 upstream.
-
-The CPUID bits of OSXSAVE (function=0x1) and OSPKE (func=0x7, leaf=0x0)
-allows user apps to detect if OS has set CR4.OSXSAVE or CR4.PKE. KVM is
-supposed to update these CPUID bits when CR4 is updated. Current KVM
-code doesn't handle some special cases when updates come from emulator.
-Here is one example:
-
- Step 1: guest boots
- Step 2: guest OS enables XSAVE ==> CR4.OSXSAVE=1 and CPUID.OSXSAVE=1
- Step 3: guest hot reboot ==> QEMU reset CR4 to 0, but CPUID.OSXAVE==1
- Step 4: guest os checks CPUID.OSXAVE, detects 1, then executes xgetbv
-
-Step 4 above will cause an #UD and guest crash because guest OS hasn't
-turned on OSXAVE yet. This patch solves the problem by comparing the the
-old_cr4 with cr4. If the related bits have been changed,
-kvm_update_cpuid() needs to be called.
-
-Signed-off-by: Wei Huang <wei@redhat.com>
-Reviewed-by: Bandan Das <bsd@redhat.com>
-Cc: stable@vger.kernel.org
-Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/x86/kvm/x86.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
-index c531231..27e6cf0 100644
---- a/arch/x86/kvm/x86.c
-+++ b/arch/x86/kvm/x86.c
-@@ -7201,6 +7201,7 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
- {
- struct msr_data apic_base_msr;
- int mmu_reset_needed = 0;
-+ int cpuid_update_needed = 0;
- int pending_vec, max_bits, idx;
- struct desc_ptr dt;
-
-@@ -7232,8 +7233,10 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu,
- vcpu->arch.cr0 = sregs->cr0;
-
- mmu_reset_needed |= kvm_read_cr4(vcpu) != sregs->cr4;
-+ cpuid_update_needed |= ((kvm_read_cr4(vcpu) ^ sregs->cr4) &
-+ (X86_CR4_OSXSAVE | X86_CR4_PKE));
- kvm_x86_ops->set_cr4(vcpu, sregs->cr4);
-- if (sregs->cr4 & (X86_CR4_OSXSAVE | X86_CR4_PKE))
-+ if (cpuid_update_needed)
- kvm_update_cpuid(vcpu);
-
- idx = srcu_read_lock(&vcpu->kvm->srcu);
---
-2.7.4
-