illegal instructions / irqs disabled warning

Paul Mackerras paulus at samba.org
Thu Dec 15 09:07:26 EST 2005


Johannes Berg writes:

> 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?

> But here's the actual question:
> static inline unsigned long __copy_from_user(void *to,
>                 const void __user *from, unsigned long size)
> 
>         might_sleep();
>         return __copy_from_user_inatomic(to, from, size);
> 
> 
> Does that mean __copy_from_user_inatomic isn't actually valid to call in
> atomic context?

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).

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).

Paul.



More information about the Linuxppc-dev mailing list