illegal instructions / irqs disabled warning

Kumar Gala galak at kernel.crashing.org
Fri Dec 16 01:04:58 EST 2005


On Dec 15, 2005, at 3:44 AM, Johannes Berg wrote:

> Paul Mackerras wrote:
>>> So I run across this warning:
>>> [ 2724.595549] Debug: sleeping function called from invalid  
>>> context at
>>> arch/ppc/kernel/traps.c:528
>>> [ 2724.595563] in_atomic():0, irqs_disabled():1
>>
>> Hmmm.  What kernel version is this?  I assume you are using ARCH=ppc,
>> is that right?
>
> 2.6.15-rc5, IIRC (might have been rc1, I currently need to use both
> kernels depending on what I want to do), and yes, ARCH=ppc.
>
>> No, it doesn't mean that.  However, if the page isn't in memory,
>> __copy_from_user_inatomic won't try to bring it in if it has been
>> called from an atomic context (i.e. preempt or interrupts disabled).
>
> Good, thanks. So essentially __copy_from_user has the same logic  
> (since it
> just calls __copy_from_user_inatomic) but calls might_sleep() to  
> show the
> developer what he's doing wrong although it won't actually hurt.  
> Right?
>
>> The real question is why we have interrupts disabled in the illegal
>> instruction handler.  There was a reason why I wanted interrupts
>> disabled on entry to program_check_exception which I don't recall
>> clearly at the moment, but I think program_check_exception should be
>> doing a local_irq_enable() at some point (and it also shouldn't be
>> trying to emulate instructions for the kernel).
>
> I don't have the code here right now but I did have a userspace  
> program
> that it tried to emulate (so I'm not sure if it would try to emulate
> kernel instructions). And it wouldn't emulate that instruction, my  
> program
> died with SIGILL, but obviously it still needs to load it to see  
> what kind
> of instruction it was.

Out of interest, is there a reason you dont handle the emulation in  
user space?

- kumar



More information about the Linuxppc-dev mailing list