mbox series

[GIT,PULL] First batch of KVM changes for Linux 6.15

Message ID 20250321182445.162466-1-pbonzini@redhat.com (mailing list archive)
State New
Headers show
Series [GIT,PULL] First batch of KVM changes for Linux 6.15 | expand

Pull-request

https://git.kernel.org/pub/scm/virt/kvm/kvm.git tags/for-linus

Message

Paolo Bonzini March 21, 2025, 6:24 p.m. UTC
Linus,

The following changes since commit 4701f33a10702d5fc577c32434eb62adde0a1ae1:

  Linux 6.14-rc7 (2025-03-16 12:55:17 -1000)

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 782f9feaa9517caf33186dcdd6b50a8f770ed29b:

  Merge branch 'kvm-pre-tdx' into HEAD (2025-03-20 13:13:13 -0400)

Since I am travelling next week I'm sending what I already have.
s390 is missing and will come during the second week of the merge
window.

There is a conflict with the Arm tree in arch/arm64/kernel/proton-pack.c.
The fix is to remove the first argument to is_midr_in_range_list(), as
seen in commit e3121298c7fc from this merge ("arm64: Modify _midr_range()
functions to read MIDR/REVIDR internally").

Paolo

----------------------------------------------------------------
ARM:

* Nested virtualization support for VGICv3, giving the nested
hypervisor control of the VGIC hardware when running an L2 VM

* Removal of 'late' nested virtualization feature register masking,
  making the supported feature set directly visible to userspace

* Support for emulating FEAT_PMUv3 on Apple silicon, taking advantage
  of an IMPLEMENTATION DEFINED trap that covers all PMUv3 registers

* Paravirtual interface for discovering the set of CPU implementations
  where a VM may run, addressing a longstanding issue of guest CPU
  errata awareness in big-little systems and cross-implementation VM
  migration

* Userspace control of the registers responsible for identifying a
  particular CPU implementation (MIDR_EL1, REVIDR_EL1, AIDR_EL1),
  allowing VMs to be migrated cross-implementation

* pKVM updates, including support for tracking stage-2 page table
  allocations in the protected hypervisor in the 'SecPageTable' stat

* Fixes to vPMU, ensuring that userspace updates to the vPMU after
  KVM_RUN are reflected into the backing perf events

LoongArch:

* Remove unnecessary header include path

* Assume constant PGD during VM context switch

* Add perf events support for guest VM

RISC-V:

* Disable the kernel perf counter during configure

* KVM selftests improvements for PMU

* Fix warning at the time of KVM module removal

x86:

* Add support for aging of SPTEs without holding mmu_lock.  Not taking mmu_lock
  allows multiple aging actions to run in parallel, and more importantly avoids
  stalling vCPUs.  This includes an implementation of per-rmap-entry locking;
  aging the gfn is done with only a per-rmap single-bin spinlock taken, whereas
  locking an rmap for write requires taking both the per-rmap spinlock and
  the mmu_lock.

  Note that this decreases slightly the accuracy of accessed-page information,
  because changes to the SPTE outside aging might not use atomic operations
  even if they could race against a clear of the Accessed bit.  This is
  deliberate because KVM and mm/ tolerate false positives/negatives for
  accessed information, and testing has shown that reducing the latency of
  aging is far more beneficial to overall system performance than providing
  "perfect" young/old information.

* Defer runtime CPUID updates until KVM emulates a CPUID instruction, to
  coalesce updates when multiple pieces of vCPU state are changing, e.g. as
  part of a nested transition.

* Fix a variety of nested emulation bugs, and add VMX support for synthesizing
  nested VM-Exit on interception (instead of injecting #UD into L2).

* Drop "support" for async page faults for protected guests that do not set
  SEND_ALWAYS (i.e. that only want async page faults at CPL3)

* Bring a bit of sanity to x86's VM teardown code, which has accumulated
  a lot of cruft over the years.  Particularly, destroy vCPUs before
  the MMU, despite the latter being a VM-wide operation.

* Add common secure TSC infrastructure for use within SNP and in the
  future TDX

* Block KVM_CAP_SYNC_REGS if guest state is protected.  It does not make
  sense to use the capability if the relevant registers are not
  available for reading or writing.

* Don't take kvm->lock when iterating over vCPUs in the suspend notifier to
  fix a largely theoretical deadlock.

* Use the vCPU's actual Xen PV clock information when starting the Xen timer,
  as the cached state in arch.hv_clock can be stale/bogus.

* Fix a bug where KVM could bleed PVCLOCK_GUEST_STOPPED across different
  PV clocks; restrict PVCLOCK_GUEST_STOPPED to kvmclock, as KVM's suspend
  notifier only accounts for kvmclock, and there's no evidence that the
  flag is actually supported by Xen guests.

* Clean up the per-vCPU "cache" of its reference pvclock, and instead only
  track the vCPU's TSC scaling (multipler+shift) metadata (which is moderately
  expensive to compute, and rarely changes for modern setups).

* Don't write to the Xen hypercall page on MSR writes that are initiated by
  the host (userspace or KVM) to fix a class of bugs where KVM can write to
  guest memory at unexpected times, e.g. during vCPU creation if userspace has
  set the Xen hypercall MSR index to collide with an MSR that KVM emulates.

* Restrict the Xen hypercall MSR index to the unofficial synthetic range to
  reduce the set of possible collisions with MSRs that are emulated by KVM
  (collisions can still happen as KVM emulates Hyper-V MSRs, which also reside
  in the synthetic range).

* Clean up and optimize KVM's handling of Xen MSR writes and xen_hvm_config.

* Update Xen TSC leaves during CPUID emulation instead of modifying the CPUID
  entries when updating PV clocks; there is no guarantee PV clocks will be
  updated between TSC frequency changes and CPUID emulation, and guest reads
  of the TSC leaves should be rare, i.e. are not a hot path.

x86 (Intel):

* Fix a bug where KVM unnecessarily reads XFD_ERR from hardware and thus
  modifies the vCPU's XFD_ERR on a #NM due to CR0.TS=1.

* Pass XFD_ERR as the payload when injecting #NM, as a preparatory step
  for upcoming FRED virtualization support.

* Decouple the EPT entry RWX protection bit macros from the EPT Violation
  bits, both as a general cleanup and in anticipation of adding support for
  emulating Mode-Based Execution Control (MBEC).

* Reject KVM_RUN if userspace manages to gain control and stuff invalid guest
  state while KVM is in the middle of emulating nested VM-Enter.

* Add a macro to handle KVM's sanity checks on entry/exit VMCS control pairs
  in anticipation of adding sanity checks for secondary exit controls (the
  primary field is out of bits).

x86 (AMD):

* Ensure the PSP driver is initialized when both the PSP and KVM modules are
  built-in (the initcall framework doesn't handle dependencies).

* Use long-term pins when registering encrypted memory regions, so that the
  pages are migrated out of MIGRATE_CMA/ZONE_MOVABLE and don't lead to
  excessive fragmentation.

* Add macros and helpers for setting GHCB return/error codes.

* Add support for Idle HLT interception, which elides interception if the vCPU
  has a pending, unmasked virtual IRQ when HLT is executed.

* Fix a bug in INVPCID emulation where KVM fails to check for a non-canonical
  address.

* Don't attempt VMRUN for SEV-ES+ guests if the vCPU's VMSA is invalid, e.g.
  because the vCPU was "destroyed" via SNP's AP Creation hypercall.

* Reject SNP AP Creation if the requested SEV features for the vCPU don't
  match the VM's configured set of features.

Selftests:

* Fix again the Intel PMU counters test; add a data load and do CLFLUSH{OPT} on the data
  instead of executing code.  The theory is that modern Intel CPUs have
  learned new code prefetching tricks that bypass the PMU counters.

* Fix a flaw in the Intel PMU counters test where it asserts that an event is
  counting correctly without actually knowing what the event counts on the
  underlying hardware.

* Fix a variety of flaws, bugs, and false failures/passes dirty_log_test, and
  improve its coverage by collecting all dirty entries on each iteration.

* Fix a few minor bugs related to handling of stats FDs.

* Add infrastructure to make vCPU and VM stats FDs available to tests by
  default (open the FDs during VM/vCPU creation).

* Relax an assertion on the number of HLT exits in the xAPIC IPI test when
  running on a CPU that supports AMD's Idle HLT (which elides interception of
  HLT if a virtual IRQ is pending and unmasked).

----------------------------------------------------------------
Akihiko Odaki (5):
      KVM: arm64: PMU: Set raw values from user to PM{C,I}NTEN{SET,CLR}, PMOVS{SET,CLR}
      KVM: arm64: PMU: Assume PMU presence in pmu-emul.c
      KVM: arm64: PMU: Fix SET_ONE_REG for vPMC regs
      KVM: arm64: PMU: Reload when user modifies registers
      KVM: arm64: PMU: Reload when resetting

Andre Przywara (1):
      KVM: arm64: nv: Allow userland to set VGIC maintenance IRQ

Atish Patra (5):
      RISC-V: KVM: Disable the kernel perf counter during configure
      KVM: riscv: selftests: Do not start the counter in the overflow handler
      KVM: riscv: selftests: Change command line option
      KVM: riscv: selftests: Allow number of interrupts to be configurable
      RISC-V: KVM: Teardown riscv specific bits after kvm_exit

Bibo Mao (4):
      LoongArch: KVM: Remove PGD saving during VM context switch
      LoongArch: KVM: Add stub for kvm_arch_vcpu_preempted_in_kernel()
      LoongArch: KVM: Implement arch-specific functions for guest perf
      LoongArch: KVM: Register perf callbacks for guest

Chao Du (1):
      RISC-V: KVM: Optimize comments in kvm_riscv_vcpu_isa_disable_allowed

Chen Ni (1):
      KVM: selftests: Remove unneeded semicolon

Claudio Imbrenda (1):
      KVM: s390: pv: fix race when making a page secure

Colin Ian King (1):
      KVM: selftests: Fix spelling mistake "UFFDIO_CONINUE" -> "UFFDIO_CONTINUE"

Colton Lewis (2):
      KVM: selftests: Fix typos in x86's PMU counter test's macro variable use
      KVM: selftests: Add defines for AMD PMU CPUID features and properties

David Woodhouse (1):
      KVM: x86/xen: Only write Xen hypercall page for guest writes to MSR

Ethan Zhao (1):
      KVM: x86/cpuid: add type suffix to decimal const 48 fix building warning

Fred Griffoul (1):
      KVM: x86: Update Xen TSC leaves during CPUID emulation

Fuad Tabba (4):
      KVM: arm64: Factor out setting HCRX_EL2 traps into separate function
      KVM: arm64: Initialize HCRX_EL2 traps in pKVM
      KVM: arm64: Factor out pKVM hyp vcpu creation to separate function
      KVM: arm64: Create each pKVM hyp vcpu after its corresponding host vcpu

Ge Yang (1):
      KVM: SEV: Use long-term pin when registering encrypted memory regions

Isaku Yamahata (3):
      KVM: selftests: Add printf attribute to _no_printf()
      KVM: x86: Push down setting vcpu.arch.user_set_tsc
      KVM: x86: Add infrastructure for secure TSC

James Houghton (6):
      KVM: Rename kvm_handle_hva_range()
      KVM: Allow lockless walk of SPTEs when handing aging mmu_notifier event
      KVM: x86/mmu: Factor out spte atomic bit clearing routine
      KVM: x86/mmu: Don't force atomic update if only the Accessed bit is volatile
      KVM: x86/mmu: Skip shadow MMU test_young if TDP MMU reports page as young
      KVM: x86/mmu: Only check gfn age in shadow MMU if indirect_shadow_pages > 0

Jim Mattson (2):
      KVM: x86: Introduce kvm_set_mp_state()
      KVM: x86: Clear pv_unhalted on all transitions to KVM_MP_STATE_RUNNABLE

Jintack Lim (1):
      KVM: arm64: nv: Respect virtual HCR_EL2.TWx setting

Li RongQing (1):
      KVM: x86: Use kvfree_rcu() to free old optimized APIC map

Liam Ni (1):
      KVM: x86: Wake vCPU for PIC interrupt injection iff a valid IRQ was found

Manali Shukla (2):
      x86/cpufeatures: Add CPUID feature bit for Idle HLT intercept
      KVM: SVM: Add Idle HLT intercept support

Marc Zyngier (25):
      arm64: cpufeature: Handle NV_frac as a synonym of NV2
      KVM: arm64: Hide ID_AA64MMFR2_EL1.NV from guest and userspace
      KVM: arm64: Mark HCR.EL2.E2H RES0 when ID_AA64MMFR1_EL1.VH is zero
      KVM: arm64: Mark HCR.EL2.{NV*,AT} RES0 when ID_AA64MMFR4_EL1.NV_frac is 0
      KVM: arm64: Advertise NV2 in the boot messages
      KVM: arm64: Consolidate idreg callbacks
      KVM: arm64: Make ID_REG_LIMIT_FIELD_ENUM() more widely available
      KVM: arm64: Enforce NV limits on a per-idregs basis
      KVM: arm64: Move NV-specific capping to idreg sanitisation
      KVM: arm64: Allow userspace to limit NV support to nVHE
      KVM: arm64: Make ID_AA64MMFR4_EL1.NV_frac writable
      KVM: arm64: Advertise FEAT_ECV when possible
      arm64: sysreg: Add layout for ICH_HCR_EL2
      arm64: sysreg: Add layout for ICH_VTR_EL2
      arm64: sysreg: Add layout for ICH_MISR_EL2
      KVM: arm64: nv: Load timer before the GIC
      KVM: arm64: nv: Add ICH_*_EL2 registers to vpcu_sysreg
      KVM: arm64: nv: Plumb handling of GICv3 EL2 accesses
      KVM: arm64: nv: Sanitise ICH_HCR_EL2 accesses
      KVM: arm64: nv: Nested GICv3 emulation
      KVM: arm64: nv: Handle L2->L1 transition on interrupt injection
      KVM: arm64: nv: Add Maintenance Interrupt emulation
      KVM: arm64: nv: Propagate used_lrs between L1 and L0 contexts
      KVM: arm64: nv: Fold GICv3 host trapping requirements into guest setup
      KVM: arm64: nv: Fail KVM init if asking for NV without GICv3

Masahiro Yamada (1):
      LoongArch: KVM: Remove unnecessary header include path

Maxim Levitsky (2):
      KVM: selftests: Support multiple write retires in dirty_log_test
      KVM: selftests: Limit dirty_log_test's s390x workaround to s390x

Melody Wang (2):
      KVM: SVM: Convert plain error code numbers to defines
      KVM: SVM: Provide helpers to set the error code

Nikolay Borisov (2):
      KVM: VMX: Remove EPT_VIOLATIONS_ACC_*_BIT defines
      KVM: x86/tdp_mmu: Remove tdp_mmu_for_each_pte()

Nikunj A Dadhania (1):
      KVM: SEV: Use to_kvm_sev_info() for fetching kvm_sev_info struct

Oliver Upton (32):
      KVM: arm64: Set HCR_EL2.TID1 unconditionally
      KVM: arm64: Load VPIDR_EL2 with the VM's MIDR_EL1 value
      KVM: arm64: vgic-v4: Only attempt vLPI mapping for actual MSIs
      KVM: arm64: vgic-v4: Only WARN for HW IRQ mismatch when unmapping vLPI
      KVM: arm64: vgic-v4: Fall back to software irqbypass if LPI not found
      KVM: arm64: Document ordering requirements for irqbypass
      KVM: arm64: nv: Request vPE doorbell upon nested ERET to L2
      KVM: arm64: Copy guest CTR_EL0 into hyp VM
      KVM: arm64: Copy MIDR_EL1 into hyp VM when it is writable
      KVM: arm64: Fix documentation for KVM_CAP_ARM_WRITABLE_IMP_ID_REGS
      drivers/perf: apple_m1: Refactor event select/filter configuration
      drivers/perf: apple_m1: Support host/guest event filtering
      KVM: arm64: Compute PMCEID from arm_pmu's event bitmaps
      KVM: arm64: Always support SW_INCR PMU event
      KVM: arm64: Use a cpucap to determine if system supports FEAT_PMUv3
      KVM: arm64: Drop kvm_arm_pmu_available static key
      KVM: arm64: Use guard() to cleanup usage of arm_pmus_lock
      KVM: arm64: Move PMUVer filtering into KVM code
      KVM: arm64: Compute synthetic sysreg ESR for Apple PMUv3 traps
      KVM: arm64: Advertise PMUv3 if IMPDEF traps are present
      KVM: arm64: Remap PMUv3 events onto hardware
      drivers/perf: apple_m1: Provide helper for mapping PMUv3 events
      KVM: arm64: Provide 1 event counter on IMPDEF hardware
      arm64: Enable IMP DEF PMUv3 traps on Apple M*
      Merge branch 'kvm-arm64/misc' into kvmarm/next
      Merge branch 'kvm-arm64/nv-vgic' into kvmarm/next
      Merge branch 'kvm-arm64/nv-idregs' into kvmarm/next
      Merge branch 'kvm-arm64/pv-cpuid' into kvmarm/next
      Merge branch 'kvm-arm64/pmuv3-asahi' into kvmarm/next
      Merge branch 'kvm-arm64/writable-midr' into kvmarm/next
      Merge branch 'kvm-arm64/pkvm-6.15' into kvmarm/next
      Merge branch 'kvm-arm64/pmu-fixes' into kvmarm/next

Paolo Bonzini (16):
      KVM: x86: move vm_destroy callback at end of kvm_arch_destroy_vm
      KVM: x86: block KVM_CAP_SYNC_REGS if guest state is protected
      Merge tag 'kvm-s390-master-6.14-1' of https://git.kernel.org/pub/scm/linux/kernel/git/kvms390/linux into HEAD
      Merge tag 'loongarch-kvm-6.15' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson into HEAD
      Merge tag 'kvm-x86-mmu-6.15' of https://github.com/kvm-x86/linux into HEAD
      Merge tag 'kvm-x86-misc-6.15' of https://github.com/kvm-x86/linux into HEAD
      Merge tag 'kvm-x86-selftests_6.15-1' of https://github.com/kvm-x86/linux into HEAD
      Merge tag 'kvm-x86-selftests-6.15' of https://github.com/kvm-x86/linux into HEAD
      Merge tag 'kvm-x86-vmx-6.15' of https://github.com/kvm-x86/linux into HEAD
      Merge tag 'kvm-x86-svm-6.15' of https://github.com/kvm-x86/linux into HEAD
      Merge tag 'kvm-x86-pvclock-6.15' of https://github.com/kvm-x86/linux into HEAD
      Merge tag 'kvm-x86-xen-6.15' of https://github.com/kvm-x86/linux into HEAD
      Merge tag 'kvm-riscv-6.15-1' of https://github.com/kvm-riscv/linux into HEAD
      Merge tag 'kvmarm-6.15' of https://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD
      Merge branch 'kvm-nvmx-and-vm-teardown' into HEAD
      Merge branch 'kvm-pre-tdx' into HEAD

Sean Christopherson (97):
      KVM: selftests: Use data load to trigger LLC references/misses in Intel PMU
      KVM: selftests: Add helpers for locally (un)blocking IRQs on x86
      crypto: ccp: Add external API interface for PSP module initialization
      KVM: SVM: Ensure PSP module is initialized if KVM module is built-in
      KVM: selftests: Make Intel arch events globally available in PMU counters test
      KVM: selftests: Only validate counts for hardware-supported arch events
      KVM: selftests: Remove dead code in Intel PMU counters test
      KVM: selftests: Drop the "feature event" param from guest test helpers
      KVM: selftests: Print out the actual Top-Down Slots count on failure
      KVM: selftests: Actually emit forced emulation prefix for kvm_asm_safe_fep()
      KVM: selftests: Sync dirty_log_test iteration to guest *before* resuming
      KVM: selftests: Drop signal/kick from dirty ring testcase
      KVM: selftests: Drop stale srandom() initialization from dirty_log_test
      KVM: selftests: Precisely track number of dirty/clear pages for each iteration
      KVM: selftests: Read per-page value into local var when verifying dirty_log_test
      KVM: selftests: Continuously reap dirty ring while vCPU is running
      KVM: selftests: Honor "stop" request in dirty ring test
      KVM: selftests: Keep dirty_log_test vCPU in guest until it needs to stop
      KVM: selftests: Post to sem_vcpu_stop if and only if vcpu_stop is true
      KVM: selftests: Use continue to handle all "pass" scenarios in dirty_log_test
      KVM: selftests: Print (previous) last_page on dirty page value mismatch
      KVM: selftests: Collect *all* dirty entries in each dirty_log_test iteration
      KVM: sefltests: Verify value of dirty_log_test last page isn't bogus
      KVM: selftests: Ensure guest writes min number of pages in dirty_log_test
      KVM: selftests: Tighten checks around prev iter's last dirty page in ring
      KVM: selftests: Set per-iteration variables at the start of each iteration
      KVM: selftests: Fix an off-by-one in the number of dirty_log_test iterations
      KVM: selftests: Allow running a single iteration of dirty_log_test
      KVM: selftests: Fix mostly theoretical leak of VM's binary stats FD
      KVM: selftests: Close VM's binary stats FD when releasing VM
      KVM: x86: Use for-loop to iterate over XSTATE size entries
      KVM: x86: Apply TSX_CTRL_CPUID_CLEAR if and only if the vCPU has RTM or HLE
      KVM: x86: Query X86_FEATURE_MWAIT iff userspace owns the CPUID feature bit
      KVM: x86: Defer runtime updates of dynamic CPUID bits until CPUID emulation
      KVM: x86: Don't take kvm->lock when iterating over vCPUs in suspend notifier
      KVM: x86: Eliminate "handling" of impossible errors during SUSPEND
      KVM: x86: Drop local pvclock_flags variable in kvm_guest_time_update()
      KVM: x86: Process "guest stopped request" once per guest time update
      KVM: x86/xen: Use guest's copy of pvclock when starting timer
      KVM: x86: Don't bleed PVCLOCK_GUEST_STOPPED across PV clocks
      KVM: x86: Set PVCLOCK_GUEST_STOPPED only for kvmclock, not for Xen PV clock
      KVM: x86: Pass reference pvclock as a param to kvm_setup_guest_pvclock()
      KVM: x86: Remove per-vCPU "cache" of its reference pvclock
      KVM: x86: Setup Hyper-V TSC page before Xen PV clocks (during clock update)
      KVM: x86: Override TSC_STABLE flag for Xen PV clocks in kvm_guest_time_update()
      KVM: selftests: Assert that __vm_get_stat() actually finds a stat
      KVM: selftests: Macrofy vm_get_stat() to auto-generate stat name string
      KVM: selftests: Add struct and helpers to wrap binary stats cache
      KVM: selftests: Get VM's binary stats FD when opening VM
      KVM: selftests: Adjust number of files rlimit for all "standard" VMs
      KVM: selftests: Add infrastructure for getting vCPU binary stats
      KVM: x86/mmu: Always update A/D-disabled SPTEs atomically
      KVM: x86/mmu: Age TDP MMU SPTEs without holding mmu_lock
      KVM: x86/mmu: Refactor low level rmap helpers to prep for walking w/o mmu_lock
      KVM: x86/mmu: Add infrastructure to allow walking rmaps outside of mmu_lock
      KVM: x86/mmu: Add support for lockless walks of rmap SPTEs
      KVM: x86/mmu: Walk rmaps (shadow MMU) without holding mmu_lock when aging gfns
      KVM: x86/xen: Restrict hypercall MSR to unofficial synthetic range
      KVM: x86/xen: Add an #ifdef'd helper to detect writes to Xen MSR
      KVM: x86/xen: Consult kvm_xen_enabled when checking for Xen MSR writes
      KVM: x86/xen: Bury xen_hvm_config behind CONFIG_KVM_XEN=y
      KVM: x86/xen: Move kvm_xen_hvm_config field into kvm_xen
      KVM: nVMX: Check PAUSE_EXITING, not BUS_LOCK_DETECTION, on PAUSE emulation
      KVM: nSVM: Pass next RIP, not current RIP, for nested VM-Exit on emulation
      KVM: nVMX: Allow emulating RDPID on behalf of L2
      KVM: nVMX: Emulate HLT in L2 if it's not intercepted
      KVM: nVMX: Consolidate missing X86EMUL_INTERCEPTED logic in L2 emulation
      KVM: x86: Plumb the src/dst operand types through to .check_intercept()
      KVM: x86: Plumb the emulator's starting RIP into nested intercept checks
      KVM: x86: Add a #define for the architectural max instruction length
      KVM: nVMX: Allow the caller to provide instruction length on nested VM-Exit
      KVM: nVMX: Synthesize nested VM-Exit for supported emulation intercepts
      KVM: selftests: Add a nested (forced) emulation intercept test for x86
      KVM: x86: Don't inject PV async #PF if SEND_ALWAYS=0 and guest state is protected
      KVM: x86: Rename and invert async #PF's send_user_only flag to send_always
      KVM: x86: Use a dedicated flow for queueing re-injected exceptions
      KVM: VMX: Don't modify guest XFD_ERR if CR0.TS=1
      KVM: VMX: Pass XFD_ERR as pseudo-payload when injecting #NM
      KVM: x86: Don't load/put vCPU when unloading its MMU during teardown
      KVM: Assert that a destroyed/freed vCPU is no longer visible
      KVM: x86: Unload MMUs during vCPU destruction, not before
      KVM: x86: Fold guts of kvm_arch_sync_events() into kvm_arch_pre_destroy_vm()
      KVM: Drop kvm_arch_sync_events() now that all implementations are nops
      KVM: nVMX: Decouple EPT RWX bits from EPT Violation protection bits
      KVM: VMX: Reject KVM_RUN if userspace forces emulation during nested VM-Enter
      KVM: SVM: Inject #GP if memory operand for INVPCID is non-canonical
      KVM: selftests: Relax assertion on HLT exits if CPU supports Idle HLT
      KVM: x86: Always set mp_state to RUNNABLE on wakeup from HLT
      KVM: SVM: Refuse to attempt VRMUN if an SEV-ES+ guest has an invalid VMSA
      KVM: SVM: Don't change target vCPU state on AP Creation VMGEXIT error
      KVM: SVM: Require AP's "requested" SEV_FEATURES to match KVM's view
      KVM: SVM: Simplify request+kick logic in SNP AP Creation handling
      KVM: SVM: Use guard(mutex) to simplify SNP AP Creation error handling
      KVM: SVM: Mark VMCB dirty before processing incoming snp_vmsa_gpa
      KVM: SVM: Use guard(mutex) to simplify SNP vCPU state updates
      KVM: SVM: Invalidate "next" SNP VMSA GPA even on failure
      KVM: VMX: Extract checks on entry/exit control pairs to a helper macro

Sebastian Ott (5):
      KVM: arm64: Maintain per-VM copy of implementation ID regs
      KVM: arm64: Allow userspace to change the implementation ID registers
      KVM: selftests: arm64: Test writes to MIDR,REVIDR,AIDR
      KVM: arm64: Allow userspace to write ID_AA64MMFR0_EL1.TGRAN*_2
      KVM: arm64: selftests: Test that TGRAN*_2 fields are writable

Shameer Kolothum (7):
      arm64: Modify _midr_range() functions to read MIDR/REVIDR internally
      KVM: arm64: Specify hypercall ABI for retrieving target implementations
      KVM: arm64: Introduce KVM_REG_ARM_VENDOR_HYP_BMAP_2
      arm64: Make  _midr_in_range_list() an exported function
      smccc/kvm_guest: Enable errata based on implementation CPUs
      KVM: selftests: Add test for KVM_REG_ARM_VENDOR_HYP_BMAP_2
      smccc: kvm_guest: Fix kernel builds for 32 bit arm

Ted Chen (1):
      KVM: x86: Remove unused iommu_domain and iommu_noncoherent from kvm_arch

Vincent Donnefort (3):
      KVM: arm64: Add flags to kvm_hyp_memcache
      KVM: arm64: Distinct pKVM teardown memcache for stage-2
      KVM: arm64: Count pKVM stage-2 usage in secondary pagetable stats

Will Deacon (1):
      KVM: arm64: Tear down vGIC on failed vCPU creation

Xiaoyao Li (1):
      KVM: x86: Remove the unreachable case for 0x80000022 leaf in __do_cpuid_func()

 Documentation/virt/kvm/api.rst                     |  22 +
 Documentation/virt/kvm/arm/fw-pseudo-registers.rst |  15 +-
 Documentation/virt/kvm/arm/hypercalls.rst          |  59 +++
 Documentation/virt/kvm/devices/arm-vgic-its.rst    |   5 +-
 Documentation/virt/kvm/devices/arm-vgic-v3.rst     |  12 +-
 Documentation/virt/kvm/locking.rst                 |   4 +-
 arch/arm64/include/asm/apple_m1_pmu.h              |   1 +
 arch/arm64/include/asm/cpucaps.h                   |   2 +
 arch/arm64/include/asm/cpufeature.h                |  28 +-
 arch/arm64/include/asm/cputype.h                   |  40 +-
 arch/arm64/include/asm/hypervisor.h                |   1 +
 arch/arm64/include/asm/kvm_arm.h                   |   4 +-
 arch/arm64/include/asm/kvm_emulate.h               |  37 ++
 arch/arm64/include/asm/kvm_host.h                  |  67 ++-
 arch/arm64/include/asm/kvm_hyp.h                   |   2 +
 arch/arm64/include/asm/kvm_nested.h                |   1 +
 arch/arm64/include/asm/kvm_pkvm.h                  |   1 +
 arch/arm64/include/asm/mmu.h                       |   3 +-
 arch/arm64/include/asm/sysreg.h                    |  30 --
 arch/arm64/include/uapi/asm/kvm.h                  |  14 +
 arch/arm64/kernel/cpu_errata.c                     | 117 ++++-
 arch/arm64/kernel/cpufeature.c                     |  53 ++-
 arch/arm64/kernel/image-vars.h                     |   6 +-
 arch/arm64/kernel/proton-pack.c                    |  17 +-
 arch/arm64/kvm/Makefile                            |   2 +-
 arch/arm64/kvm/arm.c                               |  76 ++-
 arch/arm64/kvm/emulate-nested.c                    |  24 +-
 arch/arm64/kvm/handle_exit.c                       |   6 +-
 arch/arm64/kvm/hyp/include/hyp/switch.h            |   4 +-
 arch/arm64/kvm/hyp/include/hyp/sysreg-sr.h         |  14 +-
 arch/arm64/kvm/hyp/include/nvhe/mem_protect.h      |   2 +-
 arch/arm64/kvm/hyp/include/nvhe/pkvm.h             |   6 -
 arch/arm64/kvm/hyp/nvhe/mem_protect.c              |   2 +-
 arch/arm64/kvm/hyp/nvhe/pkvm.c                     |  79 ++--
 arch/arm64/kvm/hyp/nvhe/sysreg-sr.c                |   4 +-
 arch/arm64/kvm/hyp/vgic-v3-sr.c                    |  16 +-
 arch/arm64/kvm/hyp/vhe/switch.c                    |  22 +
 arch/arm64/kvm/hyp/vhe/sysreg-sr.c                 |  28 +-
 arch/arm64/kvm/hypercalls.c                        |  13 +
 arch/arm64/kvm/mmu.c                               |  22 +-
 arch/arm64/kvm/nested.c                            | 286 ++++++-----
 arch/arm64/kvm/pkvm.c                              |  75 +--
 arch/arm64/kvm/pmu-emul.c                          | 194 ++++----
 arch/arm64/kvm/pmu.c                               |  10 +-
 arch/arm64/kvm/reset.c                             |   3 -
 arch/arm64/kvm/sys_regs.c                          | 478 ++++++++++++-------
 arch/arm64/kvm/sys_regs.h                          |  10 +
 arch/arm64/kvm/vgic-sys-reg-v3.c                   |   8 +-
 arch/arm64/kvm/vgic/vgic-init.c                    |  29 ++
 arch/arm64/kvm/vgic/vgic-kvm-device.c              |  29 +-
 arch/arm64/kvm/vgic/vgic-v3-nested.c               | 409 ++++++++++++++++
 arch/arm64/kvm/vgic/vgic-v3.c                      |  46 +-
 arch/arm64/kvm/vgic/vgic-v4.c                      |  35 +-
 arch/arm64/kvm/vgic/vgic.c                         |  38 ++
 arch/arm64/kvm/vgic/vgic.h                         |   6 +
 arch/arm64/tools/cpucaps                           |   2 +
 arch/arm64/tools/sysreg                            |  48 ++
 arch/loongarch/include/asm/kvm_host.h              |   7 +-
 arch/loongarch/kernel/asm-offsets.c                |   1 +
 arch/loongarch/kvm/Kconfig                         |   1 +
 arch/loongarch/kvm/Makefile                        |   2 -
 arch/loongarch/kvm/main.c                          |   3 +
 arch/loongarch/kvm/switch.S                        |  12 +-
 arch/loongarch/kvm/vcpu.c                          |  37 ++
 arch/mips/include/asm/kvm_host.h                   |   1 -
 arch/powerpc/include/asm/kvm_host.h                |   1 -
 arch/riscv/include/asm/kvm_host.h                  |   2 -
 arch/riscv/kvm/main.c                              |   4 +-
 arch/riscv/kvm/vcpu_onereg.c                       |   2 +-
 arch/riscv/kvm/vcpu_pmu.c                          |   1 +
 arch/s390/include/asm/gmap.h                       |   1 -
 arch/s390/include/asm/kvm_host.h                   |   1 -
 arch/s390/include/asm/uv.h                         |   2 +-
 arch/s390/kernel/uv.c                              | 136 +++++-
 arch/s390/kvm/gmap.c                               | 103 +---
 arch/s390/kvm/kvm-s390.c                           |  25 +-
 arch/s390/mm/gmap.c                                |  28 --
 arch/x86/include/asm/cpufeatures.h                 |   1 +
 arch/x86/include/asm/kvm_host.h                    |  21 +-
 arch/x86/include/asm/sev-common.h                  |  12 +-
 arch/x86/include/asm/svm.h                         |   5 +-
 arch/x86/include/asm/vmx.h                         |  28 +-
 arch/x86/include/uapi/asm/kvm.h                    |   3 +
 arch/x86/include/uapi/asm/svm.h                    |   2 +
 arch/x86/kvm/Kconfig                               |   1 +
 arch/x86/kvm/cpuid.c                               |  68 ++-
 arch/x86/kvm/cpuid.h                               |   9 +-
 arch/x86/kvm/emulate.c                             |   5 +-
 arch/x86/kvm/i8259.c                               |   2 +-
 arch/x86/kvm/kvm_emulate.h                         |   7 +-
 arch/x86/kvm/lapic.c                               |  17 +-
 arch/x86/kvm/mmu/mmu.c                             | 363 ++++++++++----
 arch/x86/kvm/mmu/paging_tmpl.h                     |   3 +-
 arch/x86/kvm/mmu/spte.c                            |  31 +-
 arch/x86/kvm/mmu/spte.h                            |   2 +-
 arch/x86/kvm/mmu/tdp_iter.h                        |  34 +-
 arch/x86/kvm/mmu/tdp_mmu.c                         |  45 +-
 arch/x86/kvm/smm.c                                 |   2 +-
 arch/x86/kvm/svm/nested.c                          |   2 +-
 arch/x86/kvm/svm/sev.c                             | 377 +++++++--------
 arch/x86/kvm/svm/svm.c                             |  56 ++-
 arch/x86/kvm/svm/svm.h                             |  39 +-
 arch/x86/kvm/trace.h                               |  14 +-
 arch/x86/kvm/vmx/nested.c                          |  18 +-
 arch/x86/kvm/vmx/nested.h                          |  22 +-
 arch/x86/kvm/vmx/vmx.c                             | 226 ++++++---
 arch/x86/kvm/x86.c                                 | 342 +++++++-------
 arch/x86/kvm/x86.h                                 |   8 +
 arch/x86/kvm/xen.c                                 | 121 +++--
 arch/x86/kvm/xen.h                                 |  30 +-
 drivers/clocksource/arm_arch_timer.c               |   2 +-
 drivers/firmware/smccc/kvm_guest.c                 |  66 +++
 drivers/hwtracing/coresight/coresight-etm4x-core.c |   2 +-
 drivers/irqchip/irq-apple-aic.c                    |   8 +-
 drivers/perf/apple_m1_cpu_pmu.c                    | 101 +++-
 include/kvm/arm_pmu.h                              |  17 +-
 include/kvm/arm_vgic.h                             |  10 +
 include/linux/arm-smccc.h                          |  15 +
 include/linux/kvm_host.h                           |   2 +-
 include/linux/perf/arm_pmu.h                       |   4 +
 include/uapi/linux/kvm.h                           |   1 +
 tools/arch/arm/include/uapi/asm/kvm.h              |   1 +
 tools/arch/arm64/include/asm/sysreg.h              |  30 --
 tools/arch/arm64/include/uapi/asm/kvm.h            |  12 +
 tools/testing/selftests/kvm/Makefile.kvm           |   1 +
 .../selftests/kvm/access_tracking_perf_test.c      |   2 +-
 tools/testing/selftests/kvm/arm64/get-reg-list.c   |   1 +
 tools/testing/selftests/kvm/arm64/hypercalls.c     |  46 +-
 tools/testing/selftests/kvm/arm64/set_id_regs.c    |  40 +-
 tools/testing/selftests/kvm/dirty_log_test.c       | 521 ++++++++++-----------
 tools/testing/selftests/kvm/include/kvm_util.h     |  33 +-
 tools/testing/selftests/kvm/include/test_util.h    |   2 +-
 .../testing/selftests/kvm/include/x86/processor.h  |  50 +-
 tools/testing/selftests/kvm/kvm_create_max_vcpus.c |  28 +-
 tools/testing/selftests/kvm/lib/kvm_util.c         | 114 +++--
 tools/testing/selftests/kvm/lib/userfaultfd_util.c |   2 +-
 tools/testing/selftests/kvm/riscv/sbi_pmu_test.c   |  81 +++-
 .../kvm/x86/dirty_log_page_splitting_test.c        |   6 +-
 tools/testing/selftests/kvm/x86/hyperv_ipi.c       |   6 +-
 .../selftests/kvm/x86/nested_emulation_test.c      | 146 ++++++
 .../testing/selftests/kvm/x86/nx_huge_pages_test.c |   4 +-
 .../testing/selftests/kvm/x86/pmu_counters_test.c  | 158 ++++---
 tools/testing/selftests/kvm/x86/svm_int_ctl_test.c |   5 +-
 .../selftests/kvm/x86/ucna_injection_test.c        |   2 +-
 tools/testing/selftests/kvm/x86/xapic_ipi_test.c   |  16 +-
 tools/testing/selftests/kvm/x86/xapic_state_test.c |   4 +-
 tools/testing/selftests/kvm/x86/xen_shinfo_test.c  |   5 +-
 virt/kvm/Kconfig                                   |   4 +
 virt/kvm/kvm_main.c                                |  62 ++-
 149 files changed, 4313 insertions(+), 2150 deletions(-)
 create mode 100644 arch/arm64/kvm/vgic/vgic-v3-nested.c
 create mode 100644 tools/testing/selftests/kvm/x86/nested_emulation_test.c