schedule() in interrupt

Bill Hawes (whawes@star.net)
Fri, 06 Jun 1997 12:12:48 -0400


Tore Olsen wrote:
> I recently patched this box to pre-3.0.31-2 in the hope of getting rid
> of some networking problems with the 3c59x (the transmitter access
> problem). I compiled in support for the HiSax module, as we just got
> two Teles 16.3 cards.
>
> I have experienced two crashes in as many days, which locked the
> machine completely. The only thing that still worked was
> (Ctrl|Shift)-ScrLock and the box had to be hard reset. The screen
> was filled with this message both times:
>
> Aiee: scheduling in interrupt 00123f75.

I've found one possible cause for the "schedule() in interrupt" Oops
reported here, and as it's in the isdn code it may well be the culprit.
The routine isdn_get_allcfg() in isdn_common.c is broken; it does a
cli() and then a copy_to_user(). (See lines 1147 and 1152.) If the
user buffer is paged out, this will certainly break the critical section
the program thinks it's in, and result in a call to schedule().

FWIW, drivers/char/serial.c is also broken; on line 1576 it calls
copy_from_user() after a cli().

I'll review the drivers code for other broken critical section problems.

-Bill