[GIT PULL] KVM changes for 6.6 merge window

From: Paolo Bonzini
Date: Wed Sep 06 2023 - 13:49:38 EST


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