]> Git Repo - linux.git/commitdiff
Merge branches 'for-next/gcs', 'for-next/probes', 'for-next/asm-offsets', 'for-next...
authorCatalin Marinas <[email protected]>
Thu, 14 Nov 2024 12:07:16 +0000 (12:07 +0000)
committerCatalin Marinas <[email protected]>
Thu, 14 Nov 2024 12:07:16 +0000 (12:07 +0000)
* arm64/for-next/perf:
  perf: Switch back to struct platform_driver::remove()
  perf: arm_pmuv3: Add support for Samsung Mongoose PMU
  dt-bindings: arm: pmu: Add Samsung Mongoose core compatible
  perf/dwc_pcie: Fix typos in event names
  perf/dwc_pcie: Add support for Ampere SoCs
  ARM: pmuv3: Add missing write_pmuacr()
  perf/marvell: Marvell PEM performance monitor support
  perf/arm_pmuv3: Add PMUv3.9 per counter EL0 access control
  perf/dwc_pcie: Convert the events with mixed case to lowercase
  perf/cxlpmu: Support missing events in 3.1 spec
  perf: imx_perf: add support for i.MX91 platform
  dt-bindings: perf: fsl-imx-ddr: Add i.MX91 compatible
  drivers perf: remove unused field pmu_node

* for-next/gcs: (42 commits)
  : arm64 Guarded Control Stack user-space support
  kselftest/arm64: Fix missing printf() argument in gcs/gcs-stress.c
  arm64/gcs: Fix outdated ptrace documentation
  kselftest/arm64: Ensure stable names for GCS stress test results
  kselftest/arm64: Validate that GCS push and write permissions work
  kselftest/arm64: Enable GCS for the FP stress tests
  kselftest/arm64: Add a GCS stress test
  kselftest/arm64: Add GCS signal tests
  kselftest/arm64: Add test coverage for GCS mode locking
  kselftest/arm64: Add a GCS test program built with the system libc
  kselftest/arm64: Add very basic GCS test program
  kselftest/arm64: Always run signals tests with GCS enabled
  kselftest/arm64: Allow signals tests to specify an expected si_code
  kselftest/arm64: Add framework support for GCS to signal handling tests
  kselftest/arm64: Add GCS as a detected feature in the signal tests
  kselftest/arm64: Verify the GCS hwcap
  arm64: Add Kconfig for Guarded Control Stack (GCS)
  arm64/ptrace: Expose GCS via ptrace and core files
  arm64/signal: Expose GCS state in signal frames
  arm64/signal: Set up and restore the GCS context for signal handlers
  arm64/mm: Implement map_shadow_stack()
  ...

* for-next/probes:
  : Various arm64 uprobes/kprobes cleanups
  arm64: insn: Simulate nop instruction for better uprobe performance
  arm64: probes: Remove probe_opcode_t
  arm64: probes: Cleanup kprobes endianness conversions
  arm64: probes: Move kprobes-specific fields
  arm64: probes: Fix uprobes for big-endian kernels
  arm64: probes: Fix simulate_ldr*_literal()
  arm64: probes: Remove broken LDR (literal) uprobe support

