Index: sparc/intr.c =================================================================== RCS file: /cvsroot/src/sys/arch/sparc/sparc/intr.c,v retrieving revision 1.108 diff -p -r1.108 intr.c *** sparc/intr.c 5 Jan 2010 21:38:50 -0000 1.108 --- sparc/intr.c 12 Jan 2011 12:01:30 -0000 *************** strayintr(struct clockframe *fp) *** 133,138 **** --- 133,151 ---- char bits[64]; int timesince; + #if defined(MULTIPROCESSOR) + /* + * XXX + * + * Don't whine about zs interrupts on MP. We sometimes get + * stray interrupts when polled kernel output on cpu>0 eats + * the interrupt and cpu0 sees it. + */ + #define ZS_INTR_IPL 12 + if (fp->ipl == ZS_INTR_IPL) + return; + #endif + snprintb(bits, sizeof(bits), PSR_BITS, fp->psr); printf("stray interrupt cpu%d ipl 0x%x pc=0x%x npc=0x%x psr=%s\n", cpu_number(), fp->ipl, fp->pc, fp->npc, bits); *************** xcallintr(void *v) *** 372,377 **** --- 385,391 ---- /* Tally */ lev13_evcnt.ev_count++; + kpreempt_disable(); /* notyet - cpuinfo.msg.received = 1; */ switch (cpuinfo.msg.tag) { case XPMSG_FUNC: *************** xcallintr(void *v) *** 385,390 **** --- 399,405 ---- } cpuinfo.msg.tag = 0; cpuinfo.msg.complete = 1; + kpreempt_enable(); } #endif /* MULTIPROCESSOR */ #endif /* SUN4M || SUN4D */