Linus, The following changes since commit 197b6b60ae7bc51dd0814953c562833143b292aa: Linux 6.3-rc4 (2023-03-26 14:40:20 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/virt/kvm/kvm.git tags/for-linus for you to fetch changes up to b3c98052d46948a8d65d2778c7f306ff38366aac: Merge tag 'kvm-x86-vmx-6.4' of https://github.com/kvm-x86/linux into HEAD (2023-04-26 15:56:51 -0400) RISC-V changes are missing because there were KVM changes in Palmer Dabbelt's arch pull request; it has just been committed and it has some conflicts, but I did my tests last week before you had pulled from Palmer. I have asked the RISC-V people to use shared topic branches in the future. There are two other conflicts in this pull request: - a trivial one in arch/arm64/kvm/arm.c that is simply due to an extra "case" label added in 6.3-rc. - a semantic one that git *won't* catch, due to a function that has been renamed (hv_remote_flush_tlb -> hv_flush_remote_tlbs). See end of this message for the resolution (patch to be squashed into the merge). If you have CONFIG_HYPERV enabled, incorrect resolution will cause a compile failure right away. Thanks, Paolo ---------------------------------------------------------------- s390: * More phys_to_virt conversions * Improvement of AP management for VSIE (nested virtualization) ARM64: * Numerous fixes for the pathological lock inversion issue that plagued KVM/arm64 since... forever. * New framework allowing SMCCC-compliant hypercalls to be forwarded to userspace, hopefully paving the way for some more features being moved to VMMs rather than be implemented in the kernel. * Large rework of the timer code to allow a VM-wide offset to be applied to both virtual and physical counters as well as a per-timer, per-vcpu offset that complements the global one. This last part allows the NV timer code to be implemented on top. * A small set of fixes to make sure that we don't change anything affecting the EL1&0 translation regime just after having having taken an exception to EL2 until we have executed a DSB. This ensures that speculative walks started in EL1&0 have completed. * The usual selftest fixes and improvements. KVM x86 changes for 6.4: * Optimize CR0.WP toggling by avoiding an MMU reload when TDP is enabled, and by giving the guest control of CR0.WP when EPT is enabled on VMX (VMX-only because SVM doesn't support per-bit controls) * Add CR0/CR4 helpers to query single bits, and clean up related code where KVM was interpreting kvm_read_cr4_bits()'s "unsigned long" return as a bool * Move AMD_PSFD to cpufeatures.h and purge KVM's definition * Avoid unnecessary writes+flushes when the guest is only adding new PTEs * Overhaul .sync_page() and .invlpg() to utilize .sync_page()'s optimizations when emulating invalidations * Clean up the range-based flushing APIs * Revamp the TDP MMU's reaping of Accessed/Dirty bits to clear a single A/D bit using a LOCK AND instead of XCHG, and skip all of the "handle changed SPTE" overhead associated with writing the entire entry * Track the number of "tail" entries in a pte_list_desc to avoid having to walk (potentially) all descriptors during insertion and deletion, which gets quite expensive if the guest is spamming fork() * Disallow virtualizing legacy LBRs if architectural LBRs are available, the two are mutually exclusive in hardware * Disallow writes to immutable feature MSRs (notably PERF_CAPABILITIES) after KVM_RUN, similar to CPUID features * Overhaul the vmx_pmu_caps selftest to better validate PERF_CAPABILITIES * Apply PMU filters to emulated events and add test coverage to the pmu_event_filter selftest x86 AMD: * Add support for virtual NMIs * Fixes for edge cases related to virtual interrupts x86 Intel: * Don't advertise XTILE_CFG in KVM_GET_SUPPORTED_CPUID if XTILE_DATA is not being reported due to userspace not opting in via prctl() * Fix a bug in emulation of ENCLS in compatibility mode * Allow emulation of NOP and PAUSE for L2 * AMX selftests improvements * Misc cleanups MIPS: * Constify MIPS's internal callbacks (a leftover from the hardware enabling rework that landed in 6.3) Generic: * Drop unnecessary casts from "void *" throughout kvm_main.c * Tweak the layout of "struct kvm_mmu_memory_cache" to shrink the struct size by 8 bytes on 64-bit kernels by utilizing a padding hole Documentation: * Fix goof introduced by the conversion to rST ---------------------------------------------------------------- Aaron Lewis (14): KVM: selftests: Assert that XTILE is XSAVE-enabled KVM: selftests: Assert that both XTILE{CFG,DATA} are XSAVE-enabled KVM: selftests: Move XSAVE and OSXSAVE CPUID checks into AMX's init_regs() KVM: selftests: Check that the palette table exists before using it KVM: selftests: Check that XTILEDATA supports XFD KVM: x86/pmu: Prevent the PMU from counting disallowed events KVM: x86: Add a helper to handle filtering of unpermitted XCR0 features KVM: selftests: Move XGETBV and XSETBV helpers to common code KVM: selftests: Add all known XFEATURE masks to common code KVM: selftests: Add test to verify KVM's supported XCR0 KVM: selftests: Add a common helper for the PMU event filter guest code KVM: selftests: Add helpers for PMC asserts in PMU event filter test KVM: selftests: Print detailed info in PMU event filter asserts KVM: selftests: Test the PMU event "Instructions retired" Ackerley Tng (1): KVM: selftests: Adjust VM's initial stack address to align with SysV ABI spec Anish Moorthy (1): KVM: selftests: Fix nsec to sec conversion in demand_paging_test Binbin Wu (5): KVM: x86: Add helpers to query individual CR0/CR4 bits KVM: x86: Use boolean return value for is_{pae,pse,paging}() KVM: SVM: Use kvm_is_cr4_bit_set() to query SMAP/SMEP in "can emulate" KVM: x86: Change return type of is_long_mode() to bool KVM: VMX: Use is_64_bit_mode() to check 64-bit mode in SGX handler Colin Ian King (2): KVM: selftests: Fix spelling mistake "KVM_HYPERCAL_EXIT_SMC" -> "KVM_HYPERCALL_EXIT_SMC" KVM: selftests: Fix spelling mistake "perrmited" -> "permitted" David Matlack (3): KVM: x86/mmu: Collapse kvm_flush_remote_tlbs_with_{range,address}() together KVM: x86/mmu: Rename kvm_flush_remote_tlbs_with_address() KVM: x86/mmu: Use gfn_t in kvm_flush_remote_tlbs_range() Emanuele Giuseppe Esposito (3): kvm: vmx: Add IA32_FLUSH_CMD guest support kvm: svm: Add IA32_FLUSH_CMD guest support kvm: x86: Advertise FLUSH_L1D to user space Hao Ge (1): KVM: selftests: Close opened file descriptor in stable_tsc_check_supported() Ivan Orlov (1): KVM: selftests: Add 'malloc' failure check in vcpu_save_state Jun Miao (1): KVM: Fix comments that refer to the non-existent install_new_memslots() Lai Jiangshan (16): KVM: x86/mmu: Detect write #PF to shadow pages during FNAME(fetch) walk KVM: x86/mmu: Remove FNAME(is_self_change_mapping) KVM: x86/mmu: Use 64-bit address to invalidate to fix a subtle bug KVM: x86/mmu: Move the check in FNAME(sync_page) as kvm_sync_page_check() KVM: x86/mmu: Check mmu->sync_page pointer in kvm_sync_page_check() KVM: x86/mmu: Set mmu->sync_page as NULL for direct paging KVM: x86/mmu: Move the code out of FNAME(sync_page)'s loop body into mmu.c KVM: x86/mmu: Reduce the update to the spte in FNAME(sync_spte) kvm: x86/mmu: Use KVM_MMU_ROOT_XXX for kvm_mmu_invalidate_addr() KVM: x86/mmu: Use kvm_mmu_invalidate_addr() in kvm_mmu_invpcid_gva() KVM: x86/mmu: Use kvm_mmu_invalidate_addr() in nested_ept_invalidate_addr() KVM: x86/mmu: Allow the roots to be invalid in FNAME(invlpg) KVM: x86/mmu: Remove FNAME(invlpg) and use FNAME(sync_spte) to update vTLB instead. kvm: x86/mmu: Remove @no_dirty_log from FNAME(prefetch_gpte) KVM: x86/mmu: Skip calling mmu->sync_spte() when the spte is 0 KVM: x86/mmu: Track tail count in pte_list_desc to optimize guest fork() Li kunyu (1): kvm: kvm_main: Remove unnecessary (void*) conversions Like Xu (6): KVM: selftests: Add a helper to read kvm boolean module parameters KVM: selftests: Report enable_pmu module value when test is skipped KVM: x86/pmu: Zero out pmu->all_valid_pmc_idx each time it's refreshed KVM: x86/pmu: Rename pmc_is_enabled() to pmc_is_globally_enabled() KVM: x86/pmu: Rewrite reprogram_counters() to improve performance KVM: x86/pmu: Fix a typo in kvm_pmu_request_counter_reprogam() Marc Zyngier (33): KVM: arm64: timers: Use a per-vcpu, per-timer accumulator for fractional ns arm64: Add CNTPOFF_EL2 register definition arm64: Add HAS_ECV_CNTPOFF capability KVM: arm64: timers: Use CNTPOFF_EL2 to offset the physical timer KVM: arm64: timers: Allow physical offset without CNTPOFF_EL2 KVM: arm64: Expose {un,}lock_all_vcpus() to the rest of KVM KVM: arm64: timers: Allow userspace to set the global counter offset KVM: arm64: timers: Allow save/restoring of the physical timer KVM: arm64: timers: Rationalise per-vcpu timer init KVM: arm64: timers: Abstract per-timer IRQ access KVM: arm64: timers: Move the timer IRQs into arch_timer_vm_data KVM: arm64: Elide kern_hyp_va() in VHE-specific parts of the hypervisor KVM: arm64: timers: Fast-track CNTPCT_EL0 trap handling KVM: arm64: timers: Abstract the number of valid timers per vcpu KVM: arm64: Document KVM_ARM_SET_CNT_OFFSETS and co KVM: arm64: nv: timers: Add a per-timer, per-vcpu offset KVM: arm64: nv: timers: Support hyp timer emulation KVM: arm64: selftests: Add physical timer registers to the sysreg list KVM: arm64: selftests: Deal with spurious timer interrupts KVM: arm64: selftests: Augment existing timer test to handle variable offset KVM: arm64: Expose SMC/HVC width to userspace KVM: arm64: nvhe: Synchronise with page table walker on vcpu run KVM: arm64: Handle 32bit CNTPCTSS traps KVM: arm64: nvhe: Synchronise with page table walker on TLBI KVM: arm64: pkvm: Document the side effects of kvm_flush_dcache_to_poc() KVM: arm64: vhe: Synchronise with page table walker on MMU update KVM: arm64: vhe: Drop extra isb() on guest exit Merge branch kvm-arm64/lock-inversion into kvmarm-master/next Merge branch kvm-arm64/timer-vm-offsets into kvmarm-master/next Merge branch kvm-arm64/selftest/lpa into kvmarm-master/next Merge branch kvm-arm64/selftest/misc-6.4 into kvmarm-master/next Merge branch kvm-arm64/smccc-filtering into kvmarm-master/next Merge branch kvm-arm64/spec-ptw into kvmarm-master/next Mark Brown (1): KVM: selftests: Comment newly defined aarch64 ID registers Mathias Krause (7): KVM: x86/mmu: Fix comment typo KVM: x86: Do not unload MMU roots when only toggling CR0.WP with TDP enabled KVM: x86: Ignore CR0.WP toggles in non-paging mode KVM: x86: Make use of kvm_read_cr*_bits() when testing bits KVM: VMX: Make CR0.WP a guest owned bit KVM: x86: Shrink struct kvm_pmu KVM: Shrink struct kvm_mmu_memory_cache Maxim Levitsky (2): KVM: nSVM: Raise event on nested VM exit if L1 doesn't intercept IRQs KVM: SVM: add wrappers to enable/disable IRET interception Mingwei Zhang (6): KVM: selftests: Add a fully functional "struct xstate" for x86 KVM: selftests: Fix an error in comment of amx_test KVM: selftests: Enable checking on xcomp_bv in amx_test KVM: selftests: Add check of CR0.TS in the #NM handler in amx_test KVM: selftests: Assert that XTILE_DATA is set in IA32_XFD on #NM KVM: selftests: Verify XTILE_DATA in XSTATE isn't affected by IA32_XFD Nico Boehr (2): KVM: s390: interrupt: fix virtual-physical confusion for next alert GISA KVM: s390: pci: fix virtual-physical confusion on module unload/load Oliver Upton (20): KVM: arm64: Avoid vcpu->mutex v. kvm->lock inversion in CPU_ON KVM: arm64: Avoid lock inversion when setting the VM register width KVM: arm64: Use config_lock to protect data ordered against KVM_RUN KVM: arm64: Use config_lock to protect vgic state KVM: x86: Redefine 'longmode' as a flag for KVM_EXIT_HYPERCALL KVM: arm64: Add a helper to check if a VM has ran once KVM: arm64: Add vm fd device attribute accessors KVM: arm64: Rename SMC/HVC call handler to reflect reality KVM: arm64: Start handling SMCs from EL1 KVM: arm64: Refactor hvc filtering to support different actions KVM: arm64: Use a maple tree to represent the SMCCC filter KVM: arm64: Add support for KVM_EXIT_HYPERCALL KVM: arm64: Introduce support for userspace SMCCC filtering KVM: arm64: Return NOT_SUPPORTED to guest for unknown PSCI version KVM: arm64: Let errors from SMCCC emulation to reach userspace KVM: selftests: Add a helper for SMCCC calls with SMC instruction KVM: selftests: Add test for SMCCC filter KVM: arm64: Prevent userspace from handling SMC64 arch range KVM: arm64: Test that SMC64 arch calls are reserved KVM: arm64: vgic: Don't acquire its_lock before config_lock Paolo Bonzini (10): KVM: x86/mmu: Avoid indirect call for get_cr3 Merge tag 'kvm-s390-next-6.4-1' of https://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux into HEAD Merge tag 'kvmarm-6.4' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD Merge tag 'kvm-x86-generic-6.4' of https://github.com/kvm-x86/linux into HEAD Merge tag 'kvm-x86-misc-6.4' of https://github.com/kvm-x86/linux into HEAD Merge tag 'kvm-x86-mmu-6.4' of https://github.com/kvm-x86/linux into HEAD Merge tag 'kvm-x86-pmu-6.4' of https://github.com/kvm-x86/linux into HEAD Merge tag 'kvm-x86-selftests-6.4' of https://github.com/kvm-x86/linux into HEAD Merge tag 'kvm-x86-svm-6.4' of https://github.com/kvm-x86/linux into HEAD Merge tag 'kvm-x86-vmx-6.4' of https://github.com/kvm-x86/linux into HEAD Pierre Morel (1): KVM: s390: vsie: clarifications on setting the APCB Reiji Watanabe (2): KVM: arm64: Acquire mp_state_lock in kvm_arch_vcpu_ioctl_vcpu_init() KVM: arm64: Have kvm_psci_vcpu_on() use WRITE_ONCE() to update mp_state Robert Hoo (1): KVM: x86: Remove a redundant guest cpuid check in kvm_set_cr4() Ryan Roberts (3): KVM: selftests: Fixup config fragment for access_tracking_perf_test KVM: selftests: arm64: Fix pte encode/decode for PA bits > 48 KVM: selftests: arm64: Fix ttbr0_el1 encoding for PA bits > 48 Santosh Shukla (5): KVM: nSVM: Don't sync vmcb02 V_IRQ back to vmcb12 if KVM (L0) is intercepting VINTR KVM: nSVM: Disable intercept of VINTR if saved L1 host RFLAGS.IF is 0 KVM: SVM: Add definitions for new bits in VMCB::int_ctrl related to vNMI KVM: x86: Add support for SVM's Virtual NMI KVM: nSVM: Implement support for nested VNMI Sean Christopherson (54): KVM: x86/mmu: Use EMULTYPE flag to track write #PFs to shadow pages KVM: nVMX: Move EVMCS1_SUPPORT_* macros to hyperv.c KVM: VMX: Stub out enable_evmcs static key for CONFIG_HYPERV=n KVM: VMX: Rename "KVM is using eVMCS" static key to match its wrapper KVM: x86/mmu: Sanity check input to kvm_mmu_free_roots() KVM: x86/mmu: Rename slot rmap walkers to add clarity and clean up code KVM: x86/mmu: Replace comment with an actual lockdep assertion on mmu_lock KVM: x86/mmu: Clean up mmu.c functions that put return type on separate line KVM: SVM: Fix benign "bool vs. int" comparison in svm_set_cr0() KVM: x86: Raise an event request when processing NMIs if an NMI is pending KVM: x86: Tweak the code and comment related to handling concurrent NMIs KVM: x86: Save/restore all NMIs when multiple NMIs are pending x86/cpufeatures: Redefine synthetic virtual NMI bit as AMD's "real" vNMI KVM: x86: Route pending NMIs from userspace through process_nmi() x86: KVM: Add common feature flag for AMD's PSFD KVM: x86: Assert that the emulator doesn't load CS with garbage in !RM KVM: MIPS: Make kvm_mips_callbacks const KVM: x86/pmu: Disallow legacy LBRs if architectural LBRs are available KVM: x86: Revert MSR_IA32_FLUSH_CMD.FLUSH_L1D enabling KVM: VMX: Passthrough MSR_IA32_PRED_CMD based purely on host+guest CPUID KVM: SVM: Passthrough MSR_IA32_PRED_CMD based purely on host+guest CPUID KVM: x86: Move MSR_IA32_PRED_CMD WRMSR emulation to common code KVM: x86: Virtualize FLUSH_L1D and passthrough MSR_IA32_FLUSH_CMD KVM: SVM: Return the local "r" variable from svm_set_msr() KVM: x86: Rename kvm_init_msr_list() to clarify it inits multiple lists KVM: x86: Add a helper to query whether or not a vCPU has ever run KVM: x86: Add macros to track first...last VMX feature MSRs KVM: x86: Generate set of VMX feature MSRs using first/last definitions KVM: selftests: Split PMU caps sub-tests to avoid writing MSR after KVM_RUN KVM: x86: Disallow writes to immutable feature MSRs after KVM_RUN KVM: x86/pmu: WARN and bug the VM if PMU is refreshed after vCPU has run KVM: x86/pmu: Zero out LBR capabilities during PMU refresh KVM: selftests: Move 0/initial value PERF_CAPS checks to dedicated sub-test KVM: selftests: Assert that full-width PMC writes are supported if PDCM=1 KVM: selftests: Print out failing MSR and value in vcpu_set_msr() KVM: selftests: Verify KVM preserves userspace writes to "durable" MSRs KVM: selftests: Drop now-redundant checks on PERF_CAPABILITIES writes KVM: selftests: Test all fungible features in PERF_CAPABILITIES KVM: selftests: Test all immutable non-format bits in PERF_CAPABILITIES KVM: selftests: Expand negative testing of guest writes to PERF_CAPABILITIES KVM: selftests: Test post-KVM_RUN writes to PERF_CAPABILITIES KVM: selftests: Drop "all done!" printf() from PERF_CAPABILITIES test KVM: selftests: Refactor LBR_FMT test to avoid use of separate macro KVM: selftests: Add negative testcase for PEBS format in PERF_CAPABILITIES KVM: selftests: Verify LBRs are disabled if vPMU is disabled KVM: VMX: Refactor intel_pmu_{g,}set_msr() to align with other helpers KVM: x86: Rename Hyper-V remote TLB hooks to match established scheme KVM: x86/mmu: Move filling of Hyper-V's TLB range struct into Hyper-V code KVM: x86/mmu: Refresh CR0.WP prior to checking for emulated permission faults KVM: nVMX: Emulate NOPs in L2, and PAUSE if it's not intercepted KVM: x86: Filter out XTILE_CFG if XTILE_DATA isn't permitted KVM: selftests: Rework dynamic XFeature helper to take mask, not bit KVM: selftests: Use error codes to signal errors in PMU event filter test KVM: selftests: Copy full counter values from guest in PMU event filter test Shaoqin Huang (1): KVM: Add the missed title format Thomas Huth (6): KVM: PPC: Standardize on "int" return types in the powerpc KVM code KVM: s390: Use "int" as return type for kvm_s390_get/set_skeys() KVM: x86: Remove the KVM_GET_NR_MMU_PAGES ioctl KVM: arm64: Limit length in kvm_vm_ioctl_mte_copy_tags() to INT_MAX KVM: Standardize on "int" return types instead of "long" in kvm_main.c KVM: Change return type of kvm_arch_vm_ioctl() to "int" Tom Rix (1): KVM: x86: set "mitigate_smt_rsb" storage-class-specifier to static Vipin Sharma (13): KVM: x86/mmu: Add a helper function to check if an SPTE needs atomic write KVM: x86/mmu: Use kvm_ad_enabled() to determine if TDP MMU SPTEs need wrprot KVM: x86/mmu: Consolidate Dirty vs. Writable clearing logic in TDP MMU KVM: x86/mmu: Atomically clear SPTE dirty state in the clear-dirty-log flow KVM: x86/mmu: Drop access tracking checks when clearing TDP MMU dirty bits KVM: x86/mmu: Bypass __handle_changed_spte() when clearing TDP MMU dirty bits KVM: x86/mmu: Remove "record_dirty_log" in __tdp_mmu_set_spte() KVM: x86/mmu: Clear only A-bit (if enabled) when aging TDP MMU SPTEs KVM: x86/mmu: Drop unnecessary dirty log checks when aging TDP MMU SPTEs KVM: x86/mmu: Bypass __handle_changed_spte() when aging TDP MMU SPTEs KVM: x86/mmu: Remove "record_acc_track" in __tdp_mmu_set_spte() KVM: x86/mmu: Remove handle_changed_spte_dirty_log() KVM: x86/mmu: Merge all handle_changed_pte*() functions Xinghui Li (1): KVM: SVM: Remove a duplicate definition of VMCB_AVIC_APIC_BAR_MASK Yu Zhang (2): KVM: nVMX: Remove outdated comments in nested_vmx_setup_ctls_msrs() KVM: nVMX: Add helpers to setup VMX control msr configs Documentation/virt/kvm/api.rst | 75 ++- Documentation/virt/kvm/devices/vm.rst | 79 +++ Documentation/virt/kvm/locking.rst | 2 +- arch/arm64/include/asm/kvm_host.h | 29 +- arch/arm64/include/asm/kvm_mmu.h | 4 + arch/arm64/include/asm/sysreg.h | 3 + arch/arm64/include/uapi/asm/kvm.h | 36 ++ arch/arm64/kernel/cpufeature.c | 11 + arch/arm64/kvm/arch_timer.c | 550 ++++++++++++++++----- arch/arm64/kvm/arm.c | 150 +++++- arch/arm64/kvm/guest.c | 39 +- arch/arm64/kvm/handle_exit.c | 36 +- arch/arm64/kvm/hyp/include/hyp/switch.h | 53 ++ arch/arm64/kvm/hyp/nvhe/debug-sr.c | 2 - arch/arm64/kvm/hyp/nvhe/mem_protect.c | 7 + arch/arm64/kvm/hyp/nvhe/switch.c | 18 + arch/arm64/kvm/hyp/nvhe/timer-sr.c | 18 +- arch/arm64/kvm/hyp/nvhe/tlb.c | 38 +- arch/arm64/kvm/hyp/vhe/switch.c | 7 +- arch/arm64/kvm/hyp/vhe/sysreg-sr.c | 12 + arch/arm64/kvm/hypercalls.c | 189 ++++++- arch/arm64/kvm/pmu-emul.c | 25 +- arch/arm64/kvm/psci.c | 37 +- arch/arm64/kvm/reset.c | 15 +- arch/arm64/kvm/sys_regs.c | 10 + arch/arm64/kvm/trace_arm.h | 6 +- arch/arm64/kvm/vgic/vgic-debug.c | 8 +- arch/arm64/kvm/vgic/vgic-init.c | 36 +- arch/arm64/kvm/vgic/vgic-its.c | 33 +- arch/arm64/kvm/vgic/vgic-kvm-device.c | 85 ++-- arch/arm64/kvm/vgic/vgic-mmio-v3.c | 4 +- arch/arm64/kvm/vgic/vgic-mmio.c | 12 +- arch/arm64/kvm/vgic/vgic-v4.c | 11 +- arch/arm64/kvm/vgic/vgic.c | 27 +- arch/arm64/kvm/vgic/vgic.h | 3 - arch/arm64/tools/cpucaps | 1 + arch/arm64/tools/sysreg | 4 + arch/mips/include/asm/kvm_host.h | 2 +- arch/mips/kvm/mips.c | 4 +- arch/mips/kvm/vz.c | 2 +- arch/powerpc/include/asm/kvm_ppc.h | 14 +- arch/powerpc/kvm/book3s_64_mmu_hv.c | 14 +- arch/powerpc/kvm/book3s_64_vio.c | 4 +- arch/powerpc/kvm/book3s_hv.c | 6 +- arch/powerpc/kvm/book3s_pr.c | 4 +- arch/powerpc/kvm/powerpc.c | 5 +- arch/riscv/kvm/vm.c | 3 +- arch/s390/kvm/interrupt.c | 4 +- arch/s390/kvm/kvm-s390.c | 7 +- arch/s390/kvm/pci.c | 2 +- arch/s390/kvm/vsie.c | 50 +- arch/x86/include/asm/cpufeatures.h | 9 +- arch/x86/include/asm/kvm-x86-ops.h | 6 +- arch/x86/include/asm/kvm_host.h | 89 ++-- arch/x86/include/asm/svm.h | 10 +- arch/x86/include/uapi/asm/kvm.h | 3 + arch/x86/kvm/cpuid.c | 18 +- arch/x86/kvm/emulate.c | 8 + arch/x86/kvm/kvm_cache_regs.h | 18 +- arch/x86/kvm/kvm_onhyperv.c | 33 +- arch/x86/kvm/kvm_onhyperv.h | 5 +- arch/x86/kvm/mmu.h | 28 +- arch/x86/kvm/mmu/mmu.c | 524 ++++++++++++-------- arch/x86/kvm/mmu/mmu_internal.h | 20 +- arch/x86/kvm/mmu/paging_tmpl.h | 275 +++-------- arch/x86/kvm/mmu/spte.c | 2 +- arch/x86/kvm/mmu/tdp_iter.h | 48 +- arch/x86/kvm/mmu/tdp_mmu.c | 215 +++----- arch/x86/kvm/pmu.c | 25 +- arch/x86/kvm/pmu.h | 2 +- arch/x86/kvm/svm/nested.c | 91 +++- arch/x86/kvm/svm/pmu.c | 2 +- arch/x86/kvm/svm/svm.c | 195 ++++++-- arch/x86/kvm/svm/svm.h | 29 ++ arch/x86/kvm/svm/svm_onhyperv.h | 5 +- arch/x86/kvm/vmx/hyperv.c | 107 +++- arch/x86/kvm/vmx/hyperv.h | 115 +---- arch/x86/kvm/vmx/nested.c | 126 +++-- arch/x86/kvm/vmx/pmu_intel.c | 135 ++--- arch/x86/kvm/vmx/sgx.c | 4 +- arch/x86/kvm/vmx/vmx.c | 96 ++-- arch/x86/kvm/vmx/vmx.h | 20 +- arch/x86/kvm/vmx/vmx_ops.h | 22 +- arch/x86/kvm/x86.c | 256 ++++++---- arch/x86/kvm/x86.h | 64 ++- include/clocksource/arm_arch_timer.h | 1 + include/kvm/arm_arch_timer.h | 34 +- include/kvm/arm_hypercalls.h | 6 +- include/kvm/arm_vgic.h | 1 + include/linux/kvm_host.h | 7 +- include/linux/kvm_types.h | 2 +- include/uapi/linux/kvm.h | 14 +- tools/include/uapi/linux/kvm.h | 2 +- tools/testing/selftests/kvm/Makefile | 2 + tools/testing/selftests/kvm/aarch64/arch_timer.c | 56 ++- tools/testing/selftests/kvm/aarch64/get-reg-list.c | 15 +- tools/testing/selftests/kvm/aarch64/smccc_filter.c | 268 ++++++++++ tools/testing/selftests/kvm/config | 1 + tools/testing/selftests/kvm/demand_paging_test.c | 2 +- .../selftests/kvm/include/aarch64/processor.h | 13 + .../testing/selftests/kvm/include/kvm_util_base.h | 1 + .../selftests/kvm/include/x86_64/processor.h | 124 ++++- .../testing/selftests/kvm/lib/aarch64/processor.c | 91 ++-- tools/testing/selftests/kvm/lib/kvm_util.c | 5 + tools/testing/selftests/kvm/lib/x86_64/processor.c | 36 +- tools/testing/selftests/kvm/x86_64/amx_test.c | 118 ++--- .../selftests/kvm/x86_64/pmu_event_filter_test.c | 253 +++++----- .../kvm/x86_64/vmx_nested_tsc_scaling_test.c | 8 +- .../selftests/kvm/x86_64/vmx_pmu_caps_test.c | 231 +++++++-- .../testing/selftests/kvm/x86_64/xcr0_cpuid_test.c | 132 +++++ virt/kvm/kvm_main.c | 30 +- 111 files changed, 4004 insertions(+), 1850 deletions(-) create mode 100644 tools/testing/selftests/kvm/aarch64/smccc_filter.c create mode 100644 tools/testing/selftests/kvm/x86_64/xcr0_cpuid_test.c diff --git a/arch/x86/kvm/kvm_onhyperv.h b/arch/x86/kvm/kvm_onhyperv.h index 2d5f669c1ea1..f9ca3e7432b2 100644 --- a/arch/x86/kvm/kvm_onhyperv.h +++ b/arch/x86/kvm/kvm_onhyperv.h @@ -11,7 +11,7 @@ int hv_flush_remote_tlbs_range(struct kvm *kvm, gfn_t gfn, gfn_t nr_pages); int hv_flush_remote_tlbs(struct kvm *kvm); void hv_track_root_tdp(struct kvm_vcpu *vcpu, hpa_t root_tdp); #else /* !CONFIG_HYPERV */ -static inline int hv_remote_flush_tlb(struct kvm *kvm) +static inline int hv_flush_remote_tlbs(struct kvm *kvm) { return -EOPNOTSUPP; } diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index a9c940a31f3a..ca32389f3c36 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -3843,13 +3843,13 @@ static void svm_flush_tlb_all(struct kvm_vcpu *vcpu) { /* * When running on Hyper-V with EnlightenedNptTlb enabled, remote TLB - * flushes should be routed to hv_remote_flush_tlb() without requesting + * flushes should be routed to hv_flush_remote_tlbs() without requesting * a "regular" remote flush. Reaching this point means either there's - * a KVM bug or a prior hv_remote_flush_tlb() call failed, both of + * a KVM bug or a prior hv_flush_remote_tlbs() call failed, both of * which might be fatal to the guest. Yell, but try to recover. */ if (WARN_ON_ONCE(svm_hv_is_enlightened_tlb_enabled(vcpu))) - hv_remote_flush_tlb(vcpu->kvm); + hv_flush_remote_tlbs(vcpu->kvm); svm_flush_tlb_asid(vcpu); }