CONFIG_DEBUG_STACKOVERFLOW hurts

Gilboa Davara gilboad at gmail.com
Sat Sep 15 13:01:37 UTC 2007


On Fri, 2007-09-14 at 22:07 -0500, Eric Sandeen wrote:
> Gilboa Davara wrote:
> 
> > Sorry for butting in... but isn't disabling STACKOVERFLOW the wrong
> > answer to this problem?
> > Does anyone see any reason why both sprint_symbol and __print_symbol
> > shouldn't use dynamically allocated buffers instead of wasting stack
> > space? *
> > 
> > - GIlboa
> > * If performance is an issue, memory can be statically allocated per CPU
> > with additional locking in dump_trace. 
> 
> Well, I agree that the dump_stack path should be lightened up
> stack-wise; and I don't think performance should be an issue (dump_stack
> is used when something has gone wrong, probably not going to be
> performance critical?)  Locked global buffers may be just fine (we did
> this for xfs error messages, I remember...)

I chose the easy wait out and generated a simple, alloc-by-demand patch.
http://lkml.org/lkml/2007/9/15/69


> 
> I was looking at this from a slightly different angle, which is that the
> stack overflow warning is largely pointless - no matter how much you
> lighten up the dump_stack path, it will add something to the stack depth
> of the current process, effectively *reducing* the available stack for
> all processes, and increasing the risk that you'll actually overflow.
> (if you take an interrupt towards the end of the stack, the warning will
> go off and use the last bit - so you can't count on that stack space to
> be available).

While it is true,
A. If adding ~40 bytes to the kernel's stack usage is critical, we're
already passed the all-doom-and-gloom-point.
B. We can always calculate the available stack size, and if stack_remain
is bigger then say, 80 bytes, call dump_stack.

> 
> And, if you overflow the stack, you'll almost certainly get an oops and
> a backtrace anyway - usually thread_info gets overwritten and you BUG
> because it looks like you sleep in an interrupt, or somesuch.  

Yeah, but at least to me, as a developer, having a warning before
all-hell-breaks-lose, is a good thing (tm). 

Though, one can always argue that people who play around with kernel
development can build their own kernel with STACKOVERFLOW enabled.

> So,
> what's the point of the IRQ stack-depth check, again?  Especially with
> 4k stacks and separate IRQ stacks?  And the more deterministic
> max-stack-depth excursion checker (CONFIG_DEBUG_STACK_USAGE) as well...
> 
> Finally, the patch I sent upstream would clearly show on an oops whether
> or not the stack was currently overflowing, or whether the stack had
> ever overflowed prior to the oops.  Seemed useful to me.

Just to satisfy my curiosity, can you post a link to the patch?

- Gilboa




More information about the Fedora-kernel-list mailing list