[GIT PULL] arm64 updates for 5.13-rc1

Catalin Marinas catalin.marinas at arm.com
Mon Apr 26 15:27:12 BST 2021


Hi Linus,

Please pull the arm64 updates below for 5.13. Apart from the usual arm64
and perf stuff, the MTE changes touch the kasan code under mm/ (acked by
the kasan maintainers). There is a minor conflicts with v5.12 due to
a fix that went in a late -rc stage. I included my resolution after the
diffstat below, though the only one not automatically resolved is in
arch/arm64/include/asm/cpucaps.h.

Thanks.

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/arm64/linux tags/arm64-upstream

for you to fetch changes up to a27a8816568964fcef62a3ae5f9d2228ec1ebc68:

  Merge branch 'for-next/pac-set-get-enabled-keys' into for-next/core (2021-04-15 14:00:48 +0100)

----------------------------------------------------------------
arm64 updates for 5.13:

- MTE asynchronous support for KASan. Previously only synchronous
  (slower) mode was supported. Asynchronous is faster but does not allow
  precise identification of the illegal access.

- Run kernel mode SIMD with softirqs disabled. This allows using NEON in
  softirq context for crypto performance improvements. The conditional
  yield support is modified to take softirqs into account and reduce the
  latency.

- Preparatory patches for Apple M1: handle CPUs that only have the VHE
  mode available (host kernel running at EL2), add FIQ support.

- arm64 perf updates: support for HiSilicon PA and SLLC PMU drivers, new
  functions for the HiSilicon HHA and L3C PMU, cleanups.

- Re-introduce support for execute-only user permissions but only when
  the EPAN (Enhanced Privileged Access Never) architecture feature is
  available.

- Disable fine-grained traps at boot and improve the documented boot
  requirements.

- Support CONFIG_KASAN_VMALLOC on arm64 (only with KASAN_GENERIC).

- Add hierarchical eXecute Never permissions for all page tables.

- Add arm64 prctl(PR_PAC_{SET,GET}_ENABLED_KEYS) allowing user programs
  to control which PAC keys are enabled in a particular task.

- arm64 kselftests for BTI and some improvements to the MTE tests.

- Minor improvements to the compat vdso and sigpage.

- Miscellaneous cleanups.

----------------------------------------------------------------
Andre Przywara (11):
      kselftest/arm64: mte: Fix compilation with native compiler
      kselftest/arm64: mte: Fix pthread linking
      kselftest/arm64: mte: ksm_options: Fix fscanf warning
      kselftest/arm64: mte: user_mem: Fix write() warning
      kselftest/arm64: mte: common: Fix write() warnings
      kselftest/arm64: mte: Fix MTE feature detection
      kselftest/arm64: mte: Use cross-compiler if specified
      kselftest/arm64: mte: Output warning about failing compiler
      kselftest/arm64: mte: Makefile: Fix clang compilation
      kselftest/arm64: mte: Fix clang warning
      kselftest/arm64: mte: Report filename on failing temp file creation

Andrey Konovalov (1):
      kasan, arm64: tests supports for HW_TAGS async mode

Ard Biesheuvel (6):
      arm64: mm: add missing P4D definitions and use them consistently
      arm64: mm: use XN table mapping attributes for the linear region
      arm64: mm: use XN table mapping attributes for user/kernel mappings
      arm64: assembler: remove conditional NEON yield macros
      arm64: assembler: introduce wxN aliases for wN registers
      arm64: fpsimd: run kernel mode NEON with softirqs disabled

Catalin Marinas (3):
      Merge branches 'for-next/misc', 'for-next/kselftest', 'for-next/xntable', 'for-next/vdso', 'for-next/fiq', 'for-next/epan', 'for-next/kasan-vmalloc', 'for-next/fgt-boot-init', 'for-next/vhe-only' and 'for-next/neon-softirqs-disabled', remote-tracking branch 'arm64/for-next/perf' into for-next/core
      Merge branch 'for-next/mte-async-kernel-mode' into for-next/core
      Merge branch 'for-next/pac-set-get-enabled-keys' into for-next/core

