On 26/08/21 13:56, Marc Zyngier wrote:
Hi Paolo, Here's the KVM/arm64 pull request for 5.15. This round is all over the map, with plenty of updates around the MM subsystem (page tables, page ownership, small fixes), PMU (reset state, perf improvements), PSCI, the move to the generic entry code, and a lot of cleanups all over the shop, probably owing to having a few more eyes looking at the code. A few things to note: - the kvmarm-fixes-5.14-2 tag was brought in to allow the merge of some patches - the arm64/for-next/sysreg was merged to resolve couple of conflicts Please pull, M. The following changes since commit c500bee1c5b2f1d59b1081ac879d73268ab0ff17: Linux 5.14-rc4 (2021-08-01 17:04:17 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git tags/kvmarm-5.15 for you to fetch changes up to 419025b3b4190ee867ef4fc48fb3bd7da2e67a0c: Merge branch kvm-arm64/misc-5.15 into kvmarm-master/next (2021-08-26 11:36:12 +0100) ---------------------------------------------------------------- KVM/arm64 updates for 5.15 - Page ownership tracking between host EL1 and EL2 - Rely on userspace page tables to create large stage-2 mappings - Fix incompatibility between pKVM and kmemleak - Fix the PMU reset state, and improve the performance of the virtual PMU - Move over to the generic KVM entry code - Address PSCI reset issues w.r.t. save/restore - Preliminary rework for the upcoming pKVM fixed feature - A bunch of MM cleanups - a vGIC fix for timer spurious interrupts - Various cleanups ---------------------------------------------------------------- Alexandre Chartre (1): KVM: arm64: Disabling disabled PMU counters wastes a lot of time Anshuman Khandual (9): arm64/kexec: Test page size support with new TGRAN range values KVM: arm64: perf: Replace '0xf' instances with ID_AA64DFR0_PMUVER_IMP_DEF arm64/mm: Define ID_AA64MMFR0_TGRAN_2_SHIFT KVM: arm64: Restrict IPA size to maximum 48 bits on 4K and 16K page size arm64/mm: Add remaining ID_AA64MMFR0_PARANGE_ macros KVM: arm64: Use ARM64_MIN_PARANGE_BITS as the minimum supported IPA KVM: arm64: Drop init_common_resources() KVM: arm64: Drop check_kvm_target_cpu() based percpu probe KVM: arm64: Drop unused REQUIRES_VIRT David Brazdil (2): KVM: arm64: Fix off-by-one in range_is_memory KVM: arm64: Minor optimization of range_is_memory Fuad Tabba (10): KVM: arm64: placeholder to check if VM is protected KVM: arm64: Remove trailing whitespace in comment KVM: arm64: MDCR_EL2 is a 64-bit register KVM: arm64: Fix names of config register fields KVM: arm64: Refactor sys_regs.h,c for nVHE reuse KVM: arm64: Restore mdcr_el2 from vcpu KVM: arm64: Keep mdcr_el2's value as set by __init_el2_debug KVM: arm64: Track value of cptr_el2 in struct kvm_vcpu_arch KVM: arm64: Add feature register flag definitions KVM: arm64: Add config register bit definitions Jason Wang (1): KVM: arm64: Fix comments related to GICv2 PMR reporting Marc Zyngier (28): KVM: arm64: Walk userspace page tables to compute the THP mapping size KVM: arm64: Avoid mapping size adjustment on permission fault KVM: Remove kvm_is_transparent_hugepage() and PageTransCompoundMap() KVM: arm64: Use get_page() instead of kvm_get_pfn() KVM: arm64: Introduce helper to retrieve a PTE and its level KVM: Get rid of kvm_get_pfn() KVM: arm64: Narrow PMU sysreg reset values to architectural requirements KVM: arm64: Drop unnecessary masking of PMU registers KVM: arm64: Remove PMSWINC_EL0 shadow register arm64: Move .hyp.rodata outside of the _sdata.._edata range KVM: arm64: Unregister HYP sections from kmemleak in protected mode KVM: arm64: vgic: Resample HW pending state on deactivation KVM: arm64: Move kern_hyp_va() usage in __load_guest_stage2() into the callers KVM: arm64: Unify stage-2 programming behind __load_stage2() KVM: arm64: Upgrade VMID accesses to {READ,WRITE}_ONCE KVM: arm64: Upgrade trace_kvm_arm_set_dreg32() to 64bit Merge branch arm64/for-next/sysreg into kvm-arm64/misc-5.15 Merge tag 'kvmarm-fixes-5.14-2' into kvm-arm64/mmu/el2-tracking Merge branch kvm-arm64/pmu/reset-values into kvmarm-master/next Merge branch kvm-arm64/mmu/mapping-levels into kvmarm-master/next Merge branch kvm-arm64/misc-5.15 into kvmarm-master/next Merge branch kvm-arm64/mmu/kmemleak-pkvm into kvmarm-master/next Merge branch kvm-arm64/mmu/el2-tracking into kvmarm-master/next Merge branch kvm-arm64/psci/cpu_on into kvmarm-master/next Merge branch kvm-arm64/generic-entry into kvmarm-master/next Merge branch kvm-arm64/mmu/vmid-cleanups into kvmarm-master/next Merge branch kvm-arm64/pkvm-fixed-features-prologue into kvmarm-master/next Merge branch kvm-arm64/misc-5.15 into kvmarm-master/next Oliver Upton (7): KVM: arm64: Fix read-side race on updates to vcpu reset state KVM: arm64: Handle PSCI resets before userspace touches vCPU state KVM: arm64: Enforce reserved bits for PSCI target affinities selftests: KVM: Introduce psci_cpu_on_test KVM: arm64: Record number of signal exits as a vCPU stat entry: KVM: Allow use of generic KVM entry w/o full generic support KVM: arm64: Use generic KVM xfer to guest work function Paolo Bonzini (1): KVM: arm64: Count VMID-wide TLB invalidations Quentin Perret (20): KVM: arm64: Introduce hyp_assert_lock_held() KVM: arm64: Provide the host_stage2_try() helper macro KVM: arm64: Expose page-table helpers KVM: arm64: Optimize host memory aborts KVM: arm64: Rename KVM_PTE_LEAF_ATTR_S2_IGNORED KVM: arm64: Don't overwrite software bits with owner id KVM: arm64: Tolerate re-creating hyp mappings to set software bits KVM: arm64: Enable forcing page-level stage-2 mappings KVM: arm64: Allow populating software bits KVM: arm64: Add helpers to tag shared pages in SW bits KVM: arm64: Expose host stage-2 manipulation helpers KVM: arm64: Expose pkvm_hyp_id KVM: arm64: Introduce addr_is_memory() KVM: arm64: Enable retrieving protections attributes of PTEs KVM: arm64: Mark host bss and rodata section as shared KVM: arm64: Remove __pkvm_mark_hyp KVM: arm64: Refactor protected nVHE stage-1 locking KVM: arm64: Restrict EL2 stage-1 changes in protected mode KVM: arm64: Make __pkvm_create_mappings static KVM: arm64: Return -EPERM from __pkvm_host_share_hyp() Raghavendra Rao Ananta (1): KVM: arm64: Trim guest debug exception handling Ricardo Koller (1): KVM: arm64: vgic: Drop WARN from vgic_get_irq Steven Price (1): KVM: arm64: Fix race when enabling KVM_ARM_CAP_MTE Will Deacon (2): KVM: arm64: Add hyp_spin_is_locked() for basic locking assertions at EL2 KVM: arm64: Make hyp_panic() more robust when protected mode is enabled arch/arm64/include/asm/cpufeature.h | 27 ++- arch/arm64/include/asm/kvm_arm.h | 54 +++-- arch/arm64/include/asm/kvm_asm.h | 7 +- arch/arm64/include/asm/kvm_host.h | 17 +- arch/arm64/include/asm/kvm_hyp.h | 2 +- arch/arm64/include/asm/kvm_mmu.h | 17 +- arch/arm64/include/asm/kvm_pgtable.h | 168 ++++++++++---- arch/arm64/include/asm/sysreg.h | 54 +++-- arch/arm64/kernel/cpufeature.c | 8 +- arch/arm64/kernel/vmlinux.lds.S | 4 +- arch/arm64/kvm/Kconfig | 10 + arch/arm64/kvm/arm.c | 173 ++++++--------- arch/arm64/kvm/debug.c | 2 +- arch/arm64/kvm/guest.c | 5 +- arch/arm64/kvm/handle_exit.c | 43 ++-- arch/arm64/kvm/hyp/include/hyp/switch.h | 6 +- arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 35 ++- arch/arm64/kvm/hyp/include/nvhe/mm.h | 3 +- arch/arm64/kvm/hyp/include/nvhe/spinlock.h | 25 +++ arch/arm64/kvm/hyp/nvhe/debug-sr.c | 2 +- arch/arm64/kvm/hyp/nvhe/host.S | 21 +- arch/arm64/kvm/hyp/nvhe/hyp-main.c | 20 +- arch/arm64/kvm/hyp/nvhe/mem_protect.c | 244 ++++++++++++++++---- arch/arm64/kvm/hyp/nvhe/mm.c | 22 +- arch/arm64/kvm/hyp/nvhe/setup.c | 82 ++++++- arch/arm64/kvm/hyp/nvhe/switch.c | 17 +- arch/arm64/kvm/hyp/nvhe/tlb.c | 4 +- arch/arm64/kvm/hyp/pgtable.c | 247 +++++++++++---------- arch/arm64/kvm/hyp/vhe/debug-sr.c | 2 +- arch/arm64/kvm/hyp/vhe/switch.c | 18 +- arch/arm64/kvm/hyp/vhe/sysreg-sr.c | 2 +- arch/arm64/kvm/hyp/vhe/tlb.c | 4 +- arch/arm64/kvm/mmu.c | 76 ++++++- arch/arm64/kvm/perf.c | 2 +- arch/arm64/kvm/pmu-emul.c | 14 +- arch/arm64/kvm/psci.c | 15 +- arch/arm64/kvm/reset.c | 43 ++-- arch/arm64/kvm/sys_regs.c | 134 ++++++----- arch/arm64/kvm/sys_regs.h | 31 +++ arch/arm64/kvm/trace_handle_exit.h | 10 +- arch/arm64/kvm/vgic/vgic-mmio-v2.c | 4 +- arch/arm64/kvm/vgic/vgic-v2.c | 36 +-- arch/arm64/kvm/vgic/vgic-v3.c | 36 +-- arch/arm64/kvm/vgic/vgic.c | 39 +++- arch/arm64/kvm/vgic/vgic.h | 2 + include/linux/entry-kvm.h | 6 +- include/linux/kvm_host.h | 1 - include/linux/page-flags.h | 37 --- tools/testing/selftests/kvm/.gitignore | 1 + tools/testing/selftests/kvm/Makefile | 1 + .../selftests/kvm/aarch64/psci_cpu_on_test.c | 121 ++++++++++ .../selftests/kvm/include/aarch64/processor.h | 3 + virt/kvm/kvm_main.c | 19 +- 53 files changed, 1279 insertions(+), 697 deletions(-) create mode 100644 tools/testing/selftests/kvm/aarch64/psci_cpu_on_test.c
I'm back and will get to this today or tomorrow. Paolo