Commit 9c0e6a89 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm

Pull ARM updates from Russell King:
 "Updates for IRQ stacks and virtually mapped stack support, and ftrace:

   - Support for IRQ and vmap'ed stacks

     This covers all the work related to implementing IRQ stacks and
     vmap'ed stacks for all 32-bit ARM systems that are currently
     supported by the Linux kernel, including RiscPC and Footbridge. It
     has been submitted for review in four different waves:

      - IRQ stacks support for v7 SMP systems [0]

      - vmap'ed stacks support for v7 SMP systems[1]

      - extending support for both IRQ stacks and vmap'ed stacks for all
        remaining configurations, including v6/v7 SMP multiplatform
        kernels and uniprocessor configurations including v7-M [2]

      - fixes and updates in [3]

   - ftrace fixes and cleanups

     Make all flavors of ftrace available on all builds, regardless of
     ISA choice, unwinder choice or compiler [4]:

      - use ADD not POP where possible

      - fix a couple of Thumb2 related issues

      - enable HAVE_FUNCTION_GRAPH_FP_TEST for robustness

      - enable the graph tracer with the EABI unwinder

      - avoid clobbering frame pointer registers to make Clang happy

   - Fixes for the above"

[0] https://lore.kernel.org/linux-arm-kernel/20211115084732.3704393-1-ardb@kernel.org/
[1] https://lore.kernel.org/linux-arm-kernel/20211122092816.2865873-1-ardb@kernel.org/
[2] https://lore.kernel.org/linux-arm-kernel/20211206164659.1495084-1-ardb@kernel.org/
[3] https://lore.kernel.org/linux-arm-kernel/20220124174744.1054712-1-ardb@kernel.org/
[4] https://lore.kernel.org/linux-arm-kernel/20220203082204.1176734-1-ardb@kernel.org/

* tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm: (62 commits)
  ARM: fix building NOMMU ARMv4/v5 kernels
  ARM: unwind: only permit stack switch when unwinding call_with_stack()
  ARM: Revert "unwind: dump exception stack from calling frame"
  ARM: entry: fix unwinder problems caused by IRQ stacks
  ARM: unwind: set frame.pc correctly for current-thread unwinding
  ARM: 9184/1: return_address: disable again for CONFIG_ARM_UNWIND=y
  ARM: 9183/1: unwind: avoid spurious warnings on bogus code addresses
  Revert "ARM: 9144/1: forbid ftrace with clang and thumb2_kernel"
  ARM: mach-bcm: disable ftrace in SMC invocation routines
  ARM: cacheflush: avoid clobbering the frame pointer
  ARM: kprobes: treat R7 as the frame pointer register in Thumb2 builds
  ARM: ftrace: enable the graph tracer with the EABI unwinder
  ARM: unwind: track location of LR value in stack frame
  ARM: ftrace: enable HAVE_FUNCTION_GRAPH_FP_TEST
  ARM: ftrace: avoid unnecessary literal loads
  ARM: ftrace: avoid redundant loads or clobbering IP
  ARM: ftrace: use trampolines to keep .init.text in branching range
  ARM: ftrace: use ADD not POP to counter PUSH at entry
  ARM: ftrace: ensure that ADR takes the Thumb bit into account
  ARM: make get_current() and __my_cpu_offset() __always_inline
  ...
parents e6aef349 234a0f20
Loading
Loading
Loading
Loading
+28 −18
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ config ARM
	select GENERIC_CPU_AUTOPROBE
	select GENERIC_EARLY_IOREMAP
	select GENERIC_IDLE_POLL_SETUP
	select GENERIC_IRQ_MULTI_HANDLER
	select GENERIC_IRQ_PROBE
	select GENERIC_IRQ_SHOW
	select GENERIC_IRQ_SHOW_LEVEL
@@ -94,8 +95,8 @@ config ARM
	select HAVE_EXIT_THREAD
	select HAVE_FAST_GUP if ARM_LPAE
	select HAVE_FTRACE_MCOUNT_RECORD if !XIP_KERNEL
	select HAVE_FUNCTION_GRAPH_TRACER if !THUMB2_KERNEL && !CC_IS_CLANG
	select HAVE_FUNCTION_TRACER if !XIP_KERNEL && !(THUMB2_KERNEL && CC_IS_CLANG)
	select HAVE_FUNCTION_GRAPH_TRACER
	select HAVE_FUNCTION_TRACER if !XIP_KERNEL
	select HAVE_GCC_PLUGINS
	select HAVE_HW_BREAKPOINT if PERF_EVENTS && (CPU_V6 || CPU_V6K || CPU_V7)
	select HAVE_IRQ_TIME_ACCOUNTING
