diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0060-kvm-svm-prepare-for-new-bit-definition-in-nested_ctl.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0060-kvm-svm-prepare-for-new-bit-definition-in-nested_ctl.patch | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0060-kvm-svm-prepare-for-new-bit-definition-in-nested_ctl.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0060-kvm-svm-prepare-for-new-bit-definition-in-nested_ctl.patch new file mode 100644 index 00000000..1c80a72d --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71-e3000/0060-kvm-svm-prepare-for-new-bit-definition-in-nested_ctl.patch @@ -0,0 +1,81 @@ +From 99e4847c8110fd6e3f654cf07ea0e71964760bed Mon Sep 17 00:00:00 2001 +From: Tom Lendacky <thomas.lendacky@amd.com> +Date: Mon, 4 Dec 2017 10:57:24 -0600 +Subject: [PATCH 60/95] kvm: svm: prepare for new bit definition in nested_ctl +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Currently the nested_ctl variable in the vmcb_control_area structure is +used to indicate nested paging support. The nested paging support field +is actually defined as bit 0 of the field. In order to support a new +feature flag the usage of the nested_ctl and nested paging support must +be converted to operate on a single bit. + +Cc: Thomas Gleixner <tglx@linutronix.de> +Cc: Ingo Molnar <mingo@redhat.com> +Cc: "H. Peter Anvin" <hpa@zytor.com> +Cc: Paolo Bonzini <pbonzini@redhat.com> +Cc: "Radim Krčmář" <rkrcmar@redhat.com> +Cc: Joerg Roedel <joro@8bytes.org> +Cc: Borislav Petkov <bp@suse.de> +Cc: x86@kernel.org +Cc: kvm@vger.kernel.org +Cc: linux-kernel@vger.kernel.org +Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> +Signed-off-by: Brijesh Singh <brijesh.singh@amd.com> +Reviewed-by: Borislav Petkov <bp@suse.de> +Signed-off-by: Sudheesh Mavila <sudheesh.mavila@amd.com> +--- + arch/x86/include/asm/svm.h | 2 ++ + arch/x86/kvm/svm.c | 7 ++++--- + 2 files changed, 6 insertions(+), 3 deletions(-) + +diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h +index 78dd9df..c936c98 100644 +--- a/arch/x86/include/asm/svm.h ++++ b/arch/x86/include/asm/svm.h +@@ -146,6 +146,8 @@ struct __attribute__ ((__packed__)) vmcb_control_area { + #define SVM_VM_CR_SVM_LOCK_MASK 0x0008ULL + #define SVM_VM_CR_SVM_DIS_MASK 0x0010ULL + ++#define SVM_NESTED_CTL_NP_ENABLE BIT(0) ++ + struct __attribute__ ((__packed__)) vmcb_seg { + u16 selector; + u16 attrib; +diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c +index f6bebce..3c637b97 100644 +--- a/arch/x86/kvm/svm.c ++++ b/arch/x86/kvm/svm.c +@@ -1330,7 +1330,7 @@ static void init_vmcb(struct vcpu_svm *svm) + + if (npt_enabled) { + /* Setup VMCB for Nested Paging */ +- control->nested_ctl = 1; ++ control->nested_ctl |= SVM_NESTED_CTL_NP_ENABLE; + clr_intercept(svm, INTERCEPT_INVLPG); + clr_exception_intercept(svm, PF_VECTOR); + clr_cr_intercept(svm, INTERCEPT_CR3_READ); +@@ -2960,7 +2960,8 @@ static bool nested_vmcb_checks(struct vmcb *vmcb) + if (vmcb->control.asid == 0) + return false; + +- if (vmcb->control.nested_ctl && !npt_enabled) ++ if ((vmcb->control.nested_ctl & SVM_NESTED_CTL_NP_ENABLE) && ++ !npt_enabled) + return false; + + return true; +@@ -3035,7 +3036,7 @@ static bool nested_svm_vmrun(struct vcpu_svm *svm) + else + svm->vcpu.arch.hflags &= ~HF_HIF_MASK; + +- if (nested_vmcb->control.nested_ctl) { ++ if (nested_vmcb->control.nested_ctl & SVM_NESTED_CTL_NP_ENABLE) { + kvm_mmu_unload(&svm->vcpu); + svm->nested.nested_cr3 = nested_vmcb->control.nested_cr3; + nested_svm_init_mmu_context(&svm->vcpu); +-- +2.7.4 + |