Merge tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 28 May 2025 21:55:35 +0000 (14:55 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 28 May 2025 21:55:35 +0000 (14:55 -0700)
Pull arm64 updates from Will Deacon:
 "The headline feature is the re-enablement of support for Arm's
  Scalable Matrix Extension (SME) thanks to a bumper crop of fixes
  from Mark Rutland.

  If matrices aren't your thing, then Ryan's page-table optimisation
  work is much more interesting.

  Summary:

  ACPI, EFI and PSCI:

   - Decouple Arm's "Software Delegated Exception Interface" (SDEI)
     support from the ACPI GHES code so that it can be used by platforms
     booted with device-tree

   - Remove unnecessary per-CPU tracking of the FPSIMD state across EFI
     runtime calls

   - Fix a node refcount imbalance in the PSCI device-tree code

  CPU Features:

   - Ensure register sanitisation is applied to fields in ID_AA64MMFR4

   - Expose AIDR_EL1 to userspace via sysfs, primarily so that KVM
     guests can reliably query the underlying CPU types from the VMM

   - Re-enabling of SME support (CONFIG_ARM64_SME) as a result of fixes
     to our context-switching, signal handling and ptrace code

  Entry code:

   - Hook up TIF_NEED_RESCHED_LAZY so that CONFIG_PREEMPT_LAZY can be
     selected

  Memory management:

   - Prevent BSS exports from being used by the early PI code

   - Propagate level and stride information to the low-level TLB
     invalidation routines when operating on hugetlb entries

   - Use the page-table contiguous hint for vmap() mappings with
     VM_ALLOW_HUGE_VMAP where possible

   - Optimise vmalloc()/vmap() page-table updates to use "lazy MMU mode"
     and hook this up on arm64 so that the trailing DSB (used to publish
     the updates to the hardware walker) can be deferred until the end
     of the mapping operation

   - Extend mmap() randomisation for 52-bit virtual addresses (on par
     with 48-bit addressing) and remove limited support for
     randomisation of the linear map

  Perf and PMUs:

   - Add support for probing the CMN-S3 driver using ACPI

   - Minor driver fixes to the CMN, Arm-NI and amlogic PMU drivers

  Selftests:

   - Fix FPSIMD and SME tests to align with the freshly re-enabled SME
     support

   - Fix default setting of the OUTPUT variable so that tests are
     installed in the right location

  vDSO:

   - Replace raw counter access from inline assembly code with a call to
     the the __arch_counter_get_cntvct() helper function

  Miscellaneous:

   - Add some missing header inclusions to the CCA headers

   - Rework rendering of /proc/cpuinfo to follow the x86-approach and
     avoid repeated buffer expansion (the user-visible format remains
     identical)

   - Remove redundant selection of CONFIG_CRC32

   - Extend early error message when failing to map the device-tree
     blob"

* tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: (83 commits)
  arm64: cputype: Add cputype definition for HIP12
  arm64: el2_setup.h: Make __init_el2_fgt labels consistent, again
  perf/arm-cmn: Add CMN S3 ACPI binding
  arm64/boot: Disallow BSS exports to startup code
  arm64/boot: Move global CPU override variables out of BSS
  arm64/boot: Move init_pgdir[] and init_idmap_pgdir[] into __pi_ namespace
  perf/arm-cmn: Initialise cmn->cpu earlier
  kselftest/arm64: Set default OUTPUT path when undefined
  arm64: Update comment regarding values in __boot_cpu_mode
  arm64: mm: Drop redundant check in pmd_trans_huge()
  arm64/mm: Re-organise setting up FEAT_S1PIE registers PIRE0_EL1 and PIR_EL1
  arm64/mm: Permit lazy_mmu_mode to be nested
  arm64/mm: Disable barrier batching in interrupt contexts
  arm64/cpuinfo: only show one cpu's info in c_show()
  arm64/mm: Batch barriers when updating kernel mappings
  mm/vmalloc: Enter lazy mmu mode while manipulating vmalloc ptes
  arm64/mm: Support huge pte-mapped pages in vmap
  mm/vmalloc: Gracefully unmap huge ptes
  mm/vmalloc: Warn on improper use of vunmap_range()
  arm64/mm: Hoist barriers out of set_ptes_anysz() loop
  ...

1  2 
Documentation/ABI/testing/sysfs-devices-system-cpu
arch/arm64/include/asm/cputype.h
arch/arm64/include/asm/el2_setup.h
arch/arm64/include/asm/esr.h
arch/arm64/include/asm/vdso/gettimeofday.h
arch/arm64/kernel/image-vars.h
include/linux/vmalloc.h
mm/vmalloc.c

Simple merge
Simple merge
Simple merge
@@@ -79,39 -78,9 +78,22 @@@ static __always_inline u64 __arch_get_h
        if (clock_mode == VDSO_CLOCKMODE_NONE)
                return 0;
  
-       /*
-        * If FEAT_ECV is available, use the self-synchronizing counter.
-        * Otherwise the isb is required to prevent that the counter value
-        * is speculated.
-       */
-       asm volatile(
-       ALTERNATIVE("isb\n"
-                   "mrs %0, cntvct_el0",
-                   "nop\n"
-                   __mrs_s("%0", SYS_CNTVCTSS_EL0),
-                   ARM64_HAS_ECV)
-       : "=r" (res)
-       :
-       : "memory");
-       arch_counter_enforce_ordering(res);
-       return res;
+       return __arch_counter_get_cntvct();
  }
  
 +#if IS_ENABLED(CONFIG_CC_IS_GCC) && IS_ENABLED(CONFIG_PAGE_SIZE_64KB)
 +static __always_inline const struct vdso_time_data *__arch_get_vdso_u_time_data(void)
 +{
 +      const struct vdso_time_data *ret = &vdso_u_time_data;
 +
 +      /* Work around invalid absolute relocations */
 +      OPTIMIZER_HIDE_VAR(ret);
 +
 +      return ret;
 +}
 +#define __arch_get_vdso_u_time_data __arch_get_vdso_u_time_data
 +#endif /* IS_ENABLED(CONFIG_CC_IS_GCC) && IS_ENABLED(CONFIG_PAGE_SIZE_64KB) */
 +
  #endif /* !__ASSEMBLY__ */
  
  #endif /* __ASM_VDSO_GETTIMEOFDAY_H */
