diff options
| author | Pyun YongHyeon <yongari@FreeBSD.org> | 2008-08-22 04:52:21 +0000 |
|---|---|---|
| committer | Pyun YongHyeon <yongari@FreeBSD.org> | 2008-08-22 04:52:21 +0000 |
| commit | 2be30c0d913b052dedef1b5ab42e5c3e28e48545 (patch) | |
| tree | 7478079016789ca7ac18b8761ad10f2761546762 /sys/dev/bfe/if_bfe.c | |
| parent | 5d5624c0804b134f772a61bc8dd432b82d8d67a2 (diff) | |
Notes
Diffstat (limited to 'sys/dev/bfe/if_bfe.c')
| -rw-r--r-- | sys/dev/bfe/if_bfe.c | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/sys/dev/bfe/if_bfe.c b/sys/dev/bfe/if_bfe.c index 3b54ea865cc1..26d92bc346ea 100644 --- a/sys/dev/bfe/if_bfe.c +++ b/sys/dev/bfe/if_bfe.c @@ -1373,26 +1373,25 @@ bfe_intr(void *xsc) { struct bfe_softc *sc = xsc; struct ifnet *ifp; - u_int32_t istat, imask, flag; + u_int32_t istat, flag; ifp = sc->bfe_ifp; BFE_LOCK(sc); istat = CSR_READ_4(sc, BFE_ISTAT); - imask = CSR_READ_4(sc, BFE_IMASK); /* * Defer unsolicited interrupts - This is necessary because setting the * chips interrupt mask register to 0 doesn't actually stop the * interrupts */ - istat &= imask; + istat &= BFE_IMASK_DEF; CSR_WRITE_4(sc, BFE_ISTAT, istat); CSR_READ_4(sc, BFE_ISTAT); /* not expecting this interrupt, disregard it */ - if (istat == 0) { + if (istat == 0 || (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) { BFE_UNLOCK(sc); return; } @@ -1435,8 +1434,7 @@ bfe_intr(void *xsc) bfe_txeof(sc); /* We have packets pending, fire them out */ - if (ifp->if_drv_flags & IFF_DRV_RUNNING && - !IFQ_DRV_IS_EMPTY(&ifp->if_snd)) + if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) bfe_start_locked(ifp); BFE_UNLOCK(sc); |