* for-next/asm-offsets:
  : arm64 asm-offsets.c cleanup (remove unused offsets)
  arm64: asm-offsets: remove PREEMPT_DISABLE_OFFSET
  arm64: asm-offsets: remove DMA_{TO,FROM}_DEVICE
  arm64: asm-offsets: remove VM_EXEC and PAGE_SZ
  arm64: asm-offsets: remove MM_CONTEXT_ID
  arm64: asm-offsets: remove COMPAT_{RT_,SIGFRAME_REGS_OFFSET
  arm64: asm-offsets: remove VMA_VM_*
  arm64: asm-offsets: remove TSK_ACTIVE_MM

* for-next/tlb:
  : TLB flushing optimisations
  arm64: optimize flush tlb kernel range
  arm64: tlbflush: add __flush_tlb_range_limit_excess()

* for-next/misc:
  : Miscellaneous patches
  arm64: tls: Fix context-switching of tpidrro_el0 when kpti is enabled
  arm64/ptrace: Clarify documentation of VL configuration via ptrace
  acpi/arm64: remove unnecessary cast
  arm64/mm: Change protval as 'pteval_t' in map_range()
  arm64: uprobes: Optimize cache flushes for xol slot
  acpi/arm64: Adjust error handling procedure in gtdt_parse_timer_block()
  arm64: fix .data.rel.ro size assertion when CONFIG_LTO_CLANG
  arm64/ptdump: Test both PTE_TABLE_BIT and PTE_VALID for block mappings
  arm64/mm: Sanity check PTE address before runtime P4D/PUD folding
  arm64/mm: Drop setting PTE_TYPE_PAGE in pte_mkcont()
  ACPI: GTDT: Tighten the check for the array of platform timer structures
  arm64/fpsimd: Fix a typo
  arm64: Expose ID_AA64ISAR1_EL1.XS to sanitised feature consumers
  arm64: Return early when break handler is found on linked-list
  arm64/mm: Re-organize arch_make_huge_pte()
  arm64/mm: Drop _PROT_SECT_DEFAULT
  arm64: Add command-line override for ID_AA64MMFR0_EL1.ECV
  arm64: head: Drop SWAPPER_TABLE_SHIFT
  arm64: cpufeature: add POE to cpucap_is_possible()
  arm64/mm: Change pgattr_change_is_safe() arguments as pteval_t

* for-next/mte:
  : Various MTE improvements
  selftests: arm64: add hugetlb mte tests
  hugetlb: arm64: add mte support

* for-next/sysreg:
  : arm64 sysreg updates
  arm64/sysreg: Update ID_AA64MMFR1_EL1 to DDI0601 2024-09

* for-next/stacktrace:
  : arm64 stacktrace improvements
  arm64: preserve pt_regs::stackframe during exec*()
  arm64: stacktrace: unwind exception boundaries
  arm64: stacktrace: split unwind_consume_stack()
  arm64: stacktrace: report recovered PCs
  arm64: stacktrace: report source of unwind data
  arm64: stacktrace: move dump_backtrace() to kunwind_stack_walk()
  arm64: use a common struct frame_record
  arm64: pt_regs: swap 'unused' and 'pmr' fields
  arm64: pt_regs: rename "pmr_save" -> "pmr"
  arm64: pt_regs: remove stale big-endian layout
  arm64: pt_regs: assert pt_regs is a multiple of 16 bytes

* for-next/hwcap3:
  : Add AT_HWCAP3 support for arm64 (also wire up AT_HWCAP4)
  arm64: Support AT_HWCAP3
  binfmt_elf: Wire up AT_HWCAP3 at AT_HWCAP4

* for-next/kselftest: (30 commits)
  : arm64 kselftest fixes/cleanups
  kselftest/arm64: Try harder to generate different keys during PAC tests
  kselftest/arm64: Don't leak pipe fds in pac.exec_sign_all()
  kselftest/arm64: Corrupt P0 in the irritator when testing SSVE
  kselftest/arm64: Add FPMR coverage to fp-ptrace
  kselftest/arm64: Expand the set of ZA writes fp-ptrace does
  kselftets/arm64: Use flag bits for features in fp-ptrace assembler code
  kselftest/arm64: Enable build of PAC tests with LLVM=1
  kselftest/arm64: Check that SVCR is 0 in signal handlers
  kselftest/arm64: Fix printf() compiler warnings in the arm64 syscall-abi.c tests
  kselftest/arm64: Fix printf() warning in the arm64 MTE prctl() test
  kselftest/arm64: Fix printf() compiler warnings in the arm64 fp tests
  kselftest/arm64: Fix build with stricter assemblers
  kselftest/arm64: Test signal handler state modification in fp-stress
  kselftest/arm64: Provide a SIGUSR1 handler in the kernel mode FP stress test
  kselftest/arm64: Implement irritators for ZA and ZT
  kselftest/arm64: Remove unused ADRs from irritator handlers
  kselftest/arm64: Correct misleading comments on fp-stress irritators
  kselftest/arm64: Poll less often while waiting for fp-stress children
  kselftest/arm64: Increase frequency of signal delivery in fp-stress
  kselftest/arm64: Fix encoding for SVE B16B16 test
  ...

* for-next/crc32:
  : Optimise CRC32 using PMULL instructions
  arm64/crc32: Implement 4-way interleave using PMULL
  arm64/crc32: Reorganize bit/byte ordering macros
  arm64/lib: Handle CRC-32 alternative in C code

* for-next/guest-cca:
  : Support for running Linux as a guest in Arm CCA
  arm64: Document Arm Confidential Compute
  virt: arm-cca-guest: TSM_REPORT support for realms
  arm64: Enable memory encrypt for Realms
  arm64: mm: Avoid TLBI when marking pages as valid
  arm64: Enforce bounce buffers for realm DMA
  efi: arm64: Map Device with Prot Shared
  arm64: rsi: Map unprotected MMIO as decrypted
  arm64: rsi: Add support for checking whether an MMIO is protected
  arm64: realm: Query IPA size from the RMM
  arm64: Detect if in a realm and set RIPAS RAM
  arm64: rsi: Add RSI definitions

* for-next/haft:
  : Support for arm64 FEAT_HAFT
  arm64: pgtable: Warn unexpected pmdp_test_and_clear_young()
  arm64: Enable ARCH_HAS_NONLEAF_PMD_YOUNG
  arm64: Add support for FEAT_HAFT
  arm64: setup: name 'tcr2' register
  arm64/sysreg: Update ID_AA64MMFR1_EL1 register

* for-next/scs:
  : Dynamic shadow call stack fixes
  arm64/scs: Drop unused prototype __pi_scs_patch_vmlinux()
  arm64/scs: Deal with 64-bit relative offsets in FDE frames
  arm64/scs: Fix handling of DWARF augmentation data in CIE/FDE frames

26 files changed:
1  2  3  4  5  6  7  8  9  10  11  12  13  14  15 
Documentation/arch/arm64/booting.rst
Documentation/arch/arm64/elf_hwcaps.rst
Documentation/arch/arm64/index.rst
arch/arm64/Kconfig
arch/arm64/include/asm/cpufeature.h
arch/arm64/include/asm/hwcap.h
arch/arm64/include/asm/mman.h
arch/arm64/include/asm/pgtable-prot.h
arch/arm64/include/asm/pgtable.h
arch/arm64/include/asm/processor.h
arch/arm64/include/uapi/asm/hwcap.h
arch/arm64/kernel/asm-offsets.c
arch/arm64/kernel/cpufeature.c
arch/arm64/kernel/pi/idreg-override.c
arch/arm64/kernel/probes/uprobes.c
arch/arm64/kernel/process.c
arch/arm64/kernel/ptrace.c
arch/arm64/kernel/signal.c
arch/arm64/mm/mmu.c
arch/arm64/tools/cpucaps
arch/arm64/tools/sysreg
tools/testing/selftests/arm64/abi/hwcap.c
tools/testing/selftests/arm64/fp/fpsimd-test.S
tools/testing/selftests/arm64/fp/sve-test.S
tools/testing/selftests/arm64/fp/za-test.S
tools/testing/selftests/arm64/fp/zt-test.S

Simple merge
Simple merge
index fd9df6dcc5937208fe158ac8da9c4ede131d0fc7,dcb12f041c1344130791f37721c2e4e865e62c31,fd9df6dcc5937208fe158ac8da9c4ede131d0fc7,3e29b44d2d7bd693c6209383a67b8d0d14345406,3e29b44d2d7bd693c6209383a67b8d0d14345406,3e29b44d2d7bd693c6209383a67b8d0d14345406,3e29b44d2d7bd693c6209383a67b8d0d14345406,3e29b44d2d7bd693c6209383a67b8d0d14345406,3e29b44d2d7bd693c6209383a67b8d0d14345406,3e29b44d2d7bd693c6209383a67b8d0d14345406,3e29b44d2d7bd693c6209383a67b8d0d14345406,3e29b44d2d7bd693c6209383a67b8d0d14345406,ccea9c22d6dff0fc172278c39ac52c1fcd12eeff,d2ca7b6c6f8594eab683a69fed67ab48560cc0a2,fd9df6dcc5937208fe158ac8da9c4ede131d0fc7..5afd028116c9362d78cf89e547653cfedc036980
                int
                default 3
               
+++++++++++++ +config ARM64_HAFT
+++++++++++++ + bool "Support for Hardware managed Access Flag for Table Descriptors"
+++++++++++++ + depends on ARM64_HW_AFDBM
+++++++++++++ + default y
+++++++++++++ + help
+++++++++++++ +   The ARMv8.9/ARMv9.5 introduces the feature Hardware managed Access
+++++++++++++ +   Flag for Table descriptors. When enabled an architectural executed
+++++++++++++ +   memory access will update the Access Flag in each Table descriptor
+++++++++++++ +   which is accessed during the translation table walk and for which
+++++++++++++ +   the Access Flag is 0. The Access Flag of the Table descriptor use
+++++++++++++ +   the same bit of PTE_AF.
+++++++++++++ +
+++++++++++++ +   The feature will only be enabled if all the CPUs in the system
+++++++++++++ +   support this feature. If unsure, say Y.
+++++++++++++ +
               endmenu # "ARMv8.9 architectural features"
               
+ +++++++++++++menu "v9.4 architectural features"
+ +++++++++++++
+ +++++++++++++config ARM64_GCS
+ +++++++++++++ bool "Enable support for Guarded Control Stack (GCS)"
+ +++++++++++++ default y
+ +++++++++++++ select ARCH_HAS_USER_SHADOW_STACK
+ +++++++++++++ select ARCH_USES_HIGH_VMA_FLAGS
+ +++++++++++++ depends on !UPROBES
+ +++++++++++++ help
+ +++++++++++++   Guarded Control Stack (GCS) provides support for a separate
+ +++++++++++++   stack with restricted access which contains only return
+ +++++++++++++   addresses.  This can be used to harden against some attacks
+ +++++++++++++   by comparing return address used by the program with what is
+ +++++++++++++   stored in the GCS, and may also be used to efficiently obtain
+ +++++++++++++   the call stack for applications such as profiling.
+ +++++++++++++
+ +++++++++++++   The feature is detected at runtime, and will remain disabled
+ +++++++++++++   if the system does not implement the feature.
+ +++++++++++++
+ +++++++++++++endmenu # "v9.4 architectural features"
+ +++++++++++++
               config ARM64_SVE
                bool "ARM Scalable Vector Extension support"
                default y
index 3d261cc123c1e22ac7bc9cfcde463624c76b2084,69470795f5d2aa4487fe04df0fe21fdaad79573d,3d261cc123c1e22ac7bc9cfcde463624c76b2084,3d261cc123c1e22ac7bc9cfcde463624c76b2084,3d261cc123c1e22ac7bc9cfcde463624c76b2084,4b6bc0bac9b9337a1979e9cbe282732b0c5ffd3f,3d261cc123c1e22ac7bc9cfcde463624c76b2084,3d261cc123c1e22ac7bc9cfcde463624c76b2084,3d261cc123c1e22ac7bc9cfcde463624c76b2084,38e7d1a44ea38ab0a06a6f22824ae023b128721b,3d261cc123c1e22ac7bc9cfcde463624c76b2084,3d261cc123c1e22ac7bc9cfcde463624c76b2084,3d261cc123c1e22ac7bc9cfcde463624c76b2084,ed8c784ca082c2795b1223b652431785bd41864d,3d261cc123c1e22ac7bc9cfcde463624c76b2084..3d63c20ccefcd4391b37723b5b17c41f1d2bdcbe
@@@@@@@@@@@@@@@@ -834,10 -834,16 -834,10 -834,10 -834,10 -834,9 -834,10 -834,10 -834,10 -835,10 -834,10 -834,10 -834,10 -834,16 -834,10 +835,21 @@@@@@@@@@@@@@@@ static inline bool system_supports_lpa2
               
               static inline bool system_supports_poe(void)
               {
----- --------- return IS_ENABLED(CONFIG_ARM64_POE) &&
----- ---------         alternative_has_cap_unlikely(ARM64_HAS_S1POE);
+++++ +++++++++ return alternative_has_cap_unlikely(ARM64_HAS_S1POE);
+ +++ +++++++++}
+ +++ +++++++++
+ +++++++++++++static inline bool system_supports_gcs(void)
+ +++++++++++++{
+ +++++++++++++ return IS_ENABLED(CONFIG_ARM64_GCS) &&
+ +++++++++++++         alternative_has_cap_unlikely(ARM64_HAS_GCS);
+ +++++++++++ +}
+ +++++++++++ +
+++++++++++++ +static inline bool system_supports_haft(void)
+++++++++++++ +{
+++++++++++++ + return IS_ENABLED(CONFIG_ARM64_HAFT) &&
+++++++++++++ +         cpus_have_final_cap(ARM64_HAFT);
 +   +         }
 +   +         
               int do_emulate_mrs(struct pt_regs *regs, u32 sys_reg, u32 rt);
               bool try_emulate_mrs(struct pt_regs *regs, u32 isn);
               
Simple merge
Simple merge
Simple merge
Simple merge
index 1438424f00643708c26b0439fd697b6d97fc3ff9,37fefdc3d3a39efccae94390e9c3ab03413c290e,1438424f00643708c26b0439fd697b6d97fc3ff9,1438424f00643708c26b0439fd697b6d97fc3ff9,1438424f00643708c26b0439fd697b6d97fc3ff9,1438424f00643708c26b0439fd697b6d97fc3ff9,1438424f00643708c26b0439fd697b6d97fc3ff9,1438424f00643708c26b0439fd697b6d97fc3ff9,e277105fb87a2b08e3d03f08b350515af06aabc1,1438424f00643708c26b0439fd697b6d97fc3ff9,1438424f00643708c26b0439fd697b6d97fc3ff9,1438424f00643708c26b0439fd697b6d97fc3ff9,1438424f00643708c26b0439fd697b6d97fc3ff9,1438424f00643708c26b0439fd697b6d97fc3ff9,1438424f00643708c26b0439fd697b6d97fc3ff9..1bf1a3b16e88641ad066798b4755ae7898c81bb4
@@@@@@@@@@@@@@@@ -285,15 -292,15 -285,15 -285,15 -285,15 -285,15 -285,15 -285,15 -285,38 -285,15 -285,15 -285,15 -285,15 -285,15 -285,15 +292,38 @@@@@@@@@@@@@@@@ void tls_preserve_current_state(void)
                .fpsimd_cpu = NR_CPUS,                  \
               }
               