Chen Lifu (1):
      arm64: smp: Add missing prototype for some smp.c functions

He Ying (1):
      docs: arm64: Fix a grammar error

Hector Martin (1):
      arm64: Always keep DAIF.[IF] in sync

Jisheng Zhang (1):
      arm64: Add __init section marker to some functions

Lecopzer Chen (5):
      arm64: kasan: don't populate vmalloc area for CONFIG_KASAN_VMALLOC
      arm64: kasan: abstract _text and _end to KERNEL_START/END
      arm64: Kconfig: support CONFIG_KASAN_VMALLOC
      arm64: kaslr: support randomized module area with KASAN_VMALLOC
      arm64: Kconfig: select KASAN_VMALLOC if KANSAN_GENERIC is enabled

Linus Walleij (1):
      arm64: barrier: Remove spec_bar() macro

Marc Zyngier (6):
      genirq: Allow architectures to override set_handle_irq() fallback
      arm64: don't use GENERIC_IRQ_MULTI_HANDLER
      arm64: entry: factor irq triage logic into macros
      arm64: cpufeature: Allow early filtering of feature override
      arm64: Cope with CPUs stuck in VHE mode
      arm64: Get rid of CONFIG_ARM64_VHE

Mark Brown (9):
      arm64: defconfig: Use DEBUG_INFO_REDUCED
      kselftest: arm64: Add BTI tests
      arm64: stacktrace: Move start_backtrace() out of the header
      arm64/sve: Rework SVE access trap to convert state in registers
      arm64: Document requirements for fine grained traps at boot
      arm64: Disable fine grained traps on boot
      arm64: Require that system registers at all visible ELs be initialized
      arm64/sve: Remove redundant system_supports_sve() tests
      arm64/sve: Add compile time checks for SVE hooks in generic functions

Mark Rutland (5):
      arm64: irq: rework root IRQ handler registration
      arm64: irq: allow FIQs to be handled
      arm64: entry: remove test_irqs_unmasked macro
      arm64: setup: name `mair` register
      arm64: setup: name `tcr` register

Peter Collingbourne (3):
      arm64: mte: make the per-task SCTLR_EL1 field usable elsewhere
      arm64: Introduce prctl(PR_PAC_{SET,GET}_ENABLED_KEYS)
      arm64: pac: Optimize kernel entry/exit key installation code paths

Qi Liu (5):
      drivers/perf: convert sysfs scnprintf family to sysfs_emit_at() and sysfs_emit()
      drivers/perf: convert sysfs sprintf family to sysfs_emit
      drivers/perf: Simplify the SMMUv3 PMU event attributes
      docs: perf: Address some html build warnings
      arm64: perf: Remove redundant initialization in perf_event.c

Robin Murphy (3):
      perf/arm_pmu_platform: Use dev_err_probe() for IRQ errors
      perf/arm_pmu_platform: Fix error handling
      perf/arm_pmu_platform: Clean up with dev_printk

Shaokun Zhang (9):
      drivers/perf: hisi: Remove unnecessary check of counter index
      drivers/perf: hisi: Refactor code for more uncore PMUs
      drivers/perf: hisi: Add PMU version for uncore PMU drivers.
      drivers/perf: hisi: Add new functions for L3C PMU
      drivers/perf: hisi: Add new functions for HHA PMU
      drivers/perf: hisi: Update DDRC PMU for programmable counter
      drivers/perf: hisi: Add support for HiSilicon SLLC PMU driver
      drivers/perf: hisi: Add support for HiSilicon PA PMU driver
      docs: perf: Add new description on HiSilicon uncore PMU v2

