Re: [PATCH] debug: Do not permit CONFIG_DEBUG_STACK_USAGE=y on IA64or PARISC

From: Ingo Molnar
Date: Thu Jul 26 2012 - 08:01:24 EST



* James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx> wrote:

> On Wed, 2012-07-25 at 09:45 +0200, Ingo Molnar wrote:
> > * Tony Luck <tony.luck@xxxxxxxxx> wrote:
> >
> > > The stack_not_used() function in <linux/sched.h> assumes that stacks
> > > grow downwards. This is not true on IA64 or PARISC, so this function
> > > would walk off in the wrong direction and into the weeds.
> > >
> > > Found on IA64 because of a compilation failure with recursive dependencies
> > > on IA64_TASKSIZE and IA64_THREAD_INFO_SIZE.
> > >
> > > Fixing the code is possible, but should be combined with other
> > > infrastructure additions to set up the "canary" at the end of the stack.
> > >
> > > Reported-by: Fengguang Wu <fengguang.wu@xxxxxxxxx> (failed allmodconfig build)
> > > Signed-off-by: Tony Luck <tony.luck@xxxxxxxxx>
> > > ---
> > > lib/Kconfig.debug | 2 +-
> > > 1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
> > > index ff5bdee..4a18650 100644
> > > --- a/lib/Kconfig.debug
> > > +++ b/lib/Kconfig.debug
> > > @@ -714,7 +714,7 @@ config STACKTRACE
> > >
> > > config DEBUG_STACK_USAGE
> > > bool "Stack utilization instrumentation"
> > > - depends on DEBUG_KERNEL
> > > + depends on DEBUG_KERNEL && !IA64 && !PARISC
> >
> > The modern way of doing this is by adding an ARCH_SUPPORTS_
> > flag.
>
> That's a bit daft, isn't it? [...]

It's generally more maintainable than a random list of
architecture exclusions because every (old or new) architecture
can just grep for ARCH_SUPPORTS_ pattern and see whether they
support everything that others support.

The above exclusion list of architectures is much harder to find
in a structured way.

> [...] We'd have to add ARCH_SUPPORTS_ flags to about 25
> separate architectures just to get it not supported on these
> two.

That is one off overhead and it makes things easier to maintain
going forward.

Anyway, that's the current upstream technique and it's been in
place for years.

> Since the problem is an invalid assumption about how the stack
> grows, why not just condition it on that. We actually have a
> config option for this: CONFIG_STACK_GROWSUP. But for some
> reason ia64 doesn't define this, why not, Tony? It looks
> deliberate because you have replaced a lot of
>
> #ifdef CONFIG_STACK_GROWSUP
>
> with
>
> #if defined(CONFIG_STACK_GROWSUP) || defined(CONFIG_IA64)
>
> but not all of them.

Yes, that's another possible solution, assuming that it's really
only about the up/down difference.

Thanks,

Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/