@@@ -36,37 -42,34 +42,30 @@@ PROVIDE(__pi___memcpy                      = __pi_memcpy)
  PROVIDE(__pi___memmove                        = __pi_memmove);
  PROVIDE(__pi___memset                 = __pi_memset);
  
- PROVIDE(__pi_id_aa64isar1_override    = id_aa64isar1_override);
- PROVIDE(__pi_id_aa64isar2_override    = id_aa64isar2_override);
- PROVIDE(__pi_id_aa64mmfr0_override    = id_aa64mmfr0_override);
- PROVIDE(__pi_id_aa64mmfr1_override    = id_aa64mmfr1_override);
- PROVIDE(__pi_id_aa64mmfr2_override    = id_aa64mmfr2_override);
- PROVIDE(__pi_id_aa64pfr0_override     = id_aa64pfr0_override);
- PROVIDE(__pi_id_aa64pfr1_override     = id_aa64pfr1_override);
- PROVIDE(__pi_id_aa64smfr0_override    = id_aa64smfr0_override);
- PROVIDE(__pi_id_aa64zfr0_override     = id_aa64zfr0_override);
- PROVIDE(__pi_arm64_sw_feature_override        = arm64_sw_feature_override);
- PROVIDE(__pi_arm64_use_ng_mappings    = arm64_use_ng_mappings);
- PROVIDE(__pi__ctype                   = _ctype);
- PROVIDE(__pi_memstart_offset_seed     = memstart_offset_seed);
+ PI_EXPORT_SYM(id_aa64isar1_override);
+ PI_EXPORT_SYM(id_aa64isar2_override);
+ PI_EXPORT_SYM(id_aa64mmfr0_override);
+ PI_EXPORT_SYM(id_aa64mmfr1_override);
+ PI_EXPORT_SYM(id_aa64mmfr2_override);
+ PI_EXPORT_SYM(id_aa64pfr0_override);
+ PI_EXPORT_SYM(id_aa64pfr1_override);
+ PI_EXPORT_SYM(id_aa64smfr0_override);
+ PI_EXPORT_SYM(id_aa64zfr0_override);
+ PI_EXPORT_SYM(arm64_sw_feature_override);
+ PI_EXPORT_SYM(arm64_use_ng_mappings);
 -#ifdef CONFIG_CAVIUM_ERRATUM_27456
 -PI_EXPORT_SYM(cavium_erratum_27456_cpus);
 -PI_EXPORT_SYM(is_midr_in_range_list);
 -#endif
+ PI_EXPORT_SYM(_ctype);
  
- PROVIDE(__pi_init_idmap_pg_dir                = init_idmap_pg_dir);
- PROVIDE(__pi_init_idmap_pg_end                = init_idmap_pg_end);
- PROVIDE(__pi_init_pg_dir              = init_pg_dir);
- PROVIDE(__pi_init_pg_end              = init_pg_end);
- PROVIDE(__pi_swapper_pg_dir           = swapper_pg_dir);
+ PI_EXPORT_SYM(swapper_pg_dir);
  
- PROVIDE(__pi__text                    = _text);
- PROVIDE(__pi__stext                   = _stext);
- PROVIDE(__pi__etext                   = _etext);
- PROVIDE(__pi___start_rodata           = __start_rodata);
- PROVIDE(__pi___inittext_begin         = __inittext_begin);
- PROVIDE(__pi___inittext_end           = __inittext_end);
- PROVIDE(__pi___initdata_begin         = __initdata_begin);
- PROVIDE(__pi___initdata_end           = __initdata_end);
- PROVIDE(__pi__data                    = _data);
- PROVIDE(__pi___bss_start              = __bss_start);
- PROVIDE(__pi__end                     = _end);
+ PI_EXPORT_SYM(_text);
+ PI_EXPORT_SYM(_stext);
+ PI_EXPORT_SYM(_etext);
+ PI_EXPORT_SYM(__start_rodata);
+ PI_EXPORT_SYM(__inittext_begin);
+ PI_EXPORT_SYM(__inittext_end);
+ PI_EXPORT_SYM(__initdata_begin);
+ PI_EXPORT_SYM(__initdata_end);
+ PI_EXPORT_SYM(_data);
  
  #ifdef CONFIG_KVM
  
Simple merge
diff --cc mm/vmalloc.c
Simple merge