Hi Paolo, Here's the rather large pull request for 5.13. Changes are all over the map, but the big ticket items are the S2 host isolation when running in protected mode, the save/restore support for GICv4.1 and guest SVE support in nVHE mode. Plenty of fixes too. Note that this pull request drags a number of branches from other trees in order to avoid conflicts and make people's life easier: - the Coresight ETE/TRBE branch, as it is intertwined with the KVM tracing support - the arm64 vhe-only branch that deals with broken CPUs such as the Apple M1 - the arm64 neon-softirqs-disabled that improves the support for FP processing You will still get a couple of conflicts with the KVM tree, but these are absolutely trivial to resolve. Please pull, M. The following changes since commit 1e28eed17697bcf343c6743f0028cc3b5dd88bf0: Linux 5.12-rc3 (2021-03-14 14:41:02 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git tags/kvmarm-5.13 for you to fetch changes up to 9a8aae605b80fc0a830cdce747eed48e11acc067: Merge branch 'kvm-arm64/kill_oprofile_dependency' into kvmarm-master/next (2021-04-22 13:41:49 +0100) ---------------------------------------------------------------- KVM/arm64 updates for Linux 5.13 New features: - Stage-2 isolation for the host kernel when running in protected mode - Guest SVE support when running in nVHE mode - Force W^X hypervisor mappings in nVHE mode - ITS save/restore for guests using direct injection with GICv4.1 - nVHE panics now produce readable backtraces - Guest support for PTP using the ptp_kvm driver - Performance improvements in the S2 fault handler - Alexandru is now a reviewer (not really a new feature...) Fixes: - Proper emulation of the GICR_TYPER register - Handle the complete set of relocation in the nVHE EL2 object - Get rid of the oprofile dependency in the PMU code (and of the oprofile body parts at the same time) - Debug and SPE fixes - Fix vcpu reset ---------------------------------------------------------------- Alexandru Elisei (4): Documentation: KVM: Document KVM_GUESTDBG_USE_HW control flag for arm64 KVM: arm64: Initialize VCPU mdcr_el2 before loading it KVM: arm64: Don't print warning when trapping SPE registers KVM: arm64: Don't advertise FEAT_SPE to guests Andrew Scull (5): bug: Remove redundant condition check in report_bug bug: Factor out a getter for a bug's file line bug: Assign values once in bug_get_file_line() KVM: arm64: Use BUG and BUG_ON in nVHE hyp KVM: arm64: Log source when panicking from nVHE hyp Anshuman Khandual (5): arm64: Add TRBE definitions coresight: core: Add support for dedicated percpu sinks coresight: sink: Add TRBE driver Documentation: coresight: trbe: Sysfs ABI description Documentation: trace: Add documentation for TRBE Ard Biesheuvel (3): arm64: assembler: remove conditional NEON yield macros arm64: assembler: introduce wxN aliases for wN registers arm64: fpsimd: run kernel mode NEON with softirqs disabled Daniel Kiss (1): KVM: arm64: Enable SVE support for nVHE David Brazdil (1): KVM: arm64: Support PREL/PLT relocs in EL2 code Eric Auger (11): KVM: arm64: vgic-v3: Fix some error codes when setting RDIST base KVM: arm64: Fix KVM_VGIC_V3_ADDR_TYPE_REDIST_REGION read KVM: arm64: vgic-v3: Fix error handling in vgic_v3_set_redist_base() KVM: arm/arm64: vgic: Reset base address on kvm_vgic_dist_destroy() docs: kvm: devices/arm-vgic-v3: enhance KVM_DEV_ARM_VGIC_CTRL_INIT doc KVM: arm64: Simplify argument passing to vgic_uaccess_[read|write] kvm: arm64: vgic-v3: Introduce vgic_v3_free_redist_region() KVM: arm64: vgic-v3: Expose GICR_TYPER.Last for userspace KVM: selftests: aarch64/vgic-v3 init sequence tests KVM: selftests: vgic_init kvm selftests fixup KVM: arm/arm64: Fix KVM_VGIC_V3_ADDR_TYPE_REDIST read Gavin Shan (3): KVM: arm64: Hide kvm_mmu_wp_memory_region() KVM: arm64: Use find_vma_intersection() KVM: arm64: Don't retrieve memory slot again in page fault handler Jianyong Wu (4): ptp: Reorganize ptp_kvm.c to make it arch-independent clocksource: Add clocksource id for arm arch counter KVM: arm64: Add support for the KVM PTP service ptp: arm/arm64: Enable ptp_kvm for arm/arm64 Jon Hunter (1): ptp: Don't print an error if ptp_kvm is not supported Marc Zyngier (50): KVM: arm64: Provide KVM's own save/restore SVE primitives KVM: arm64: Use {read,write}_sysreg_el1 to access ZCR_EL1 KVM: arm64: Let vcpu_sve_pffr() handle HYP VAs KVM: arm64: Introduce vcpu_sve_vq() helper arm64: sve: Provide a conditional update accessor for ZCR_ELx KVM: arm64: Rework SVE host-save/guest-restore KVM: arm64: Map SVE context at EL2 when available KVM: arm64: Save guest's ZCR_EL1 before saving the FPSIMD state KVM: arm64: Trap host SVE accesses when the FPSIMD state is dirty KVM: arm64: Save/restore SVE state for nVHE arm64: Use INIT_SCTLR_EL1_MMU_OFF to disable the MMU on CPU restart KVM: arm64: Use INIT_SCTLR_EL2_MMU_OFF to disable the MMU on KVM teardown KVM: arm64: Turn SCTLR_ELx_FLAGS into INIT_SCTLR_EL2_MMU_ON KVM: arm64: Force SCTLR_EL2.WXN when running nVHE KVM: arm64: Fix host's ZCR_EL2 restore on nVHE Merge tag 'v5.12-rc3' into kvm-arm64/host-stage2 irqchip/gic-v3-its: Add a cache invalidation right after vPE unmapping KVM: arm64: Generate final CTR_EL0 value when running in Protected mode KVM: arm64: Drop the CPU_FTR_REG_HYP_COPY infrastructure KVM: arm64: Elect Alexandru as a replacement for Julien as a reviewer KVM: arm64: Mark the kvmarm ML as moderated for non-subscribers KVM: arm64: Fix table format for PTP documentation Merge remote-tracking branch 'coresight/next-ETE-TRBE' into kvmarm-master/next arm64: cpufeature: Allow early filtering of feature override arm64: Cope with CPUs stuck in VHE mode arm64: Get rid of CONFIG_ARM64_VHE KVM: arm64: Clarify vcpu reset behaviour KVM: arm64: Fully zero the vcpu state on reset Merge branch 'kvm-arm64/debug-5.13' into kvmarm-master/next Merge branch 'kvm-arm64/host-stage2' into kvmarm-master/next Merge branch 'kvm-arm64/memslot-fixes' into kvmarm-master/next Merge branch 'kvm-arm64/misc-5.13' into kvmarm-master/next Merge branch 'kvm-arm64/nvhe-panic-info' into kvmarm-master/next Merge branch 'kvm-arm64/nvhe-sve' into kvmarm-master/next Merge branch 'kvm-arm64/nvhe-wxn' into kvmarm-master/next Merge branch 'kvm-arm64/ptp' into kvmarm-master/next Merge branch 'kvm-arm64/vgic-5.13' into kvmarm-master/next Merge branch 'kvm-arm64/vlpi-save-restore' into kvmarm-master/next Merge remote-tracking branch 'arm64/for-next/vhe-only' into kvmarm-master/next Merge remote-tracking branch 'arm64/for-next/neon-softirqs-disabled' into kvmarm-master/next Merge remote-tracking branch 'coresight/next-ETE-TRBE' into kvmarm-master/next bug: Provide dummy version of bug_get_file_line() when !GENERIC_BUG Merge branch 'kvm-arm64/nvhe-panic-info' into kvmarm-master/next Merge branch 'kvm-arm64/ptp' into kvmarm-master/next KVM: arm64: Divorce the perf code from oprofile helpers arm64: Get rid of oprofile leftovers s390: Get rid of oprofile leftovers sh: Get rid of oprofile leftovers perf: Get rid of oprofile leftovers Merge branch 'kvm-arm64/kill_oprofile_dependency' into kvmarm-master/next Quentin Perret (35): KVM: arm64: Initialize kvm_nvhe_init_params early KVM: arm64: Avoid free_page() in page-table allocator KVM: arm64: Factor memory allocation out of pgtable.c KVM: arm64: Introduce a BSS section for use at Hyp KVM: arm64: Make kvm_call_hyp() a function call at Hyp KVM: arm64: Allow using kvm_nvhe_sym() in hyp code KVM: arm64: Introduce an early Hyp page allocator KVM: arm64: Stub CONFIG_DEBUG_LIST at Hyp KVM: arm64: Introduce a Hyp buddy page allocator KVM: arm64: Enable access to sanitized CPU features at EL2 KVM: arm64: Provide __flush_dcache_area at EL2 KVM: arm64: Factor out vector address calculation arm64: asm: Provide set_sctlr_el2 macro KVM: arm64: Prepare the creation of s1 mappings at EL2 KVM: arm64: Elevate hypervisor mappings creation at EL2 KVM: arm64: Use kvm_arch for stage 2 pgtable KVM: arm64: Use kvm_arch in kvm_s2_mmu KVM: arm64: Set host stage 2 using kvm_nvhe_init_params KVM: arm64: Refactor kvm_arm_setup_stage2() KVM: arm64: Refactor __load_guest_stage2() KVM: arm64: Refactor __populate_fault_info() KVM: arm64: Make memcache anonymous in pgtable allocator KVM: arm64: Reserve memory for host stage 2 KVM: arm64: Sort the hypervisor memblocks KVM: arm64: Always zero invalid PTEs KVM: arm64: Use page-table to track page ownership KVM: arm64: Refactor the *_map_set_prot_attr() helpers KVM: arm64: Add kvm_pgtable_stage2_find_range() KVM: arm64: Introduce KVM_PGTABLE_S2_NOFWB stage 2 flag KVM: arm64: Introduce KVM_PGTABLE_S2_IDMAP stage 2 flag KVM: arm64: Provide sanitized mmfr* registers at EL2 KVM: arm64: Wrap the host with a stage 2 KVM: arm64: Page-align the .hyp sections KVM: arm64: Disable PMU support in protected mode KVM: arm64: Protect the .hyp sections from the host Shenming Lu (4): irqchip/gic-v3-its: Drop the setting of PTZ altogether KVM: arm64: GICv4.1: Add function to get VLPI state KVM: arm64: GICv4.1: Try to save VLPI state in save_pending_tables KVM: arm64: GICv4.1: Give a chance to save VLPI state Suzuki K Poulose (17): KVM: arm64: Hide system instruction access to Trace registers KVM: arm64: Disable guest access to trace filter controls perf: aux: Add flags for the buffer format perf: aux: Add CoreSight PMU buffer formats arm64: Add support for trace synchronization barrier KVM: arm64: Handle access to TRFCR_EL1 KVM: arm64: Move SPE availability check to VCPU load arm64: KVM: Enable access to TRBE support for host coresight: etm4x: Move ETM to prohibited region for disable coresight: etm-perf: Allow an event to use different sinks coresight: Do not scan for graph if none is present coresight: etm4x: Add support for PE OS lock coresight: ete: Add support for ETE sysreg access coresight: ete: Add support for ETE tracing dts: bindings: Document device tree bindings for ETE coresight: etm-perf: Handle stale output handles dts: bindings: Document device tree bindings for Arm TRBE Thomas Gleixner (1): time: Add mechanism to recognize clocksource in time_get_snapshot Wang Wensheng (1): KVM: arm64: Fix error return code in init_hyp_mode() Wei Yongjun (2): coresight: core: Make symbol 'csdev_sink' static coresight: trbe: Fix return value check in arm_trbe_register_coresight_cpu() Will Deacon (5): arm64: lib: Annotate {clear, copy}_page() as position-independent KVM: arm64: Link position-independent string routines into .hyp.text arm64: kvm: Add standalone ticket spinlock implementation for use at hyp arm/arm64: Probe for the presence of KVM hypervisor KVM: arm64: Advertise KVM UID to guests via SMCCC Xiaofei Tan (1): arm64: sve: Provide sve_cond_update_zcr_vq fallback when !ARM64_SVE Xu Jia (1): KVM: arm64: Make symbol '_kvm_host_prot_finalize' static Zenghui Yu (2): KVM: arm64: GICv4.1: Restore VLPI pending state to physical side KVM: arm64: Fix Function ID typo for PTP_KVM service .../ABI/testing/sysfs-bus-coresight-devices-trbe | 14 + Documentation/admin-guide/kernel-parameters.txt | 3 +- Documentation/devicetree/bindings/arm/ete.yaml | 75 ++ Documentation/devicetree/bindings/arm/trbe.yaml | 49 + Documentation/trace/coresight/coresight-trbe.rst | 38 + Documentation/virt/kvm/api.rst | 25 +- Documentation/virt/kvm/arm/index.rst | 1 + Documentation/virt/kvm/arm/ptp_kvm.rst | 25 + Documentation/virt/kvm/devices/arm-vgic-its.rst | 2 +- Documentation/virt/kvm/devices/arm-vgic-v3.rst | 2 +- MAINTAINERS | 6 +- arch/arm/include/asm/hypervisor.h | 3 + arch/arm64/Kconfig | 20 - arch/arm64/crypto/aes-modes.S | 2 +- arch/arm64/crypto/sha1-ce-core.S | 2 +- arch/arm64/crypto/sha2-ce-core.S | 2 +- arch/arm64/crypto/sha3-ce-core.S | 4 +- arch/arm64/crypto/sha512-ce-core.S | 2 +- arch/arm64/include/asm/assembler.h | 129 +-- arch/arm64/include/asm/barrier.h | 1 + arch/arm64/include/asm/cpufeature.h | 17 + arch/arm64/include/asm/el2_setup.h | 13 + arch/arm64/include/asm/fpsimd.h | 11 + arch/arm64/include/asm/fpsimdmacros.h | 10 +- arch/arm64/include/asm/hyp_image.h | 7 + arch/arm64/include/asm/hypervisor.h | 3 + arch/arm64/include/asm/kvm_arm.h | 3 + arch/arm64/include/asm/kvm_asm.h | 9 + arch/arm64/include/asm/kvm_host.h | 46 +- arch/arm64/include/asm/kvm_hyp.h | 14 +- arch/arm64/include/asm/kvm_mmu.h | 25 +- arch/arm64/include/asm/kvm_pgtable.h | 164 ++- arch/arm64/include/asm/pgtable-prot.h | 4 +- arch/arm64/include/asm/sections.h | 1 + arch/arm64/include/asm/sysreg.h | 59 +- arch/arm64/kernel/asm-offsets.c | 5 + arch/arm64/kernel/cpu-reset.S | 5 +- arch/arm64/kernel/cpufeature.c | 11 +- arch/arm64/kernel/fpsimd.c | 4 +- arch/arm64/kernel/head.S | 39 +- arch/arm64/kernel/hyp-stub.S | 13 +- arch/arm64/kernel/idreg-override.c | 26 +- arch/arm64/kernel/image-vars.h | 34 +- arch/arm64/kernel/vmlinux.lds.S | 74 +- arch/arm64/kvm/arm.c | 216 +++- arch/arm64/kvm/debug.c | 116 +- arch/arm64/kvm/fpsimd.c | 26 +- arch/arm64/kvm/guest.c | 6 +- arch/arm64/kvm/handle_exit.c | 45 + arch/arm64/kvm/hyp/Makefile | 2 +- arch/arm64/kvm/hyp/fpsimd.S | 10 + arch/arm64/kvm/hyp/include/hyp/switch.h | 107 +- arch/arm64/kvm/hyp/include/nvhe/early_alloc.h | 14 + arch/arm64/kvm/hyp/include/nvhe/gfp.h | 68 ++ arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 36 + arch/arm64/kvm/hyp/include/nvhe/memory.h | 51 + arch/arm64/kvm/hyp/include/nvhe/mm.h | 96 ++ arch/arm64/kvm/hyp/include/nvhe/spinlock.h | 92 ++ arch/arm64/kvm/hyp/nvhe/Makefile | 9 +- arch/arm64/kvm/hyp/nvhe/cache.S | 13 + arch/arm64/kvm/hyp/nvhe/debug-sr.c | 56 +- arch/arm64/kvm/hyp/nvhe/early_alloc.c | 54 + arch/arm64/kvm/hyp/nvhe/gen-hyprel.c | 18 + arch/arm64/kvm/hyp/nvhe/host.S | 18 +- arch/arm64/kvm/hyp/nvhe/hyp-init.S | 54 +- arch/arm64/kvm/hyp/nvhe/hyp-main.c | 75 +- arch/arm64/kvm/hyp/nvhe/hyp-smp.c | 6 +- arch/arm64/kvm/hyp/nvhe/hyp.lds.S | 1 + arch/arm64/kvm/hyp/nvhe/mem_protect.c | 279 +++++ arch/arm64/kvm/hyp/nvhe/mm.c | 173 +++ arch/arm64/kvm/hyp/nvhe/page_alloc.c | 195 ++++ arch/arm64/kvm/hyp/nvhe/psci-relay.c | 4 +- arch/arm64/kvm/hyp/nvhe/setup.c | 214 ++++ arch/arm64/kvm/hyp/nvhe/stub.c | 22 + arch/arm64/kvm/hyp/nvhe/switch.c | 26 +- arch/arm64/kvm/hyp/nvhe/tlb.c | 4 +- arch/arm64/kvm/hyp/pgtable.c | 410 +++++-- arch/arm64/kvm/hyp/reserved_mem.c | 113 ++ arch/arm64/kvm/hyp/vhe/switch.c | 4 +- arch/arm64/kvm/hypercalls.c | 80 +- arch/arm64/kvm/mmu.c | 136 ++- arch/arm64/kvm/perf.c | 7 +- arch/arm64/kvm/pmu-emul.c | 2 +- arch/arm64/kvm/pmu.c | 8 +- arch/arm64/kvm/reset.c | 51 +- arch/arm64/kvm/sys_regs.c | 16 + arch/arm64/kvm/va_layout.c | 7 + arch/arm64/kvm/vgic/vgic-init.c | 12 +- arch/arm64/kvm/vgic/vgic-its.c | 6 +- arch/arm64/kvm/vgic/vgic-kvm-device.c | 7 +- arch/arm64/kvm/vgic/vgic-mmio-v3.c | 81 +- arch/arm64/kvm/vgic/vgic-mmio.c | 10 +- arch/arm64/kvm/vgic/vgic-v3.c | 66 +- arch/arm64/kvm/vgic/vgic-v4.c | 38 + arch/arm64/kvm/vgic/vgic.h | 2 + arch/arm64/lib/clear_page.S | 4 +- arch/arm64/lib/copy_page.S | 4 +- arch/arm64/mm/init.c | 3 + arch/s390/kernel/perf_event.c | 21 - arch/sh/kernel/perf_event.c | 18 - drivers/clocksource/arm_arch_timer.c | 36 + drivers/firmware/psci/psci.c | 2 + drivers/firmware/smccc/Makefile | 2 +- drivers/firmware/smccc/kvm_guest.c | 50 + drivers/firmware/smccc/smccc.c | 1 + drivers/hwtracing/coresight/Kconfig | 24 +- drivers/hwtracing/coresight/Makefile | 1 + drivers/hwtracing/coresight/coresight-core.c | 29 +- drivers/hwtracing/coresight/coresight-etm-perf.c | 119 +- drivers/hwtracing/coresight/coresight-etm4x-core.c | 161 ++- .../hwtracing/coresight/coresight-etm4x-sysfs.c | 19 +- drivers/hwtracing/coresight/coresight-etm4x.h | 83 +- drivers/hwtracing/coresight/coresight-platform.c | 6 + drivers/hwtracing/coresight/coresight-priv.h | 3 + drivers/hwtracing/coresight/coresight-trbe.c | 1157 ++++++++++++++++++++ drivers/hwtracing/coresight/coresight-trbe.h | 152 +++ drivers/irqchip/irq-gic-v3-its.c | 18 +- drivers/perf/arm_pmu.c | 30 - drivers/ptp/Kconfig | 2 +- drivers/ptp/Makefile | 2 + drivers/ptp/ptp_kvm_arm.c | 28 + drivers/ptp/{ptp_kvm.c => ptp_kvm_common.c} | 85 +- drivers/ptp/ptp_kvm_x86.c | 97 ++ include/kvm/arm_pmu.h | 4 + include/kvm/arm_vgic.h | 1 + include/linux/arm-smccc.h | 41 + include/linux/bug.h | 10 + include/linux/clocksource.h | 6 + include/linux/clocksource_ids.h | 12 + include/linux/coresight.h | 13 + include/linux/perf_event.h | 2 - include/linux/ptp_kvm.h | 19 + include/linux/timekeeping.h | 12 +- include/uapi/linux/kvm.h | 1 + include/uapi/linux/perf_event.h | 13 +- kernel/events/core.c | 5 - kernel/time/clocksource.c | 2 + kernel/time/timekeeping.c | 1 + lib/bug.c | 54 +- tools/testing/selftests/kvm/.gitignore | 1 + tools/testing/selftests/kvm/Makefile | 1 + tools/testing/selftests/kvm/aarch64/vgic_init.c | 551 ++++++++++ tools/testing/selftests/kvm/include/kvm_util.h | 9 + tools/testing/selftests/kvm/lib/kvm_util.c | 75 ++ 144 files changed, 6298 insertions(+), 856 deletions(-) create mode 100644 Documentation/ABI/testing/sysfs-bus-coresight-devices-trbe create mode 100644 Documentation/devicetree/bindings/arm/ete.yaml create mode 100644 Documentation/devicetree/bindings/arm/trbe.yaml create mode 100644 Documentation/trace/coresight/coresight-trbe.rst create mode 100644 Documentation/virt/kvm/arm/ptp_kvm.rst create mode 100644 arch/arm64/kvm/hyp/include/nvhe/early_alloc.h create mode 100644 arch/arm64/kvm/hyp/include/nvhe/gfp.h create mode 100644 arch/arm64/kvm/hyp/include/nvhe/mem_protect.h create mode 100644 arch/arm64/kvm/hyp/include/nvhe/memory.h create mode 100644 arch/arm64/kvm/hyp/include/nvhe/mm.h create mode 100644 arch/arm64/kvm/hyp/include/nvhe/spinlock.h create mode 100644 arch/arm64/kvm/hyp/nvhe/cache.S create mode 100644 arch/arm64/kvm/hyp/nvhe/early_alloc.c create mode 100644 arch/arm64/kvm/hyp/nvhe/mem_protect.c create mode 100644 arch/arm64/kvm/hyp/nvhe/mm.c create mode 100644 arch/arm64/kvm/hyp/nvhe/page_alloc.c create mode 100644 arch/arm64/kvm/hyp/nvhe/setup.c create mode 100644 arch/arm64/kvm/hyp/nvhe/stub.c create mode 100644 arch/arm64/kvm/hyp/reserved_mem.c create mode 100644 drivers/firmware/smccc/kvm_guest.c create mode 100644 drivers/hwtracing/coresight/coresight-trbe.c create mode 100644 drivers/hwtracing/coresight/coresight-trbe.h create mode 100644 drivers/ptp/ptp_kvm_arm.c rename drivers/ptp/{ptp_kvm.c => ptp_kvm_common.c} (60%) create mode 100644 drivers/ptp/ptp_kvm_x86.c create mode 100644 include/linux/clocksource_ids.h create mode 100644 include/linux/ptp_kvm.h create mode 100644 tools/testing/selftests/kvm/aarch64/vgic_init.c