@@ -129,7 +130,8 @@ config ARM
	select PERF_USE_VMALLOC
	select RTC_LIB
	select SYS_SUPPORTS_APM_EMULATION
	select THREAD_INFO_IN_TASK if CURRENT_POINTER_IN_TPIDRURO
	select THREAD_INFO_IN_TASK
	select HAVE_ARCH_VMAP_STACK if MMU && ARM_HAS_GROUP_RELOCS
	select TRACE_IRQFLAGS_SUPPORT if !CPU_V7M
	# Above selects are sorted alphabetically; please add new ones
	# according to that.  Thanks.
@@ -141,6 +143,17 @@ config ARM
	  Europe.  There is an ARM Linux project with a web page at
	  <http://www.arm.linux.org.uk/>.

config ARM_HAS_GROUP_RELOCS
	def_bool y
	depends on !LD_IS_LLD || LLD_VERSION >= 140000
	depends on !COMPILE_TEST
	help
	  Whether or not to use R_ARM_ALU_PC_Gn or R_ARM_LDR_PC_Gn group
	  relocations, which have been around for a long time, but were not
	  supported in LLD until version 14. The combined range is -/+ 256 MiB,
	  which is usually sufficient, but not for allyesconfig, so we disable
	  this feature when doing compile testing.

config ARM_HAS_SG_CHAIN
	bool

@@ -229,9 +242,6 @@ config GENERIC_ISA_DMA
config FIQ
	bool

config NEED_RET_TO_USER
	bool

config ARCH_MTD_XIP
	bool

@@ -325,7 +335,6 @@ config ARCH_MULTIPLATFORM
	select AUTO_ZRELADDR
	select TIMER_OF
	select COMMON_CLK
	select GENERIC_IRQ_MULTI_HANDLER
	select HAVE_PCI
	select PCI_DOMAINS_GENERIC if PCI
	select SPARSE_IRQ
@@ -349,7 +358,6 @@ config ARCH_EP93XX
	select ARM_AMBA
	imply ARM_PATCH_PHYS_VIRT
	select ARM_VIC
	select GENERIC_IRQ_MULTI_HANDLER
	select AUTO_ZRELADDR
	select CLKSRC_MMIO
	select CPU_ARM920T
@@ -374,7 +382,6 @@ config ARCH_IOP32X
	select CPU_XSCALE
	select GPIO_IOP
	select GPIOLIB
	select NEED_RET_TO_USER
	select FORCE_PCI
	select PLAT_IOP
	help
@@ -388,7 +395,6 @@ config ARCH_IXP4XX
	select ARCH_SUPPORTS_BIG_ENDIAN
	select CPU_XSCALE
	select DMABOUNCE if PCI
	select GENERIC_IRQ_MULTI_HANDLER
	select GPIO_IXP4XX
	select GPIOLIB
	select HAVE_PCI
@@ -404,7 +410,6 @@ config ARCH_IXP4XX
config ARCH_DOVE
	bool "Marvell Dove"
	select CPU_PJ4
	select GENERIC_IRQ_MULTI_HANDLER
	select GPIOLIB
	select HAVE_PCI
	select MVEBU_MBUS
@@ -427,7 +432,6 @@ config ARCH_PXA
	select CLKSRC_MMIO
	select TIMER_OF
	select CPU_XSCALE if !CPU_XSC3
	select GENERIC_IRQ_MULTI_HANDLER
	select GPIO_PXA
	select GPIOLIB
	select IRQ_DOMAIN
@@ -466,7 +470,6 @@ config ARCH_SA1100
	select COMMON_CLK
	select CPU_FREQ
	select CPU_SA1100
	select GENERIC_IRQ_MULTI_HANDLER
	select GPIOLIB
	select IRQ_DOMAIN
	select ISA
@@ -481,7 +484,6 @@ config ARCH_S3C24XX
	select CLKSRC_SAMSUNG_PWM
	select GPIO_SAMSUNG
	select GPIOLIB
	select GENERIC_IRQ_MULTI_HANDLER
	select NEED_MACH_IO_H
	select S3C2410_WATCHDOG
	select SAMSUNG_ATAGS
@@ -499,7 +501,6 @@ config ARCH_OMAP1
	select ARCH_OMAP
	select CLKSRC_MMIO
	select GENERIC_IRQ_CHIP
	select GENERIC_IRQ_MULTI_HANDLER
	select GPIOLIB
	select HAVE_LEGACY_CLK
	select IRQ_DOMAIN
