Re: PowerPC: Sleeping function called from invalid context at emulate_instruction()

2 messages, 2 authors, 2006-02-23 · open the first message on its own page

Re: PowerPC: Sleeping function called from invalid context at emulate_instruction()

From: Kumar Gala <hidden>
Date: 2006-02-23 04:22:12

On Feb 22, 2006, at 2:29 PM, Michael Buesch wrote:
Hi,

On a powerPC 32bit, I got the following debugging assertion failure:

[  733.209827] Debug: sleeping function called from invalid context  
at arch/powerpc/kernel/traps.c:697
[  733.210682] in_atomic():0, irqs_disabled():1
[  733.211347] Call Trace:
[  733.211969] [D6023EB0] [C0007F84] show_stack+0x58/0x174  
(unreliable)
[  733.212765] [D6023EE0] [C0022C34] __might_sleep+0xbc/0xd0
[  733.213523] [D6023EF0] [C000D158] program_check_exception 
+0x1d8/0x4fc
[  733.214309] [D6023F40] [C000E744] ret_from_except_full+0x0/0x4c
[  733.215076] --- Exception: 700 at 0x102a7100
[  733.215785]     LR = 0xdb9ef04

It is caused by the line
if (get_user(instword, (u32 __user *)(regs->nip)))
in arch/powerpc/kernel/traps.c:emulate_instruction()

I am not sure, if this is an indication for a bug, or just false  
alarm.
In case of false alarm, the debugging message should be made quiet
somehow, though.
Paul,

Last time this was brought up we left it wondering why you had made  
program_check_exception() run with interrupts disabled.  Any further  
ideas on that one?

- kumar

Re: PowerPC: Sleeping function called from invalid context at emulate_instruction()

From: Paul Mackerras <hidden>
Date: 2006-02-23 22:57:18

Kumar Gala writes:
Last time this was brought up we left it wondering why you had made  
program_check_exception() run with interrupts disabled.  Any further  
ideas on that one?
I think it was so that if we are entering the kernel debugger, we do
so on the same cpu that the exception was generated on.  This should
fix it.

Paul.
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index 7509aa6..98660ae 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -814,6 +814,8 @@ void __kprobes program_check_exception(s
 		return;
 	}
 
+	local_irq_enable();
+
 	/* Try to emulate it if we should. */
 	if (reason & (REASON_ILLEGAL | REASON_PRIVILEGED)) {
 		switch (emulate_instruction(regs)) {
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help