x86_64: fix the check in stack_overflow_check
authorjia zhang <jia.zhang2008@gmail.com>
Sun, 23 Nov 2008 01:51:41 +0000 (09:51 +0800)
committerIngo Molnar <mingo@elte.hu>
Sun, 23 Nov 2008 07:57:42 +0000 (08:57 +0100)
Impact: make stack overflow debug check and printout narrower

stack_overflow_check() should consider the stack usage of pt_regs, and
thus it could warn us in advance. Additionally, it looks better for
the warning time to start at INITIAL_JIFFIES.

Assuming that rsp gets close to the check point before interrupt
arrives: when interrupt really happens, thread_info will be partly
overrode.

Signed-off-by: jia zhang <jia.zhang2008@gmail.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/kernel/irq_64.c

index 60eb84eb77a0a34232be8aafbe8a7d1e040f454f..b842fc82be15a079f5a9268fcddcc222cf41ccfc 100644 (file)
 static inline void stack_overflow_check(struct pt_regs *regs)
 {
        u64 curbase = (u64)task_stack_page(current);
-       static unsigned long warned = -60*HZ;
+       static unsigned long warned = INITIAL_JIFFIES - 60*HZ;
 
        if (regs->sp >= curbase && regs->sp <= curbase + THREAD_SIZE &&
-           regs->sp <  curbase + sizeof(struct thread_info) + 128 &&
-           time_after(jiffies, warned + 60*HZ)) {
+                       regs->sp < curbase + sizeof(struct thread_info) +
+                       sizeof(struct pt_regs) + 128 &&
+                       time_after(jiffies, warned + 60*HZ)) {
                printk("do_IRQ: %s near stack overflow (cur:%Lx,sp:%lx)\n",
                       current->comm, curbase, regs->sp);
                show_stack(NULL,NULL);
This page took 0.025197 seconds and 5 git commands to generate.