Vincenzo Frascino (9):
      arm64: mte: Remove unused mte_assign_mem_tag_range()
      arm64: mte: Add asynchronous mode support
      kasan: Add KASAN mode kernel parameter
      arm64: mte: Drop arch_enable_tagging()
      kasan: Add report for async mode
      arm64: mte: Enable TCO in functions that can read beyond buffer limits
      arm64: mte: Conditionally compile mte_enable_kernel_*()
      arm64: mte: Enable async tag check fault
      arm64: mte: Report async tag faults before suspend

Vladimir Murzin (1):
      arm64: Support execute-only permissions with Enhanced PAN

Will Deacon (5):
      arm64: vdso: Use GFP_KERNEL for allocating compat vdso and signal pages
      arm64: vdso: Remove redundant calls to flush_dcache_page()
      arm64: compat: Allow signal page to be remapped
      arm64: vdso: Avoid ISB after reading from cntvct_el0
      arm64: compat: Poison the compat sigpage

Yury Norov (1):
      ARM64: enable GENERIC_FIND_FIRST_BIT

Zihao Tang (1):
      drivers/perf: convert sysfs snprintf family to sysfs_emit

zhouchuangao (1):
      arm64/kernel/probes: Use BUG_ON instead of if condition followed by BUG.

 Documentation/admin-guide/kernel-parameters.txt    |   3 +-
 Documentation/admin-guide/perf/hisi-pmu.rst        |  54 +++
 Documentation/arm64/booting.rst                    |  13 +-
 Documentation/arm64/pointer-authentication.rst     |  34 ++
 Documentation/arm64/tagged-address-abi.rst         |   2 +-
 Documentation/dev-tools/kasan.rst                  |   9 +
 arch/arm64/Kconfig                                 |  41 +-
 arch/arm64/configs/defconfig                       |   1 +
 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/arch_gicv3.h                |   2 +-
 arch/arm64/include/asm/arch_timer.h                |  21 -
 arch/arm64/include/asm/asm_pointer_auth.h          |  20 +-
 arch/arm64/include/asm/assembler.h                 | 114 ++---
 arch/arm64/include/asm/barrier.h                   |  23 +-
 arch/arm64/include/asm/cpucaps.h                   |   3 +-
 arch/arm64/include/asm/cpufeature.h                |  17 +
 arch/arm64/include/asm/daifflags.h                 |  10 +-
 arch/arm64/include/asm/el2_setup.h                 |  21 +
 arch/arm64/include/asm/fpsimd.h                    |   1 +
 arch/arm64/include/asm/irq.h                       |   4 +
 arch/arm64/include/asm/irq_work.h                  |   2 +
 arch/arm64/include/asm/irqflags.h                  |  16 +-
 arch/arm64/include/asm/memory.h                    |   4 +-
 arch/arm64/include/asm/mte-kasan.h                 |   9 +-
 arch/arm64/include/asm/mte.h                       |  54 ++-
 arch/arm64/include/asm/pgalloc.h                   |  19 +-
 arch/arm64/include/asm/pgtable-hwdef.h             |  15 +
 arch/arm64/include/asm/pgtable-prot.h              |   5 +-
 arch/arm64/include/asm/pgtable.h                   |  31 +-
 arch/arm64/include/asm/pointer_auth.h              |  61 ++-
 arch/arm64/include/asm/processor.h                 |  13 +-
 arch/arm64/include/asm/ptdump.h                    |   2 +-
 arch/arm64/include/asm/smp.h                       |   1 +
 arch/arm64/include/asm/stacktrace.h                |  24 +-
 arch/arm64/include/asm/sysreg.h                    |  13 +-
 arch/arm64/include/asm/uaccess.h                   |  22 +
 arch/arm64/include/asm/vdso/gettimeofday.h         |   6 +-
 arch/arm64/include/asm/word-at-a-time.h            |   4 +
 arch/arm64/kernel/asm-offsets.c                    |   7 +-
 arch/arm64/kernel/cpufeature.c                     |  22 +-
 arch/arm64/kernel/entry-common.c                   |   6 +
 arch/arm64/kernel/entry-fpsimd.S                   |   5 +
 arch/arm64/kernel/entry.S                          | 174 ++++---
 arch/arm64/kernel/fpsimd.c                         |  39 +-
 arch/arm64/kernel/head.S                           |  39 +-
 arch/arm64/kernel/hyp-stub.S                       |  10 +-
 arch/arm64/kernel/idreg-override.c                 |  26 +-
 arch/arm64/kernel/irq.c                            |  35 +-
 arch/arm64/kernel/kaslr.c                          |  18 +-
 arch/arm64/kernel/module.c                         |  16 +-
 arch/arm64/kernel/mte.c                            | 121 +++--
 arch/arm64/kernel/perf_event.c                     |   5 +-
 arch/arm64/kernel/pointer_auth.c                   |  63 +++
 arch/arm64/kernel/probes/kprobes.c                 |   3 +-
 arch/arm64/kernel/process.c                        |  35 +-
 arch/arm64/kernel/ptrace.c                         |  41 ++
 arch/arm64/kernel/smp.c                            |   1 +
 arch/arm64/kernel/stacktrace.c                     |  24 +
 arch/arm64/kernel/suspend.c                        |   6 +-
 arch/arm64/kernel/vdso.c                           |  26 +-
 arch/arm64/mm/fault.c                              |  18 +-
 arch/arm64/mm/kasan_init.c                         |  29 +-
 arch/arm64/mm/mmu.c                                |  41 +-
 arch/arm64/mm/proc.S                               |  48 +-
 arch/arm64/mm/ptdump.c                             |   4 +-
 arch/arm64/mm/ptdump_debugfs.c                     |   2 +-
 drivers/perf/arm-cci.c                             |  12 +-
 drivers/perf/arm-ccn.c                             |  31 +-
 drivers/perf/arm-cmn.c                             |  22 +-
 drivers/perf/arm_dmc620_pmu.c                      |   2 +-
 drivers/perf/arm_dsu_pmu.c                         |   5 +-
 drivers/perf/arm_pmu_platform.c                    |  54 +--
 drivers/perf/arm_smmuv3_pmu.c                      |  36 +-
 drivers/perf/arm_spe_pmu.c                         |   3 +-
 drivers/perf/fsl_imx8_ddr_perf.c                   |   7 +-
 drivers/perf/hisilicon/Makefile                    |   3 +-
 drivers/perf/hisilicon/hisi_uncore_ddrc_pmu.c      | 348 +++++++++-----
 drivers/perf/hisilicon/hisi_uncore_hha_pmu.c       | 301 ++++++++----
 drivers/perf/hisilicon/hisi_uncore_l3c_pmu.c       | 355 ++++++++++----
 drivers/perf/hisilicon/hisi_uncore_pa_pmu.c        | 500 +++++++++++++++++++
 drivers/perf/hisilicon/hisi_uncore_pmu.c           |  79 ++-
 drivers/perf/hisilicon/hisi_uncore_pmu.h           |  20 +-
 drivers/perf/hisilicon/hisi_uncore_sllc_pmu.c      | 530 +++++++++++++++++++++
 drivers/perf/qcom_l2_pmu.c                         |   2 +-
 drivers/perf/qcom_l3_pmu.c                         |   4 +-
 drivers/perf/thunderx2_pmu.c                       |   4 +-
 drivers/perf/xgene_pmu.c                           |   4 +-
 include/linux/cpuhotplug.h                         |   2 +
 include/linux/irq.h                                |   2 +
 include/linux/kasan.h                              |   6 +
 include/uapi/linux/elf.h                           |   1 +
 include/uapi/linux/prctl.h                         |   4 +
 kernel/sys.c                                       |  16 +
 lib/test_kasan.c                                   |  19 +-
 mm/kasan/hw_tags.c                                 |  66 ++-
 mm/kasan/kasan.h                                   |  40 +-
 mm/kasan/report.c                                  |  22 +-
 mm/mmap.c                                          |   6 +
 tools/testing/selftests/arm64/Makefile             |   2 +-
 tools/testing/selftests/arm64/bti/.gitignore       |   2 +
 tools/testing/selftests/arm64/bti/Makefile         |  61 +++
 tools/testing/selftests/arm64/bti/assembler.h      |  80 ++++
 tools/testing/selftests/arm64/bti/btitest.h        |  23 +
 tools/testing/selftests/arm64/bti/compiler.h       |  21 +
 tools/testing/selftests/arm64/bti/gen/.gitignore   |   2 +
 tools/testing/selftests/arm64/bti/signal.c         |  37 ++
 tools/testing/selftests/arm64/bti/signal.h         |  21 +
 tools/testing/selftests/arm64/bti/start.S          |  14 +
 tools/testing/selftests/arm64/bti/syscall.S        |  23 +
 tools/testing/selftests/arm64/bti/system.c         |  22 +
 tools/testing/selftests/arm64/bti/system.h         |  28 ++
 tools/testing/selftests/arm64/bti/test.c           | 234 +++++++++
 tools/testing/selftests/arm64/bti/teststubs.S      |  39 ++
 tools/testing/selftests/arm64/bti/trampoline.S     |  29 ++
 tools/testing/selftests/arm64/mte/Makefile         |  15 +-
 .../selftests/arm64/mte/check_ksm_options.c        |   5 +-
 tools/testing/selftests/arm64/mte/check_user_mem.c |   3 +-
 .../testing/selftests/arm64/mte/mte_common_util.c  |  39 +-
 122 files changed, 3862 insertions(+), 914 deletions(-)
 create mode 100644 drivers/perf/hisilicon/hisi_uncore_pa_pmu.c
 create mode 100644 drivers/perf/hisilicon/hisi_uncore_sllc_pmu.c
 create mode 100644 tools/testing/selftests/arm64/bti/.gitignore
 create mode 100644 tools/testing/selftests/arm64/bti/Makefile
 create mode 100644 tools/testing/selftests/arm64/bti/assembler.h
 create mode 100644 tools/testing/selftests/arm64/bti/btitest.h
 create mode 100644 tools/testing/selftests/arm64/bti/compiler.h
 create mode 100644 tools/testing/selftests/arm64/bti/gen/.gitignore
 create mode 100644 tools/testing/selftests/arm64/bti/signal.c
 create mode 100644 tools/testing/selftests/arm64/bti/signal.h
 create mode 100644 tools/testing/selftests/arm64/bti/start.S
 create mode 100644 tools/testing/selftests/arm64/bti/syscall.S
 create mode 100644 tools/testing/selftests/arm64/bti/system.c
 create mode 100644 tools/testing/selftests/arm64/bti/system.h
 create mode 100644 tools/testing/selftests/arm64/bti/test.c
 create mode 100644 tools/testing/selftests/arm64/bti/teststubs.S
 create mode 100644 tools/testing/selftests/arm64/bti/trampoline.S

