Commit a8356cdb authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'loongarch-6.3' of...

Merge tag 'loongarch-6.3' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson

Pull LoongArch updates from Huacai Chen:

 - Make -mstrict-align configurable

 - Add kernel relocation and KASLR support

 - Add single kernel image implementation for kdump

 - Add hardware breakpoints/watchpoints support

 - Add kprobes/kretprobes/kprobes_on_ftrace support

 - Add LoongArch support for some selftests.

* tag 'loongarch-6.3' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson: (23 commits)
  selftests/ftrace: Add LoongArch kprobe args string tests support
  selftests/seccomp: Add LoongArch selftesting support
  tools: Add LoongArch build infrastructure
  samples/kprobes: Add LoongArch support
  LoongArch: Mark some assembler symbols as non-kprobe-able
  LoongArch: Add kprobes on ftrace support
  LoongArch: Add kretprobes support
  LoongArch: Add kprobes support
  LoongArch: Simulate branch and PC* instructions
  LoongArch: ptrace: Add hardware single step support
  LoongArch: ptrace: Add function argument access API
  LoongArch: ptrace: Expose hardware breakpoints to debuggers
  LoongArch: Add hardware breakpoints/watchpoints support
  LoongArch: kdump: Add crashkernel=YM handling
  LoongArch: kdump: Add single kernel image implementation
  LoongArch: Add support for kernel address space layout randomization (KASLR)
  LoongArch: Add support for kernel relocation
  LoongArch: Add la_abs macro implementation
  LoongArch: Add JUMP_VIRT_ADDR macro implementation to avoid using la.abs
  LoongArch: Use la.pcrel instead of la.abs when it's trivially possible
  ...
parents 64e85168 8883bf83
Loading
Loading
Loading
Loading
+56 −9
Original line number Diff line number Diff line
@@ -94,15 +94,21 @@ config LOONGARCH
	select HAVE_DYNAMIC_FTRACE_WITH_ARGS
	select HAVE_DYNAMIC_FTRACE_WITH_REGS
	select HAVE_EBPF_JIT
	select HAVE_EFFICIENT_UNALIGNED_ACCESS if !ARCH_STRICT_ALIGN
	select HAVE_EXIT_THREAD
	select HAVE_FAST_GUP
	select HAVE_FTRACE_MCOUNT_RECORD
	select HAVE_FUNCTION_ARG_ACCESS_API
	select HAVE_FUNCTION_GRAPH_TRACER
	select HAVE_FUNCTION_TRACER
	select HAVE_GENERIC_VDSO
	select HAVE_HW_BREAKPOINT if PERF_EVENTS
	select HAVE_IOREMAP_PROT
	select HAVE_IRQ_EXIT_ON_IRQ_STACK
	select HAVE_IRQ_TIME_ACCOUNTING
	select HAVE_KPROBES
	select HAVE_KPROBES_ON_FTRACE
	select HAVE_KRETPROBES
	select HAVE_MOD_ARCH_SPECIFIC
	select HAVE_NMI
	select HAVE_PCI
@@ -441,6 +447,24 @@ config ARCH_IOREMAP
	  protection support. However, you can enable LoongArch DMW-based
	  ioremap() for better performance.

config ARCH_STRICT_ALIGN
	bool "Enable -mstrict-align to prevent unaligned accesses" if EXPERT
	default y
	help
	  Not all LoongArch cores support h/w unaligned access, we can use
	  -mstrict-align build parameter to prevent unaligned accesses.

	  CPUs with h/w unaligned access support:
	  Loongson-2K2000/2K3000/3A5000/3C5000/3D5000.

	  CPUs without h/w unaligned access support:
	  Loongson-2K500/2K1000.

	  This option is enabled by default to make the kernel be able to run
	  on all LoongArch systems. But you can disable it manually if you want
	  to run kernel only on systems with h/w unaligned access support in
	  order to optimise for performance.

config KEXEC
	bool "Kexec system call"
	select KEXEC_CORE
@@ -454,6 +478,7 @@ config KEXEC

config CRASH_DUMP
	bool "Build kdump crash kernel"
	select RELOCATABLE
	help
	  Generate crash dump after being started by kexec. This should
	  be normally only set in special crash dump kernels which are
@@ -463,16 +488,38 @@ config CRASH_DUMP

	  For more details see Documentation/admin-guide/kdump/kdump.rst

config PHYSICAL_START
	hex "Physical address where the kernel is loaded"
	default "0x90000000a0000000"
	depends on CRASH_DUMP
