Commit 00e35f2b authored by Helge Deller's avatar Helge Deller
Browse files

parisc: Enable -mlong-calls gcc option by default when !CONFIG_MODULES



When building a kernel without module support, the CONFIG_MLONGCALL option
needs to be enabled in order to reach symbols which are outside of a 22-bit
branch.

This patch changes the autodetection in the Kconfig script to always enable
CONFIG_MLONGCALL when modules are disabled and uses a far call to
preempt_schedule_irq() in intr_do_preempt() to reach the symbol in all cases.

Signed-off-by: default avatarHelge Deller <deller@gmx.de>
Reported-by: default avatarkernel test robot <lkp@intel.com>
Cc: stable@vger.kernel.org # v5.6+
parent 0aa91f84
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -202,9 +202,8 @@ config PREFETCH
	depends on PA8X00 || PA7200

config MLONGCALLS
	bool "Enable the -mlong-calls compiler option for big kernels"
	default y if !MODULES || UBSAN || FTRACE
	default n
	def_bool y if !MODULES || UBSAN || FTRACE
	bool "Enable the -mlong-calls compiler option for big kernels" if MODULES && !UBSAN && !FTRACE
	depends on PA8X00
	help
	  If you configure the kernel to include many drivers built-in instead
+10 −3
Original line number Diff line number Diff line
@@ -997,10 +997,17 @@ intr_do_preempt:
	bb,<,n	%r20, 31 - PSW_SM_I, intr_restore
	nop

	/* ssm PSW_SM_I done later in intr_restore */
#ifdef CONFIG_MLONGCALLS
	ldil	L%intr_restore, %r2
	load32	preempt_schedule_irq, %r1
	bv	%r0(%r1)
	ldo	R%intr_restore(%r2), %r2
#else
	ldil	L%intr_restore, %r1
	BL	preempt_schedule_irq, %r2
	nop

	b,n	intr_restore		/* ssm PSW_SM_I done by intr_restore */
	ldo	R%intr_restore(%r1), %r2
#endif
#endif /* CONFIG_PREEMPTION */

	/*