---
diff --cc arch/arm64/include/asm/cpucaps.h
index c40f2490cd7b,9e3ec4dd56d8..b0c5eda0498f
--- a/arch/arm64/include/asm/cpucaps.h
+++ b/arch/arm64/include/asm/cpucaps.h
@@@ -66,8 -66,8 +66,9 @@@
  #define ARM64_WORKAROUND_1508412		58
  #define ARM64_HAS_LDAPR				59
  #define ARM64_KVM_PROTECTED_MODE		60
 -#define ARM64_HAS_EPAN				61
 +#define ARM64_WORKAROUND_NVIDIA_CARMEL_CNP	61
++#define ARM64_HAS_EPAN				62
  
--#define ARM64_NCAPS				62
++#define ARM64_NCAPS				63
  
  #endif /* __ASM_CPUCAPS_H */
diff --cc arch/arm64/include/asm/word-at-a-time.h
index ea487218db79,c62d9fa791aa..2dcb104c645b
--- a/arch/arm64/include/asm/word-at-a-time.h
+++ b/arch/arm64/include/asm/word-at-a-time.h
@@@ -53,8 -53,10 +53,10 @@@ static inline unsigned long find_zero(u
   */
  static inline unsigned long load_unaligned_zeropad(const void *addr)
  {
 -	unsigned long ret, offset;
 +	unsigned long ret, tmp;
  
+ 	__uaccess_enable_tco_async();
+ 
  	/* Load word from unaligned pointer addr */
  	asm(
  	"1:	ldr	%0, %3\n"
@@@ -73,9 -75,11 +75,11 @@@
  	"	b	2b\n"
  	"	.popsection\n"
  	_ASM_EXTABLE(1b, 3b)
 -	: "=&r" (ret), "=&r" (offset)
 +	: "=&r" (ret), "=&r" (tmp)
  	: "r" (addr), "Q" (*(unsigned long *)addr));
  
+ 	__uaccess_disable_tco_async();
+ 
  	return ret;
  }
  
diff --cc arch/arm64/kernel/entry.S
index 6acfc5e6b5e0,2df32a516ffe..4ac5455c0ead
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@@ -246,10 -244,32 +246,32 @@@ alternative_else_nop_endi
  	disable_step_tsk x19, x20
  
  	/* Check for asynchronous tag check faults in user space */
 -	check_mte_async_tcf x19, x22
 +	check_mte_async_tcf x22, x23
  	apply_ssbd 1, x22, x23
  
- 	ptrauth_keys_install_kernel tsk, x20, x22, x23
+ #ifdef CONFIG_ARM64_PTR_AUTH
+ alternative_if ARM64_HAS_ADDRESS_AUTH
+ 	/*
+ 	 * Enable IA for in-kernel PAC if the task had it disabled. Although
+ 	 * this could be implemented with an unconditional MRS which would avoid
+ 	 * a load, this was measured to be slower on Cortex-A75 and Cortex-A76.
+ 	 *
+ 	 * Install the kernel IA key only if IA was enabled in the task. If IA
+ 	 * was disabled on kernel exit then we would have left the kernel IA
+ 	 * installed so there is no need to install it again.
+ 	 */
+ 	ldr	x0, [tsk, THREAD_SCTLR_USER]
+ 	tbz	x0, SCTLR_ELx_ENIA_SHIFT, 1f
+ 	__ptrauth_keys_install_kernel_nosync tsk, x20, x22, x23
+ 	b	2f
+ 1:
+ 	mrs	x0, sctlr_el1
+ 	orr	x0, x0, SCTLR_ELx_ENIA
+ 	msr	sctlr_el1, x0
+ 2:
+ 	isb
+ alternative_else_nop_endif
+ #endif
  
  	mte_set_kernel_gcr x22, x23
  
diff --cc arch/arm64/kernel/probes/kprobes.c
index 85645b2b0c7a,ecf0f613327f..d607c9912025
--- a/arch/arm64/kernel/probes/kprobes.c
+++ b/arch/arm64/kernel/probes/kprobes.c
@@@ -264,15 -264,12 +264,14 @@@ int __kprobes kprobe_fault_handler(stru
  		 * normal page fault.
  		 */
  		instruction_pointer_set(regs, (unsigned long) cur->addr);
- 		if (!instruction_pointer(regs))
- 			BUG();
+ 		BUG_ON(!instruction_pointer(regs));
  
 -		if (kcb->kprobe_status == KPROBE_REENTER)
 +		if (kcb->kprobe_status == KPROBE_REENTER) {
  			restore_previous_kprobe(kcb);
 -		else
 +		} else {
 +			kprobes_restore_local_irqflag(kcb, regs);
  			reset_current_kprobe();
 +		}
  
  		break;
  	case KPROBE_HIT_ACTIVE:




More information about the linux-arm-kernel mailing list