config RELOCATABLE
	bool "Relocatable kernel"
	help
	  This gives the XKPRANGE address where the kernel is loaded.
	  If you plan to use kernel for capturing the crash dump change
	  this value to start of the reserved region (the "X" value as
	  specified in the "crashkernel=YM@XM" command line boot parameter
	  passed to the panic-ed kernel).
	  This builds the kernel as a Position Independent Executable (PIE),
	  which retains all relocation metadata required, so as to relocate
	  the kernel binary at runtime to a different virtual address from
	  its link address.

config RANDOMIZE_BASE
	bool "Randomize the address of the kernel (KASLR)"
	depends on RELOCATABLE
	help
	   Randomizes the physical and virtual address at which the
	   kernel image is loaded, as a security feature that
	   deters exploit attempts relying on knowledge of the location
	   of kernel internals.

	   The kernel will be offset by up to RANDOMIZE_BASE_MAX_OFFSET.

	   If unsure, say N.

config RANDOMIZE_BASE_MAX_OFFSET
	hex "Maximum KASLR offset" if EXPERT
	depends on RANDOMIZE_BASE
	range 0x0 0x10000000
	default "0x01000000"
	help
	  When KASLR is active, this provides the maximum offset that will
	  be applied to the kernel image. It should be set according to the
	  amount of physical RAM available in the target system.

	  This is limited by the size of the lower address memory, 256MB.

config SECCOMP
	bool "Enable seccomp to safely compute untrusted bytecode"
+10 −4
Original line number Diff line number Diff line
@@ -71,14 +71,15 @@ KBUILD_AFLAGS_MODULE += -Wa,-mla-global-with-abs
KBUILD_CFLAGS_MODULE		+= -fplt -Wa,-mla-global-with-abs,-mla-local-with-abs
endif

ifeq ($(CONFIG_RELOCATABLE),y)
KBUILD_CFLAGS_KERNEL		+= -fPIE
LDFLAGS_vmlinux			+= -static -pie --no-dynamic-linker -z notext
endif

cflags-y += -ffreestanding
cflags-y += $(call cc-option, -mno-check-zero-division)

ifndef CONFIG_PHYSICAL_START
load-y		= 0x9000000000200000
else
load-y		= $(CONFIG_PHYSICAL_START)
endif
bootvars-y	= VMLINUX_LOAD_ADDRESS=$(load-y)

drivers-$(CONFIG_PCI)		+= arch/loongarch/pci/
@@ -91,10 +92,15 @@ KBUILD_CPPFLAGS += -DVMLINUX_LOAD_ADDRESS=$(load-y)
# instead of .eh_frame so we don't discard them.
KBUILD_CFLAGS += -fno-asynchronous-unwind-tables

ifdef CONFIG_ARCH_STRICT_ALIGN
# Don't emit unaligned accesses.
# Not all LoongArch cores support unaligned access, and as kernel we can't
# rely on others to provide emulation for these accesses.
KBUILD_CFLAGS += $(call cc-option,-mstrict-align)
else
# Optimise for performance on hardware supports unaligned access.
KBUILD_CFLAGS += $(call cc-option,-mno-strict-align)
endif

KBUILD_CFLAGS += -isystem $(shell $(CC) -print-file-name=include)

+1 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ CONFIG_HOTPLUG_CPU=y
CONFIG_NR_CPUS=64
CONFIG_NUMA=y
CONFIG_KEXEC=y
CONFIG_CRASH_DUMP=y
CONFIG_SUSPEND=y
CONFIG_HIBERNATION=y
CONFIG_ACPI=y
+2 −0
Original line number Diff line number Diff line
@@ -125,4 +125,6 @@ extern unsigned long vm_map_base;
#define ISA_IOSIZE	SZ_16K
#define IO_SPACE_LIMIT	(PCI_IOSIZE - 1)

#define PHYS_LINK_KADDR	PHYSADDR(VMLINUX_LOAD_ADDRESS)

#endif /* _ASM_ADDRSPACE_H */
+10 −0
Original line number Diff line number Diff line
@@ -188,4 +188,14 @@
#define PTRLOG		3
#endif

/* Annotate a function as being unsuitable for kprobes. */
#ifdef CONFIG_KPROBES
#define _ASM_NOKPROBE(name)				\
	.pushsection "_kprobe_blacklist", "aw";		\
	.quad	name;					\
	.popsection
#else
#define _ASM_NOKPROBE(name)
#endif

#endif /* __ASM_ASM_H */
Loading