Linus, The following changes since commit 2dde18cd1d8fac735875f2e4987f11817cc0bc2c: Linux 6.5 (2023-08-27 14:49:51 -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 d011151616e73de20c139580b73fa4c7042bd861: Merge branch 'kvm-x86-mmu-6.6' into HEAD (2023-09-01 15:50:38 -0400) There are no conflict, just one remark below about a late-ish rebase of a topic branch. ---------------------------------------------------------------- ARM: * Clean up vCPU targets, always returning generic v8 as the preferred target * Trap forwarding infrastructure for nested virtualization (used for traps that are taken from an L2 guest and are needed by the L1 hypervisor) * FEAT_TLBIRANGE support to only invalidate specific ranges of addresses when collapsing a table PTE to a block PTE. This avoids that the guest refills the TLBs again for addresses that aren't covered by the table PTE. * Fix vPMU issues related to handling of PMUver. * Don't unnecessary align non-stack allocations in the EL2 VA space * Drop HCR_VIRT_EXCP_MASK, which was never used... * Don't use smp_processor_id() in kvm_arch_vcpu_load(), but the cpu parameter instead * Drop redundant call to kvm_set_pfn_accessed() in user_mem_abort() * Remove prototypes without implementations RISC-V: * Zba, Zbs, Zicntr, Zicsr, Zifencei, and Zihpm support for guest * Added ONE_REG interface for SATP mode * Added ONE_REG interface to enable/disable multiple ISA extensions * Improved error codes returned by ONE_REG interfaces * Added KVM_GET_REG_LIST ioctl() implementation for KVM RISC-V * Added get-reg-list selftest for KVM RISC-V s390: * PV crypto passthrough enablement (Tony, Steffen, Viktor, Janosch) Allows a PV guest to use crypto cards. Card access is governed by the firmware and once a crypto queue is "bound" to a PV VM every other entity (PV or not) looses access until it is not bound anymore. Enablement is done via flags when creating the PV VM. * Guest debug fixes (Ilya) x86: * Clean up KVM's handling of Intel architectural events * Intel bugfixes * Add support for SEV-ES DebugSwap, allowing SEV-ES guests to use debug registers and generate/handle #DBs * Clean up LBR virtualization code * Fix a bug where KVM fails to set the target pCPU during an IRTE update * Fix fatal bugs in SEV-ES intrahost migration * Fix a bug where the recent (architecturally correct) change to reinject #BP and skip INT3 broke SEV guests (can't decode INT3 to skip it) * Retry APIC map recalculation if a vCPU is added/enabled * Overhaul emergency reboot code to bring SVM up to par with VMX, tie the "emergency disabling" behavior to KVM actually being loaded, and move all of the logic within KVM * Fix user triggerable WARNs in SVM where KVM incorrectly assumes the TSC ratio MSR cannot diverge from the default when TSC scaling is disabled up related code * Add a framework to allow "caching" feature flags so that KVM can check if the guest can use a feature without needing to search guest CPUID * Rip out the ancient MMU_DEBUG crud and replace the useful bits with CONFIG_KVM_PROVE_MMU * Fix KVM's handling of !visible guest roots to avoid premature triple fault injection * Overhaul KVM's page-track APIs, and KVMGT's usage, to reduce the API surface that is needed by external users (currently only KVMGT), and fix a variety of issues in the process This last item had a silly one-character bug in the topic branch that was sent to me. Because it caused pretty bad selftest failures in some configurations, I decided to squash in the fix. So, while the exact commit ids haven't been in linux-next before the merge window, the code has. Generic: * Wrap kvm_{gfn,hva}_range.pte in a union to allow mmu_notifier events to pass action specific data without needing to constantly update the main handlers. * Drop unused function declarations Selftests: * Add testcases to x86's sync_regs_test for detecting KVM TOCTOU bugs * Add support for printf() in guest code and covert all guest asserts to use printf-based reporting * Clean up the PMU event filter test and add new testcases * Include x86 selftests in the KVM x86 MAINTAINERS entry ---------------------------------------------------------------- Aaron Lewis (5): KVM: selftests: Add strnlen() to the string overrides KVM: selftests: Add guest_snprintf() to KVM selftests KVM: selftests: Add additional pages to the guest to accommodate ucall KVM: selftests: Add string formatting options to ucall KVM: selftests: Add a selftest for guest prints and formatted asserts Alexey Kardashevskiy (6): KVM: SEV: move set_dr_intercepts/clr_dr_intercepts from the header KVM: SEV: Move SEV's GP_VECTOR intercept setup to SEV KVM: SEV-ES: explicitly disable debug KVM: SVM/SEV/SEV-ES: Rework intercepts KVM: SEV: Enable data breakpoints in SEV-ES KVM: SEV-ES: Eliminate #DB intercept when DebugSwap enabled Andrew Jones (9): RISC-V: KVM: Improve vector save/restore errors RISC-V: KVM: Improve vector save/restore functions KVM: arm64: selftests: Replace str_with_index with strdup_printf KVM: arm64: selftests: Drop SVE cap check in print_reg KVM: arm64: selftests: Remove print_reg's dependency on vcpu_config KVM: arm64: selftests: Rename vcpu_config and add to kvm_util.h KVM: arm64: selftests: Delete core_reg_fixup KVM: arm64: selftests: Split get-reg-list test code KVM: arm64: selftests: Finish generalizing get-reg-list Anup Patel (5): RISC-V: KVM: Factor-out ONE_REG related code to its own source file RISC-V: KVM: Extend ONE_REG to enable/disable multiple ISA extensions RISC-V: KVM: Allow Zba and Zbs extensions for Guest/VM RISC-V: KVM: Allow Zicntr, Zicsr, Zifencei, and Zihpm for Guest/VM RISC-V: KVM: Sort ISA extensions alphabetically in ONE_REG interface Bibo Mao (1): KVM: selftests: use unified time type for comparison Daniel Henrique Barboza (10): RISC-V: KVM: provide UAPI for host SATP mode RISC-V: KVM: return ENOENT in *_one_reg() when reg is unknown RISC-V: KVM: use ENOENT in *_one_reg() when extension is unavailable RISC-V: KVM: do not EOPNOTSUPP in set_one_reg() zicbo(m|z) RISC-V: KVM: do not EOPNOTSUPP in set KVM_REG_RISCV_TIMER_REG RISC-V: KVM: use EBUSY when !vcpu->arch.ran_atleast_once RISC-V: KVM: avoid EBUSY when writing same ISA val RISC-V: KVM: avoid EBUSY when writing the same machine ID val RISC-V: KVM: avoid EBUSY when writing the same isa_ext val docs: kvm: riscv: document EBUSY in KVM_SET_ONE_REG David Matlack (3): KVM: Rename kvm_arch_flush_remote_tlb() to kvm_arch_flush_remote_tlbs() KVM: Allow range-based TLB invalidation from common code KVM: Move kvm_arch_flush_remote_tlbs_memslot() to common code Fuad Tabba (1): KVM: arm64: Remove redundant kvm_set_pfn_accessed() from user_mem_abort() Haibo Xu (6): KVM: arm64: selftests: Move reject_set check logic to a function KVM: arm64: selftests: Move finalize_vcpu back to run_test KVM: selftests: Only do get/set tests on present blessed list KVM: selftests: Add skip_set facility to get_reg_list test KVM: riscv: Add KVM_GET_REG_LIST API support KVM: riscv: selftests: Add get-reg-list test Ilya Leoshkevich (6): KVM: s390: interrupt: Fix single-stepping into interrupt handlers KVM: s390: interrupt: Fix single-stepping into program interrupt handlers KVM: s390: interrupt: Fix single-stepping kernel-emulated instructions KVM: s390: interrupt: Fix single-stepping userspace-emulated instructions KVM: s390: interrupt: Fix single-stepping keyless mode exits KVM: s390: selftests: Add selftest for single-stepping Janosch Frank (2): Merge tag 'kvm-x86-selftests-immutable-6.6' into next Merge remote-tracking branch 'vfio-ap' into next Jinrong Liang (6): KVM: selftests: Add x86 properties for Intel PMU in processor.h KVM: selftests: Drop the return of remove_event() KVM: selftests: Introduce "struct __kvm_pmu_event_filter" to manipulate filter KVM: selftests: Add test cases for unsupported PMU event filter input values KVM: selftests: Test if event filter meets expectations on fixed counters KVM: selftests: Test gp event filters don't affect fixed event filters Li zeming (1): x86: kvm: x86: Remove unnecessary initial values of variables Like Xu (3): KVM: x86: Use sysfs_emit() instead of sprintf() KVM: x86: Remove break statements that will never be executed KVM: x86/mmu: Move the lockdep_assert of mmu_lock to inside clear_dirty_pt_masked() Manali Shukla (1): KVM: SVM: correct the size of spec_ctrl field in VMCB save area Marc Zyngier (35): Merge branch kvm-arm64/6.6/generic-vcpu into kvmarm-master/next arm64: Add missing VA CMO encodings arm64: Add missing ERX*_EL1 encodings arm64: Add missing DC ZVA/GVA/GZVA encodings arm64: Add TLBI operation encodings arm64: Add AT operation encodings arm64: Add debug registers affected by HDFGxTR_EL2 arm64: Add missing BRB/CFP/DVP/CPP instructions arm64: Add HDFGRTR_EL2 and HDFGWTR_EL2 layouts KVM: arm64: Correctly handle ACCDATA_EL1 traps KVM: arm64: Add missing HCR_EL2 trap bits KVM: arm64: nv: Add FGT registers KVM: arm64: Restructure FGT register switching KVM: arm64: nv: Add trap forwarding infrastructure KVM: arm64: nv: Add trap forwarding for HCR_EL2 KVM: arm64: nv: Expose FEAT_EVT to nested guests KVM: arm64: nv: Add trap forwarding for MDCR_EL2 KVM: arm64: nv: Add trap forwarding for CNTHCTL_EL2 KVM: arm64: nv: Add fine grained trap forwarding infrastructure KVM: arm64: nv: Add trap forwarding for HFGxTR_EL2 KVM: arm64: nv: Add trap forwarding for HFGITR_EL2 KVM: arm64: nv: Add trap forwarding for HDFGxTR_EL2 KVM: arm64: nv: Add SVC trap forwarding KVM: arm64: nv: Expand ERET trap forwarding to handle FGT KVM: arm64: nv: Add switching support for HFGxTR/HDFGxTR KVM: arm64: nv: Expose FGT to nested guests KVM: arm64: Move HCRX_EL2 switch to load/put on VHE systems KVM: arm64: nv: Add support for HCRX_EL2 KVM: arm64: pmu: Resync EL0 state on counter rotation KVM: arm64: pmu: Guard PMU emulation definitions with CONFIG_KVM KVM: arm64: nv: Add trap description for SPSR_EL2 and ELR_EL2 Merge branch kvm-arm64/nv-trap-forwarding into kvmarm-master/next Merge branch kvm-arm64/tlbi-range into kvmarm-master/next Merge branch kvm-arm64/6.6/pmu-fixes into kvmarm-master/next Merge branch kvm-arm64/6.6/misc into kvmarm-master/next Mark Brown (1): arm64: Add feature detection for fine grained traps Michal Luczaj (5): KVM: x86: Fix KVM_CAP_SYNC_REGS's sync_regs() TOCTOU issues KVM: selftests: Extend x86's sync_regs_test to check for CR4 races KVM: selftests: Extend x86's sync_regs_test to check for event vector races KVM: selftests: Extend x86's sync_regs_test to check for exception races KVM: x86: Remove x86_emulate_ops::guest_has_long_mode Mingwei Zhang (1): KVM: x86/mmu: Plumb "struct kvm" all the way to pte_list_remove() Minjie Du (1): KVM: selftests: Remove superfluous variable assignment Oliver Upton (4): KVM: arm64: Delete pointless switch statement in kvm_reset_vcpu() KVM: arm64: Remove pointless check for changed init target KVM: arm64: Replace vCPU target with a configuration flag KVM: arm64: Always return generic v8 as the preferred target Paolo Bonzini (10): Merge tag 'kvmarm-6.6' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD Merge tag 'kvm-x86-generic-6.6' of https://github.com/kvm-x86/linux into HEAD Merge tag 'kvm-x86-selftests-6.6' of https://github.com/kvm-x86/linux into HEAD Merge tag 'kvm-s390-next-6.6-1' of https://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux into HEAD Merge tag 'kvm-riscv-6.6-1' of https://github.com/kvm-riscv/linux into HEAD Merge tag 'kvm-x86-pmu-6.6' of https://github.com/kvm-x86/linux into HEAD Merge tag 'kvm-x86-vmx-6.6' of https://github.com/kvm-x86/linux into HEAD Merge tag 'kvm-x86-svm-6.6' of https://github.com/kvm-x86/linux into HEAD Merge tag 'kvm-x86-misc-6.6' of https://github.com/kvm-x86/linux into HEAD Merge branch 'kvm-x86-mmu-6.6' into HEAD Raghavendra Rao Ananta (11): KVM: Declare kvm_arch_flush_remote_tlbs() globally KVM: arm64: Use kvm_arch_flush_remote_tlbs() KVM: Remove CONFIG_HAVE_KVM_ARCH_TLB_FLUSH_ALL arm64: tlb: Refactor the core flush algorithm of __flush_tlb_range arm64: tlb: Implement __flush_s2_tlb_range_op() KVM: arm64: Implement __kvm_tlb_flush_vmid_range() KVM: arm64: Define kvm_tlb_flush_vmid_range() KVM: arm64: Implement kvm_arch_flush_remote_tlbs_range() KVM: arm64: Flush only the memslot after write-protect KVM: arm64: Invalidate the table entries upon a range KVM: arm64: Use TLBI range-based instructions for unmap Randy Dunlap (1): KVM: arm64: nv: Select XARRAY_MULTI to fix build error Reiji Watanabe (4): KVM: arm64: PMU: Disallow vPMU on non-uniform PMUVer KVM: arm64: PMU: Avoid inappropriate use of host's PMUVer KVM: arm64: PMU: Don't advertise the STALL_SLOT event KVM: arm64: PMU: Don't advertise STALL_SLOT_{FRONTEND,BACKEND} Sean Christopherson (139): KVM: SVM: Rewrite sev_es_prepare_switch_to_guest()'s comment about swap types KVM: SVM: Don't defer NMI unblocking until next exit for SEV-ES guests KVM: SVM: Don't try to pointlessly single-step SEV-ES guests for NMI window KVM: selftests: Make TEST_ASSERT_EQ() output look like normal TEST_ASSERT() KVM: selftests: Add a shameful hack to preserve/clobber GPRs across ucall KVM: selftests: Add formatted guest assert support in ucall framework KVM: selftests: Add arch ucall.h and inline simple arch hooks KVM: selftests: Add #define of expected KVM exit reason for ucall KVM: selftests: Convert aarch_timer to printf style GUEST_ASSERT KVM: selftests: Convert debug-exceptions to printf style GUEST_ASSERT KVM: selftests: Convert ARM's hypercalls test to printf style GUEST_ASSERT KVM: selftests: Convert ARM's page fault test to printf style GUEST_ASSERT KVM: selftests: Convert ARM's vGIC IRQ test to printf style GUEST_ASSERT KVM: selftests: Convert the memslot performance test to printf guest asserts KVM: selftests: Convert s390's memop test to printf style GUEST_ASSERT KVM: selftests: Convert s390's tprot test to printf style GUEST_ASSERT KVM: selftests: Convert set_memory_region_test to printf-based GUEST_ASSERT KVM: selftests: Convert steal_time test to printf style GUEST_ASSERT KVM: selftests: Convert x86's CPUID test to printf style GUEST_ASSERT KVM: selftests: Convert the Hyper-V extended hypercalls test to printf asserts KVM: selftests: Convert the Hyper-V feature test to printf style GUEST_ASSERT KVM: selftests: Convert x86's KVM paravirt test to printf style GUEST_ASSERT KVM: selftests: Convert the MONITOR/MWAIT test to use printf guest asserts KVM: selftests: Convert x86's nested exceptions test to printf guest asserts KVM: selftests: Convert x86's set BSP ID test to printf style guest asserts KVM: selftests: Convert the nSVM software interrupt test to printf guest asserts KVM: selftests: Convert x86's TSC MSRs test to use printf guest asserts KVM: selftests: Convert the x86 userspace I/O test to printf guest assert KVM: selftests: Convert VMX's PMU capabilities test to printf guest asserts KVM: selftests: Convert x86's XCR0 test to use printf-based guest asserts KVM: selftests: Rip out old, param-based guest assert macros KVM: selftests: Print out guest RIP on unhandled exception KVM: selftests: Use GUEST_FAIL() in ARM's arch timer helpers KVM: x86: Snapshot host's MSR_IA32_ARCH_CAPABILITIES KVM: VMX: Drop unnecessary vmx_fb_clear_ctrl_available "cache" KVM: VMX: Drop manual TLB flush when migrating vmcs.APIC_ACCESS_ADDR KVM: SVM: Fix dead KVM_BUG() code in LBR MSR virtualization KVM: SVM: Clean up handling of LBR virtualization enabled KVM: SVM: Use svm_get_lbr_vmcb() helper to handle writes to DEBUGCTL KVM: x86/pmu: Use enums instead of hardcoded magic for arch event indices KVM: x86/pmu: Simplify intel_hw_event_available() KVM: x86/pmu: Require nr fixed_pmc_events to match nr max fixed counters KVM: x86/pmu: Move .hw_event_available() check out of PMC filter helper KVM: x86: Retry APIC optimized map recalc if vCPU is added/enabled x86/reboot: VMCLEAR active VMCSes before emergency reboot x86/reboot: Harden virtualization hooks for emergency reboot x86/reboot: KVM: Handle VMXOFF in KVM's reboot callback x86/reboot: KVM: Disable SVM during reboot via virt/KVM reboot callback x86/reboot: Assert that IRQs are disabled when turning off virtualization x86/reboot: Hoist "disable virt" helpers above "emergency reboot" path x86/reboot: Disable virtualization during reboot iff callback is registered x86/reboot: Expose VMCS crash hooks if and only if KVM_{INTEL,AMD} is enabled x86/virt: KVM: Open code cpu_has_vmx() in KVM VMX x86/virt: KVM: Move VMXOFF helpers into KVM VMX KVM: SVM: Make KVM_AMD depend on CPU_SUP_AMD or CPU_SUP_HYGON x86/virt: Drop unnecessary check on extended CPUID level in cpu_has_svm() x86/virt: KVM: Open code cpu_has_svm() into kvm_is_svm_supported() KVM: SVM: Check that the current CPU supports SVM in kvm_is_svm_supported() KVM: VMX: Ensure CPU is stable when probing basic VMX support x86/virt: KVM: Move "disable SVM" helper into KVM SVM KVM: x86: Force kvm_rebooting=true during emergency reboot/crash KVM: SVM: Use "standard" stgi() helper when disabling SVM KVM: VMX: Skip VMCLEAR logic during emergency reboots if CR4.VMXE=0 KVM: nSVM: Check instead of asserting on nested TSC scaling support KVM: nSVM: Load L1's TSC multiplier based on L1 state, not L2 state KVM: nSVM: Use the "outer" helper for writing multiplier to MSR_AMD64_TSC_RATIO KVM: SVM: Clean up preemption toggling related to MSR_AMD64_TSC_RATIO KVM: x86: Always write vCPU's current TSC offset/ratio in vendor hooks KVM: nSVM: Skip writes to MSR_AMD64_TSC_RATIO if guest state isn't loaded KVM: Wrap kvm_{gfn,hva}_range.pte in a per-action union KVM: x86: Remove WARN sanity check on hypervisor timer vs. UNINITIALIZED vCPU KVM: SVM: Take and hold ir_list_lock when updating vCPU's Physical ID entry KVM: SVM: Set target pCPU during IRTE update if target vCPU is running KVM: x86: Add a framework for enabling KVM-governed x86 features KVM: x86/mmu: Use KVM-governed feature framework to track "GBPAGES enabled" KVM: VMX: Recompute "XSAVES enabled" only after CPUID update KVM: VMX: Check KVM CPU caps, not just VMX MSR support, for XSAVE enabling KVM: VMX: Rename XSAVES control to follow KVM's preferred "ENABLE_XYZ" KVM: x86: Use KVM-governed feature framework to track "XSAVES enabled" KVM: nVMX: Use KVM-governed feature framework to track "nested VMX enabled" KVM: nSVM: Use KVM-governed feature framework to track "NRIPS enabled" KVM: nSVM: Use KVM-governed feature framework to track "TSC scaling enabled" KVM: nSVM: Use KVM-governed feature framework to track "vVM{SAVE,LOAD} enabled" KVM: nSVM: Use KVM-governed feature framework to track "LBRv enabled" KVM: nSVM: Use KVM-governed feature framework to track "Pause Filter enabled" KVM: nSVM: Use KVM-governed feature framework to track "vGIF enabled" KVM: nSVM: Use KVM-governed feature framework to track "vNMI enabled" KVM: x86: Disallow guest CPUID lookups when IRQs are disabled KVM: SVM: Get source vCPUs from source VM for SEV-ES intrahost migration KVM: SVM: Skip VMSA init in sev_es_init_vmcb() if pointer is NULL KVM: SVM: Don't inject #UD if KVM attempts to skip SEV guest insn KVM: SVM: Require nrips support for SEV guests (and beyond) KVM: selftests: Reload "good" vCPU state if vCPU hits shutdown KVM: selftests: Explicit set #UD when *potentially* injecting exception KVM: x86: Update MAINTAINTERS to include selftests KVM: VMX: Delete ancient pr_warn() about KVM_SET_TSS_ADDR not being set KVM: VMX: Refresh available regs and IDT vectoring info before NMI handling KVM: x86/mmu: Guard against collision with KVM-defined PFERR_IMPLICIT_ACCESS KVM: x86/mmu: Delete pgprintk() and all its usage KVM: x86/mmu: Delete rmap_printk() and all its usage KVM: x86/mmu: Delete the "dbg" module param KVM: x86/mmu: Avoid pointer arithmetic when iterating over SPTEs KVM: x86/mmu: Cleanup sanity check of SPTEs at SP free KVM: x86/mmu: Rename MMU_WARN_ON() to KVM_MMU_WARN_ON() KVM: x86/mmu: Convert "runtime" WARN_ON() assertions to WARN_ON_ONCE() KVM: x86/mmu: Bug the VM if a vCPU ends up in long mode without PAE enabled KVM: x86/mmu: Replace MMU_DEBUG with proper KVM_PROVE_MMU Kconfig KVM: x86/mmu: Use BUILD_BUG_ON_INVALID() for KVM_MMU_WARN_ON() stub KVM: x86/mmu: BUG() in rmap helpers iff CONFIG_BUG_ON_DATA_CORRUPTION=y drm/i915/gvt: Verify pfn is "valid" before dereferencing "struct page" drm/i915/gvt: Verify hugepages are contiguous in physical address space drm/i915/gvt: Put the page reference obtained by KVM's gfn_to_pfn() drm/i915/gvt: Explicitly check that vGPU is attached before shadowing drm/i915/gvt: Error out on an attempt to shadowing an unknown GTT entry type drm/i915/gvt: Don't rely on KVM's gfn_to_pfn() to query possible 2M GTT drm/i915/gvt: Use an "unsigned long" to iterate over memslot gfns drm/i915/gvt: Drop unused helper intel_vgpu_reset_gtt() drm/i915/gvt: Protect gfn hash table with vgpu_lock KVM: x86/mmu: Move kvm_arch_flush_shadow_{all,memslot}() to mmu.c KVM: x86/mmu: Don't rely on page-track mechanism to flush on memslot change KVM: x86/mmu: Don't bounce through page-track mechanism for guest PTEs KVM: drm/i915/gvt: Drop @vcpu from KVM's ->track_write() hook KVM: x86: Reject memslot MOVE operations if KVMGT is attached drm/i915/gvt: Don't bother removing write-protection on to-be-deleted slot KVM: x86/mmu: Move KVM-only page-track declarations to internal header KVM: x86/mmu: Use page-track notifiers iff there are external users KVM: x86/mmu: Drop infrastructure for multiple page-track modes KVM: x86/mmu: Rename page-track APIs to reflect the new reality KVM: x86/mmu: Assert that correct locks are held for page write-tracking KVM: x86/mmu: Bug the VM if write-tracking is used but not enabled KVM: x86/mmu: Drop @slot param from exported/external page-track APIs KVM: x86/mmu: Handle KVM bookkeeping in page-track APIs, not callers drm/i915/gvt: Drop final dependencies on KVM internal details KVM: x86/mmu: Add helper to convert root hpa to shadow page KVM: x86/mmu: Harden new PGD against roots without shadow pages KVM: x86/mmu: Harden TDP MMU iteration against root w/o shadow page KVM: x86/mmu: Disallow guest from using !visible slots for page tables KVM: x86/mmu: Use dummy root, backed by zero page, for !visible guest roots KVM: x86/mmu: Include mmu.h in spte.h Shaoqin Huang (1): KVM: arm64: Use the known cpu id instead of smp_processor_id() Shiyuan Gao (1): KVM: VMX: Rename vmx_get_max_tdp_level() to vmx_get_max_ept_level() Steffen Eiden (3): s390/uv: UV feature check utility KVM: s390: Add UV feature negotiation KVM: s390: pv: Allow AP-instructions for pv-guests Takahiro Itazuri (1): KVM: x86: Advertise host CPUID 0x80000005 in KVM_GET_SUPPORTED_CPUID Tao Su (1): KVM: x86: Advertise AMX-COMPLEX CPUID to userspace Thomas Huth (1): KVM: selftests: Rename the ASSERT_EQ macro Viktor Mihajlovski (1): KVM: s390: pv: relax WARN_ONCE condition for destroy fast Vincent Donnefort (1): KVM: arm64: Remove size-order align in the nVHE hyp private VA range Yan Zhao (5): drm/i915/gvt: remove interface intel_gvt_is_valid_gfn drm/i915/gvt: Don't try to unpin an empty page range KVM: x86: Add a new page-track hook to handle memslot deletion drm/i915/gvt: switch from ->track_flush_slot() to ->track_remove_region() KVM: x86: Remove the unused page-track hook track_flush_slot() Yue Haibing (3): KVM: arm64: Remove unused declarations KVM: Remove unused kvm_device_{get,put}() declarations KVM: Remove unused kvm_make_cpus_request_mask() declaration Zenghui Yu (1): KVM: arm64: Drop HCR_VIRT_EXCP_MASK Documentation/virt/kvm/api.rst | 4 +- MAINTAINERS | 2 + arch/arm/include/asm/arm_pmuv3.h | 2 + arch/arm64/include/asm/kvm_arm.h | 51 +- arch/arm64/include/asm/kvm_asm.h | 3 + arch/arm64/include/asm/kvm_host.h | 24 +- arch/arm64/include/asm/kvm_mmu.h | 1 + arch/arm64/include/asm/kvm_nested.h | 2 + arch/arm64/include/asm/kvm_pgtable.h | 10 + arch/arm64/include/asm/sysreg.h | 268 ++- arch/arm64/include/asm/tlbflush.h | 122 +- arch/arm64/kernel/cpufeature.c | 7 + arch/arm64/kvm/Kconfig | 2 +- arch/arm64/kvm/arm.c | 65 +- arch/arm64/kvm/emulate-nested.c | 1852 ++++++++++++++++++++ arch/arm64/kvm/guest.c | 15 - arch/arm64/kvm/handle_exit.c | 29 +- arch/arm64/kvm/hyp/include/hyp/switch.h | 139 +- arch/arm64/kvm/hyp/include/nvhe/mm.h | 1 + arch/arm64/kvm/hyp/nvhe/hyp-main.c | 11 + arch/arm64/kvm/hyp/nvhe/mm.c | 83 +- arch/arm64/kvm/hyp/nvhe/setup.c | 27 +- arch/arm64/kvm/hyp/nvhe/switch.c | 2 +- arch/arm64/kvm/hyp/nvhe/tlb.c | 30 + arch/arm64/kvm/hyp/pgtable.c | 63 +- arch/arm64/kvm/hyp/vhe/tlb.c | 28 + arch/arm64/kvm/mmu.c | 104 +- arch/arm64/kvm/nested.c | 11 +- arch/arm64/kvm/pmu-emul.c | 37 +- arch/arm64/kvm/pmu.c | 18 + arch/arm64/kvm/reset.c | 23 +- arch/arm64/kvm/sys_regs.c | 15 + arch/arm64/kvm/trace_arm.h | 26 + arch/arm64/kvm/vgic/vgic.h | 2 - arch/arm64/tools/cpucaps | 1 + arch/arm64/tools/sysreg | 129 ++ arch/mips/include/asm/kvm_host.h | 3 +- arch/mips/kvm/mips.c | 12 +- arch/mips/kvm/mmu.c | 2 +- arch/riscv/include/asm/csr.h | 2 + arch/riscv/include/asm/kvm_host.h | 9 + arch/riscv/include/asm/kvm_vcpu_vector.h | 6 +- arch/riscv/include/uapi/asm/kvm.h | 16 + arch/riscv/kvm/Makefile | 1 + arch/riscv/kvm/aia.c | 4 +- arch/riscv/kvm/mmu.c | 8 +- arch/riscv/kvm/vcpu.c | 547 +----- arch/riscv/kvm/vcpu_fp.c | 12 +- arch/riscv/kvm/vcpu_onereg.c | 1051 +++++++++++ arch/riscv/kvm/vcpu_sbi.c | 16 +- arch/riscv/kvm/vcpu_timer.c | 11 +- arch/riscv/kvm/vcpu_vector.c | 72 +- arch/s390/include/asm/kvm_host.h | 5 + arch/s390/include/asm/uv.h | 25 +- arch/s390/include/uapi/asm/kvm.h | 16 + arch/s390/kernel/uv.c | 5 +- arch/s390/kvm/intercept.c | 38 +- arch/s390/kvm/interrupt.c | 14 + arch/s390/kvm/kvm-s390.c | 102 +- arch/s390/kvm/kvm-s390.h | 12 - arch/s390/kvm/pv.c | 23 +- arch/s390/mm/fault.c | 2 +- arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/include/asm/kexec.h | 2 - arch/x86/include/asm/kvm_host.h | 46 +- arch/x86/include/asm/kvm_page_track.h | 71 +- arch/x86/include/asm/reboot.h | 7 + arch/x86/include/asm/svm.h | 5 +- arch/x86/include/asm/virtext.h | 154 -- arch/x86/include/asm/vmx.h | 2 +- arch/x86/kernel/crash.c | 31 - arch/x86/kernel/reboot.c | 66 +- arch/x86/kvm/Kconfig | 15 +- arch/x86/kvm/cpuid.c | 40 +- arch/x86/kvm/cpuid.h | 46 + arch/x86/kvm/emulate.c | 2 - arch/x86/kvm/governed_features.h | 21 + arch/x86/kvm/hyperv.c | 1 - arch/x86/kvm/kvm_emulate.h | 1 - arch/x86/kvm/lapic.c | 29 +- arch/x86/kvm/mmu.h | 2 + arch/x86/kvm/mmu/mmu.c | 371 ++-- arch/x86/kvm/mmu/mmu_internal.h | 27 +- arch/x86/kvm/mmu/page_track.c | 292 +-- arch/x86/kvm/mmu/page_track.h | 58 + arch/x86/kvm/mmu/paging_tmpl.h | 41 +- arch/x86/kvm/mmu/spte.c | 6 +- arch/x86/kvm/mmu/spte.h | 21 +- arch/x86/kvm/mmu/tdp_iter.c | 11 +- arch/x86/kvm/mmu/tdp_mmu.c | 37 +- arch/x86/kvm/pmu.c | 4 +- arch/x86/kvm/reverse_cpuid.h | 1 + arch/x86/kvm/svm/avic.c | 59 +- arch/x86/kvm/svm/nested.c | 57 +- arch/x86/kvm/svm/sev.c | 100 +- arch/x86/kvm/svm/svm.c | 327 ++-- arch/x86/kvm/svm/svm.h | 61 +- arch/x86/kvm/vmx/capabilities.h | 2 +- arch/x86/kvm/vmx/hyperv.c | 2 +- arch/x86/kvm/vmx/nested.c | 13 +- arch/x86/kvm/vmx/nested.h | 2 +- arch/x86/kvm/vmx/pmu_intel.c | 81 +- arch/x86/kvm/vmx/vmx.c | 228 +-- arch/x86/kvm/vmx/vmx.h | 3 +- arch/x86/kvm/x86.c | 85 +- arch/x86/kvm/x86.h | 1 + drivers/gpu/drm/i915/gvt/gtt.c | 102 +- drivers/gpu/drm/i915/gvt/gtt.h | 1 - drivers/gpu/drm/i915/gvt/gvt.h | 3 +- drivers/gpu/drm/i915/gvt/kvmgt.c | 120 +- drivers/gpu/drm/i915/gvt/page_track.c | 10 +- drivers/perf/arm_pmuv3.c | 2 + drivers/s390/crypto/vfio_ap_ops.c | 172 +- drivers/s390/crypto/vfio_ap_private.h | 6 +- include/kvm/arm_pmu.h | 4 +- include/linux/kvm_host.h | 53 +- tools/arch/x86/include/asm/cpufeatures.h | 1 + tools/testing/selftests/kvm/Makefile | 20 +- .../selftests/kvm/aarch64/aarch32_id_regs.c | 8 +- tools/testing/selftests/kvm/aarch64/arch_timer.c | 22 +- .../selftests/kvm/aarch64/debug-exceptions.c | 8 +- tools/testing/selftests/kvm/aarch64/get-reg-list.c | 554 +----- tools/testing/selftests/kvm/aarch64/hypercalls.c | 20 +- .../selftests/kvm/aarch64/page_fault_test.c | 17 +- tools/testing/selftests/kvm/aarch64/vgic_irq.c | 3 +- tools/testing/selftests/kvm/get-reg-list.c | 401 +++++ tools/testing/selftests/kvm/guest_print_test.c | 219 +++ .../selftests/kvm/include/aarch64/arch_timer.h | 12 +- .../testing/selftests/kvm/include/aarch64/ucall.h | 20 + .../testing/selftests/kvm/include/kvm_util_base.h | 21 + .../selftests/kvm/include/riscv/processor.h | 3 + tools/testing/selftests/kvm/include/riscv/ucall.h | 20 + tools/testing/selftests/kvm/include/s390x/ucall.h | 19 + tools/testing/selftests/kvm/include/test_util.h | 20 +- tools/testing/selftests/kvm/include/ucall_common.h | 98 +- .../selftests/kvm/include/x86_64/processor.h | 5 + tools/testing/selftests/kvm/include/x86_64/ucall.h | 13 + tools/testing/selftests/kvm/kvm_page_table_test.c | 8 +- tools/testing/selftests/kvm/lib/aarch64/ucall.c | 11 +- tools/testing/selftests/kvm/lib/guest_sprintf.c | 307 ++++ tools/testing/selftests/kvm/lib/kvm_util.c | 6 +- tools/testing/selftests/kvm/lib/riscv/ucall.c | 11 - tools/testing/selftests/kvm/lib/s390x/ucall.c | 10 - tools/testing/selftests/kvm/lib/sparsebit.c | 1 - tools/testing/selftests/kvm/lib/string_override.c | 9 + tools/testing/selftests/kvm/lib/test_util.c | 15 + tools/testing/selftests/kvm/lib/ucall_common.c | 44 + tools/testing/selftests/kvm/lib/x86_64/processor.c | 18 +- tools/testing/selftests/kvm/lib/x86_64/ucall.c | 36 +- .../testing/selftests/kvm/max_guest_memory_test.c | 2 +- tools/testing/selftests/kvm/memslot_perf_test.c | 4 +- tools/testing/selftests/kvm/riscv/get-reg-list.c | 872 +++++++++ tools/testing/selftests/kvm/s390x/cmma_test.c | 62 +- tools/testing/selftests/kvm/s390x/debug_test.c | 160 ++ tools/testing/selftests/kvm/s390x/memop.c | 13 +- tools/testing/selftests/kvm/s390x/tprot.c | 11 +- .../testing/selftests/kvm/set_memory_region_test.c | 21 +- tools/testing/selftests/kvm/steal_time.c | 20 +- tools/testing/selftests/kvm/x86_64/cpuid_test.c | 12 +- .../kvm/x86_64/dirty_log_page_splitting_test.c | 18 +- .../kvm/x86_64/exit_on_emulation_failure_test.c | 2 +- .../kvm/x86_64/hyperv_extended_hypercalls.c | 3 +- .../testing/selftests/kvm/x86_64/hyperv_features.c | 29 +- tools/testing/selftests/kvm/x86_64/kvm_pv_test.c | 8 +- .../selftests/kvm/x86_64/monitor_mwait_test.c | 35 +- .../selftests/kvm/x86_64/nested_exceptions_test.c | 16 +- .../selftests/kvm/x86_64/pmu_event_filter_test.c | 317 +++- .../selftests/kvm/x86_64/recalc_apic_map_test.c | 6 +- .../testing/selftests/kvm/x86_64/set_boot_cpu_id.c | 6 +- .../kvm/x86_64/svm_nested_soft_inject_test.c | 22 +- .../testing/selftests/kvm/x86_64/sync_regs_test.c | 132 ++ tools/testing/selftests/kvm/x86_64/tsc_msrs_test.c | 34 +- .../selftests/kvm/x86_64/userspace_io_test.c | 10 +- .../vmx_exception_with_invalid_guest_state.c | 2 +- .../selftests/kvm/x86_64/vmx_pmu_caps_test.c | 31 +- .../selftests/kvm/x86_64/xapic_state_test.c | 8 +- .../testing/selftests/kvm/x86_64/xcr0_cpuid_test.c | 29 +- .../testing/selftests/kvm/x86_64/xen_vmcall_test.c | 20 +- virt/kvm/Kconfig | 3 - virt/kvm/kvm_main.c | 54 +- 180 files changed, 8839 insertions(+), 3231 deletions(-) create mode 100644 arch/riscv/kvm/vcpu_onereg.c delete mode 100644 arch/x86/include/asm/virtext.h create mode 100644 arch/x86/kvm/governed_features.h create mode 100644 arch/x86/kvm/mmu/page_track.h create mode 100644 tools/testing/selftests/kvm/get-reg-list.c create mode 100644 tools/testing/selftests/kvm/guest_print_test.c create mode 100644 tools/testing/selftests/kvm/include/aarch64/ucall.h create mode 100644 tools/testing/selftests/kvm/include/riscv/ucall.h create mode 100644 tools/testing/selftests/kvm/include/s390x/ucall.h create mode 100644 tools/testing/selftests/kvm/include/x86_64/ucall.h create mode 100644 tools/testing/selftests/kvm/lib/guest_sprintf.c create mode 100644 tools/testing/selftests/kvm/riscv/get-reg-list.c create mode 100644 tools/testing/selftests/kvm/s390x/debug_test.c