> Is one interrupt being dispatched to two cpus, I wonder? The answer appears to be yes. I bracketed rtl8169interrupt() with these lines:
static void rtl8169interrupt(Ureg*, void* arg) { ... static Ref twice; if(incref(&twice) != 1) iprint("cpu%d: I see everything twice!\n", m->machno); ... decref(&twice); } The result on rebooting was: cpu0: I see everything twice! cpu1: I see everything twice! cpu0: I see everything twice! cpu0: I see everything twice! ... many times over. As a side effect this stops the kernel from crashing, because while one cpu is doing its iprint, the other can get on with its interrupt routine safely.