Move svm_cpu_data into VAC. TODO: Explain why this data should be shared between KVMs and should be made global by moving it into VAC. Signed-off-by: Venkatesh Srinivas <venkateshs@xxxxxxxxxxxx> Signed-off-by: Anish Ghulati <aghulati@xxxxxxxxxx> --- arch/x86/kvm/svm/svm.c | 9 ++++++++- arch/x86/kvm/svm/svm.h | 16 +--------------- arch/x86/kvm/svm/vac.c | 5 +++++ arch/x86/kvm/svm/vac.h | 23 +++++++++++++++++++++++ 4 files changed, 37 insertions(+), 16 deletions(-) create mode 100644 arch/x86/kvm/svm/vac.h diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index f0a5cc43c023..d53808d8ec37 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -234,7 +234,14 @@ static u8 rsm_ins_bytes[] = "\x0f\xaa"; static unsigned long iopm_base; -DEFINE_PER_CPU(struct svm_cpu_data, svm_data); +struct kvm_ldttss_desc { + u16 limit0; + u16 base0; + unsigned base1:8, type:5, dpl:2, p:1; + unsigned limit1:4, zero0:3, g:1, base2:8; + u32 base3; + u32 zero1; +} __attribute__((packed)); /* * Only MSR_TSC_AUX is switched via the user return hook. EFER is switched via diff --git a/arch/x86/kvm/svm/svm.h b/arch/x86/kvm/svm/svm.h index 436632706848..7fc652b1b92d 100644 --- a/arch/x86/kvm/svm/svm.h +++ b/arch/x86/kvm/svm/svm.h @@ -24,6 +24,7 @@ #include "cpuid.h" #include "kvm_cache_regs.h" +#include "vac.h" #define __sme_page_pa(x) __sme_set(page_to_pfn(x) << PAGE_SHIFT) @@ -291,21 +292,6 @@ struct vcpu_svm { bool guest_gif; }; -struct svm_cpu_data { - u64 asid_generation; - u32 max_asid; - u32 next_asid; - u32 min_asid; - - struct page *save_area; - unsigned long save_area_pa; - - struct vmcb *current_vmcb; - - /* index = sev_asid, value = vmcb pointer */ - struct vmcb **sev_vmcbs; -}; - DECLARE_PER_CPU(struct svm_cpu_data, svm_data); void recalc_intercepts(struct vcpu_svm *svm); diff --git a/arch/x86/kvm/svm/vac.c b/arch/x86/kvm/svm/vac.c index 4aabf16d2fc0..3e79279c6b34 100644 --- a/arch/x86/kvm/svm/vac.c +++ b/arch/x86/kvm/svm/vac.c @@ -1,2 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only +#include <linux/percpu-defs.h> + +#include "vac.h" + +DEFINE_PER_CPU(struct svm_cpu_data, svm_data); diff --git a/arch/x86/kvm/svm/vac.h b/arch/x86/kvm/svm/vac.h new file mode 100644 index 000000000000..2d42e4472703 --- /dev/null +++ b/arch/x86/kvm/svm/vac.h @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0-only +// +#ifndef ARCH_X86_KVM_SVM_VAC_H +#define ARCH_X86_KVM_SVM_VAC_H + +#include "../vac.h" + +struct svm_cpu_data { + u64 asid_generation; + u32 max_asid; + u32 next_asid; + u32 min_asid; + + struct page *save_area; + unsigned long save_area_pa; + + struct vmcb *current_vmcb; + + /* index = sev_asid, value = vmcb pointer */ + struct vmcb **sev_vmcbs; +}; + +#endif // ARCH_X86_KVM_SVM_VAC_H -- 2.42.0.869.gea05f2083d-goog