Skip to contentSkip to conversation

remove in_interrupt() BUG_ON in exit path

PATCH In review Daniel Walker 2 participants 4 messages Oct 30, 2007

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 remove in_interrupt() BUG_ON in exit path

As you can see from the patch there is already a case to catch this type of problem. This BUG_ON() adds a resursive OOPS , since BUG() causes an OOPS and the OOPS just calls do_exit() , and do_exit() just causes another OOPS with this BUG_ON().. If we call panic() here then it's clear what the problem was, instead of causing an endless recursive crash.

---
 kernel/exit.c |    1 -
 1 file changed, 1 deletion(-)
kernel/exit.c +0 -1
Index: linux-2.6.23.1/kernel/exit.c
===================================================================
@@ -895,7 +895,6 @@ fastcall NORET_TYPE void do_exit(long co
 
 	WARN_ON(atomic_read(&tsk->fs_excl));
 
-	BUG_ON(in_interrupt());
 	if (unlikely(in_interrupt()))
 		panic("Aiee, killing interrupt handler!");
 	if (unlikely(!tsk->pid))
Signature · 1 line
-- 
#1 lore raw

--

Quoted 17 lines · Daniel Walker

As you can see from the patch there is already a case to catch this type of problem. This BUG_ON() adds a resursive OOPS , since BUG() causes an OOPS and the OOPS just calls do_exit() , and do_exit() just causes another OOPS with this BUG_ON().. If we call panic() here then it's clear what the problem was, instead of causing an endless recursive crash.

---
 kernel/exit.c |    1 -
 1 file changed, 1 deletion(-)

Index: linux-2.6.23.1/kernel/exit.c
===================================================================

kernel/exit.c fastcall NORET_TYPE void do_exit(long co · line 900

Quoted 7 lines
kernel/exit.c +0 -1
@@ -895,7 +895,6 @@ fastcall NORET_TYPE void do_exit(long co
 
 	WARN_ON(atomic_read(&tsk->fs_excl));
 
-	BUG_ON(in_interrupt());
 	if (unlikely(in_interrupt()))
 		panic("Aiee, killing interrupt handler!");
 	if (unlikely(!tsk->pid))

I did this change once before, while debugging. I had the same issue. This BUG_ON was giving me recursive crashes that prevented me knowing WTF was going on. I thought I even submitted a patch to remove it. Perhaps I forgot to. Nope, I did!

http://www.ussg.iu.edu/hypermail/linux/kernel/0707.0/1804.html

Since the change is added by the preempt-realtime-core.patch, I'll just remove it from there.

IOW, I'll fold this into that patch.

-- Steve

#2 lore raw
Quoted 6 lines · Steven Rostedt

I did this change once before, while debugging. I had the same issue. This BUG_ON was giving me recursive crashes that prevented me knowing WTF was going on. I thought I even submitted a patch to remove it. Perhaps I forgot to. Nope, I did!

http://www.ussg.iu.edu/hypermail/linux/kernel/0707.0/1804.html

I wonder if Ingo had his reasons for keeping it.. They're may have been a benefit to doing a BUG_ON at one point .. I don't know ..

Daniel

#3 lore raw

--

Quoted 7 lines · Daniel Walker
Quoted 5 lines · Steven Rostedt

I did this change once before, while debugging. I had the same issue. This BUG_ON was giving me recursive crashes that prevented me knowing WTF was going on. I thought I even submitted a patch to remove it. Perhaps I forgot to. Nope, I did!

Quoted 5 lines
Quoted 1 line

http://www.ussg.iu.edu/hypermail/linux/kernel/0707.0/1804.html

I wonder if Ingo had his reasons for keeping it.. They're may have been a benefit to doing a BUG_ON at one point .. I don't know ..

I don't know. But since we now know at least two people got burned by this BUG_ON being there (you and me). Maybe this was added before panic did a dump_stack. Which I have no idea why the mainline doesn't dump_stack on panic.

Hmm, I think I'll send a patch to see what people say ;-)

-- Steve