-------- ------static inline void start_thread_common(struct pt_regs *regs, unsigned long pc)
++++++++ ++++++static inline void start_thread_common(struct pt_regs *regs, unsigned long pc,
++++++++ ++++++                                unsigned long pstate)
               {
-------- ------ s32 previous_syscall = regs->syscallno;
-------- ------ memset(regs, 0, sizeof(*regs));
-------- ------ regs->syscallno = previous_syscall;
-------- ------ regs->pc = pc;
++++++++ ++++++ /*
++++++++ ++++++  * Ensure all GPRs are zeroed, and initialize PC + PSTATE.
++++++++ ++++++  * The SP (or compat SP) will be initialized later.
++++++++ ++++++  */
++++++++ ++++++ regs->user_regs = (struct user_pt_regs) {
++++++++ ++++++         .pc = pc,
++++++++ ++++++         .pstate = pstate,
++++++++ ++++++ };
 +             
++++++++ ++++++ /*
++++++++ ++++++  * To allow the syscalls:sys_exit_execve tracepoint we need to preserve
++++++++ ++++++  * syscallno, but do not need orig_x0 or the original GPRs.
++++++++ ++++++  */
++++++++ ++++++ regs->orig_x0 = 0;
+ ++++++ ++++++
++++++++ ++++++ /*
++++++++ ++++++  * An exec from a kernel thread won't have an existing PMR value.
++++++++ ++++++  */
                if (system_uses_irq_prio_masking())
-------- ------         regs->pmr_save = GIC_PRIO_IRQON;
++++++++ ++++++         regs->pmr = GIC_PRIO_IRQON;
++++++++ ++++++
++++++++ ++++++ /*
++++++++ ++++++  * The pt_regs::stackframe field must remain valid throughout this
++++++++ ++++++  * function as a stacktrace can be taken at any time. Any user or
++++++++ ++++++  * kernel task should have a valid final frame.
++++++++ ++++++  */
++++++++ ++++++ WARN_ON_ONCE(regs->stackframe.record.fp != 0);
++++++++ ++++++ WARN_ON_ONCE(regs->stackframe.record.lr != 0);
++++++++ ++++++ WARN_ON_ONCE(regs->stackframe.type != FRAME_META_TYPE_FINAL);
               }
               
               static inline void start_thread(struct pt_regs *regs, unsigned long pc,
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
This page took 0.155092 seconds and 4 git commands to generate.