i wasn't clear enough what i meant by `interrupt handler'. i didn't mean the device-specific function, but its caller. in pc/trap.c you see if(up && !clockintr) preempted(); and on other platforms (perhaps not enough) there are calls to preempted() in the interrupt handler(s) that despatch the device-specific ones. preempted calls sched, which can switch to another process before returning.
--- Begin Message ---> that's only because the clock interrupt handler directly or indirectly (eg, > via sched) calls spllo, and other trap or interrupt handlers could do that.wouldn't that be fatal with shared 8259 interrupts? - erik
--- End Message ---