[GIT PULL] KVM/arm64 updates for 5.15

Paolo Bonzini pbonzini at redhat.com
Mon Sep 6 00:58:10 PDT 2021


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




More information about the linux-arm-kernel mailing list