==== //depot/user/benno/arm/sys/dev/sn/if_sn.c#8 - /home/suleiman/freebsd/p4/arm/sys/dev/sn/if_sn.c ==== --- /tmp/tmp.41525.0 Tue May 30 16:13:05 2006 +++ /home/suleiman/freebsd/p4/arm/sys/dev/sn/if_sn.c Tue May 30 16:12:30 2006 @@ -793,7 +793,7 @@ try_start: * Now pass control to snstart() to queue any additional packets */ ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; - snstart(ifp); + snstart_locked(ifp); /* * We've sent something, so we're active. Set a watchdog in case the @@ -837,6 +837,7 @@ sn_intr(void *arg) mask = CSR_READ_1(sc, INTR_MASK_REG_B); CSR_WRITE_1(sc, INTR_MASK_REG_B, 0x00); +again: /* * Get the set of interrupts which occurred and eliminate any which * are masked. @@ -844,6 +845,9 @@ sn_intr(void *arg) interrupts = CSR_READ_1(sc, INTR_STAT_REG_B); status = interrupts & mask; + if (status == 0) + goto out; + /* * Now, process each of the interrupt types. */ @@ -1001,6 +1005,7 @@ sn_intr(void *arg) snstop(sc); sninit_locked(sc); } + goto again; out: /*