On Sat, Jan 28, 2017 at 10:24:16PM -0500, Joshua Kinard wrote: > From: Joshua Kinard > > Disable stack checking on MIPS kernels. Some distribution toolchains > might pass the -fstack-check option to gcc. This results in a > store-doubleword instruction being emitted at the top of all > functions that checks the available stack space. E.g., > > a80000000001d740 : > a80000000001d740: ffa0bfc0 sd zero,-16448(sp) > a80000000001d744: 2405ffc9 li a1,-55 > a80000000001d748: 67bdffc0 daddiu sp,sp,-64 > > Generally, this is undesirable, and especially on the SGI IP27 > platform, it will trigger a NULL pointer dereference in > '_raw_spin_lock_irq' during early init. > > Signed-off-by: Joshua Kinard > Suggested-by: James Hogan Applied Thanks James > --- > arch/mips/Makefile | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > linux-mips-4.10-disable-stack-check.patch > diff --git a/arch/mips/Makefile b/arch/mips/Makefile > index 1a6bac7b076f..6b2a30442105 100644 > --- a/arch/mips/Makefile > +++ b/arch/mips/Makefile > @@ -131,6 +131,21 @@ cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += $(shell $(CC) -dumpmachine |grep -q 'mips. > > cflags-$(CONFIG_SB1XXX_CORELIS) += $(call cc-option,-mno-sched-prolog) \ > -fno-omit-frame-pointer > + > +# Some distribution-specific toolchains might pass the -fstack-check > +# option during the build, which adds a simple stack-probe at the beginning > +# of every function. This stack probe is to ensure that there is enough > +# stack space, else a SEGV is generated. This is not desirable for MIPS > +# as kernel stacks are small, placed in unmapped virtual memory, and do not > +# grow when overflowed. Especially on SGI IP27 platforms, this check will > +# lead to a NULL pointer dereference in _raw_spin_lock_irq. > +# > +# In disassembly, this stack probe appears at the top of a function as: > +# sd zero,(sp) > +# Where is a negative value. > +# > +cflags-y += -fno-stack-check > + > # > # CPU-dependent compiler/assembler options for optimization. > # >