linux/arch/x86/kvm
Sean Christopherson 389ab25216 KVM: nVMX: Pull KVM L0's desired controls directly from vmcs01
When preparing controls for vmcs02, grab KVM's desired controls from
vmcs01's shadow state instead of recalculating the controls from scratch,
or in the secondary execution controls, instead of using the dedicated
cache.  Calculating secondary exec controls is eye-poppingly expensive
due to the guest CPUID checks, hence the dedicated cache, but the other
calculations aren't exactly free either.

Explicitly clear several bits (x2APIC, DESC exiting, and load EFER on
exit) as appropriate as they may be set in vmcs01, whereas the previous
implementation relied on dynamic bits being cleared in the calculator.

Intentionally propagate VM_{ENTRY,EXIT}_LOAD_IA32_PERF_GLOBAL_CTRL from
vmcs01 to vmcs02.  Whether or not PERF_GLOBAL_CTRL is loaded depends on
whether or not perf itself is active, so unless perf stops between the
exit from L1 and entry to L2, vmcs01 will hold the desired value.  This
is purely an optimization as atomic_switch_perf_msrs() will set/clear
the control as needed at VM-Enter, i.e. it avoids two extra VMWRITEs in
the case where perf is active (versus starting with the bits clear in
vmcs02, which was the previous behavior).

Cc: Zeng Guang <guang.zeng@intel.com>
Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-Id: <20210810171952.2758100-3-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
2021-08-13 03:35:15 -04:00
..
mmu Merge branch 'kvm-tdpmmu-fixes' into HEAD 2021-08-13 03:35:01 -04:00
svm Merge branch 'kvm-vmx-secctl' into HEAD 2021-08-10 13:45:26 -04:00
vmx KVM: nVMX: Pull KVM L0's desired controls directly from vmcs01 2021-08-13 03:35:15 -04:00
cpuid.c KVM: x86/pmu: Clear anythread deprecated bit when 0xa leaf is unsupported on the SVM 2021-07-14 12:17:56 -04:00
cpuid.h KVM: x86: Move reverse CPUID helpers to separate header file 2021-04-26 05:27:13 -04:00
debugfs.c KVM: nVMX: nSVM: Add a new VCPU statistic to show if VCPU is in guest mode 2021-06-17 13:09:36 -04:00
emulate.c KVM: x86: Drop "pre_" from enter/leave_smm() helpers 2021-06-17 13:09:35 -04:00
fpu.h KVM: x86: Move FPU register accessors into fpu.h 2021-06-17 13:09:24 -04:00
hyperv.c KVM: x86: hyper-v: Check if guest is allowed to use XMM registers for hypercall input 2021-08-03 06:16:40 -04:00
hyperv.h KVM: x86: hyper-v: Introduce KVM_CAP_HYPERV_ENFORCE_CPUID 2021-06-17 13:09:38 -04:00
i8254.c KVM: x86: Migrate the PIT only if vcpu0 is migrated, not any BSP 2021-08-02 11:01:51 -04:00
i8254.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
i8259.c KVM: x86: Refactor picdev_write() to prevent Spectre-v1/L1TF attacks 2020-01-27 19:59:37 +01:00
ioapic.c x86/kvm: fix vcpu-id indexed array sizes 2021-07-27 16:58:59 -04:00
ioapic.h x86/kvm: remove non-x86 stuff from arch/x86/kvm/ioapic.h 2021-08-02 11:01:46 -04:00
irq_comm.c x86: Fix various typos in comments 2021-03-18 15:31:53 +01:00
irq.c KVM: x86/xen: Add event channel interrupt vector upcall 2021-02-04 14:19:39 +00:00
irq.h kvm/x86: Remove redundant function implementations 2020-05-27 13:11:10 -04:00
Kconfig ARM: 2021-06-28 15:40:51 -07:00
kvm_cache_regs.h KVM: x86: Introduce KVM_GET_SREGS2 / KVM_SET_SREGS2 2021-06-17 13:09:47 -04:00
kvm_emulate.h KVM: x86: Drop "pre_" from enter/leave_smm() helpers 2021-06-17 13:09:35 -04:00
kvm_onhyperv.c KVM: x86: hyper-v: Move the remote TLB flush logic out of vmx 2021-06-17 13:09:36 -04:00
kvm_onhyperv.h KVM: x86: hyper-v: Move the remote TLB flush logic out of vmx 2021-06-17 13:09:36 -04:00
lapic.c KVM: x86: Consolidate APIC base RESET initialization code 2021-08-02 11:01:52 -04:00
lapic.h KVM: x86: Add a return code to kvm_apic_accept_events 2021-06-17 13:09:31 -04:00
Makefile KVM: stats: Add fd-based API to read binary stats data 2021-06-24 11:47:57 -04:00
mmu.h KVM: x86/mmu: Get CR0.WP from MMU, not vCPU, in shadow page fault 2021-06-24 18:00:47 -04:00
mtrr.c KVM: x86: Add helper to consolidate "raw" reserved GPA mask calculations 2021-02-04 09:27:30 -05:00
pmu.c KVM: x86/pmu: Introduce pmc->is_paused to reduce the call time of perf interfaces 2021-08-04 05:55:56 -04:00
pmu.h KVM: x86/pmu: Introduce pmc->is_paused to reduce the call time of perf interfaces 2021-08-04 05:55:56 -04:00
reverse_cpuid.h KVM: SEV: Mask CPUID[0x8000001F].eax according to supported features 2021-04-26 05:27:15 -04:00
trace.h KVM: x86: Introduce trace_kvm_hv_hypercall_done() 2021-08-03 06:16:40 -04:00
tss.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
x86.c KVM: VMX: Reset DR6 only when KVM_DEBUGREG_WONT_EXIT 2021-08-13 03:35:14 -04:00
x86.h KVM: x86/mmu: Use MMU role_regs to get LA57, and drop vCPU LA57 helper 2021-06-24 18:00:45 -04:00
xen.c KVM: xen: do not use struct gfn_to_hva_cache 2021-08-05 03:31:40 -04:00
xen.h KVM: xen: do not use struct gfn_to_hva_cache 2021-08-05 03:31:40 -04:00