avoid calling initscreenimage() in drawblankscreen() as the allocation in makescreenimage() uses waserror and requires to be called with a user context (up != nil). the concrete call nesting was: *interrupt* mouseclock() drawactive() drawblankscreen() initscreenimage() makescreenimage() waserror() *pagefault* due to up==nil fault386() panic("kernel fault: no user process...") drawblankscreen only needed to access the screenimage to get the color depth to calculate the number of palette colors to clear. there is no point in blanking when there is no screenimage in the firstplace, so i changed the initscreenimage() call into a test for screenimage being available or not and just return if it is not there. Reference: /n/sources/patch/applied/devdraw-initscreenimage-from-isr Date: Sun Mar 6 18:13:48 CET 2011 Signed-off-by: cinap_lenrek@gmx.de --- /sys/src/9/port/devdraw.c Sun Mar 6 17:59:45 2011 +++ /sys/src/9/port/devdraw.c Sun Mar 6 17:59:38 2011 @@ -2154,7 +2154,7 @@ return; if(!candlock()) return; - if(!initscreenimage()){ + if(screenimage == nil){ dunlock(); return; }