@@ -1166,7 +1167,12 @@ config SMP_ON_UP

config CURRENT_POINTER_IN_TPIDRURO
	def_bool y
	depends on SMP && CPU_32v6K && !CPU_V6
	depends on CPU_32v6K && !CPU_V6

config IRQSTACKS
	def_bool y
	select HAVE_IRQ_EXIT_ON_IRQ_STACK
	select HAVE_SOFTIRQ_ON_OWN_STACK

config ARM_CPU_TOPOLOGY
	bool "Support cpu topology definition"
@@ -1607,10 +1613,14 @@ config XEN
	help
	  Say Y if you want to run Linux in a Virtual Machine on Xen on ARM.

config CC_HAVE_STACKPROTECTOR_TLS
	def_bool $(cc-option,-mtp=cp15 -mstack-protector-guard=tls -mstack-protector-guard-offset=0)

config STACKPROTECTOR_PER_TASK
	bool "Use a unique stack canary value for each task"
	depends on GCC_PLUGINS && STACKPROTECTOR && THREAD_INFO_IN_TASK && !XIP_DEFLATED_DATA
	select GCC_PLUGIN_ARM_SSP_PER_TASK
	depends on STACKPROTECTOR && CURRENT_POINTER_IN_TPIDRURO && !XIP_DEFLATED_DATA
	depends on GCC_PLUGINS || CC_HAVE_STACKPROTECTOR_TLS
	select GCC_PLUGIN_ARM_SSP_PER_TASK if !CC_HAVE_STACKPROTECTOR_TLS
	default y
	help
	  Due to the fact that GCC uses an ordinary symbol reference from
+1 −1
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ config UNWINDER_FRAME_POINTER

config UNWINDER_ARM
	bool "ARM EABI stack unwinder"
	depends on AEABI && !FUNCTION_GRAPH_TRACER
	depends on AEABI
	select ARM_UNWIND
	help
	  This option enables stack unwinding support in the kernel
+9 −0
Original line number Diff line number Diff line
@@ -275,6 +275,14 @@ endif

ifeq ($(CONFIG_STACKPROTECTOR_PER_TASK),y)
prepare: stack_protector_prepare
ifeq ($(CONFIG_CC_HAVE_STACKPROTECTOR_TLS),y)
stack_protector_prepare: prepare0
	$(eval KBUILD_CFLAGS += \
		-mstack-protector-guard=tls \
		-mstack-protector-guard-offset=$(shell	\
			awk '{if ($$2 == "TSK_STACK_CANARY") print $$3;}'\
				include/generated/asm-offsets.h))
else
stack_protector_prepare: prepare0
	$(eval SSP_PLUGIN_CFLAGS := \
		-fplugin-arg-arm_ssp_per_task_plugin-offset=$(shell	\
@@ -283,6 +291,7 @@ stack_protector_prepare: prepare0
	$(eval KBUILD_CFLAGS += $(SSP_PLUGIN_CFLAGS))
	$(eval GCC_PLUGINS_CFLAGS += $(SSP_PLUGIN_CFLAGS))
endif
endif

all:	$(notdir $(KBUILD_IMAGE))

+1 −5
Original line number Diff line number Diff line
@@ -92,17 +92,13 @@ ifeq ($(CONFIG_USE_OF),y)
OBJS	+= $(libfdt_objs) fdt_check_mem_start.o
endif

# -fstack-protector-strong triggers protection checks in this code,
# but it is being used too early to link to meaningful stack_chk logic.
$(foreach o, $(libfdt_objs) atags_to_fdt.o fdt_check_mem_start.o, \
	$(eval CFLAGS_$(o) := -I $(srctree)/scripts/dtc/libfdt -fno-stack-protector))

targets       := vmlinux vmlinux.lds piggy_data piggy.o \
		 head.o $(OBJS)

KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING

ccflags-y := -fpic $(call cc-option,-mno-single-pic-base,) -fno-builtin \
	     -I$(srctree)/scripts/dtc/libfdt -fno-stack-protector \
	     -I$(obj) $(DISABLE_ARM_SSP_PER_TASK_PLUGIN)
ccflags-remove-$(CONFIG_FUNCTION_TRACER) += -pg
asflags-y := -DZIMAGE
+0 −7
Original line number Diff line number Diff line
@@ -128,13 +128,6 @@ asmlinkage void __div0(void)
	error("Attempting division by 0!");
}

const unsigned long __stack_chk_guard = 0x000a0dff;

void __stack_chk_fail(void)
{
	error("stack-protector: Kernel stack is corrupted\n");
}

extern int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x));


Loading