diff options
author | Gleb Smirnoff <glebius@FreeBSD.org> | 2020-01-23 16:36:58 +0000 |
---|---|---|
committer | Gleb Smirnoff <glebius@FreeBSD.org> | 2020-01-23 16:36:58 +0000 |
commit | 976d7cecd5213021cd0b730b113d3fcd107c13ab (patch) | |
tree | 45e8bd65ad1d36ce672083b96961a4370f72cd53 /sys | |
parent | 1bfca40c5715041c14c937c20050a7ef66511f4e (diff) | |
download | src-976d7cecd5213021cd0b730b113d3fcd107c13ab.tar.gz src-976d7cecd5213021cd0b730b113d3fcd107c13ab.zip |
With MSI interrupts bge(4) just schedules taskqueue. Enter the network
epoch in the taskqueue handler.
Reported by: kib
Notes
Notes:
svn path=/head/; revision=357051
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/bge/if_bge.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/sys/dev/bge/if_bge.c b/sys/dev/bge/if_bge.c index 6199478c4b28..fab4c1bb4bb2 100644 --- a/sys/dev/bge/if_bge.c +++ b/sys/dev/bge/if_bge.c @@ -4646,6 +4646,7 @@ bge_msi_intr(void *arg) static void bge_intr_task(void *arg, int pending) { + struct epoch_tracker et; struct bge_softc *sc; if_t ifp; uint32_t status, status_tag; @@ -4688,7 +4689,9 @@ bge_intr_task(void *arg, int pending) sc->bge_rx_saved_considx != rx_prod) { /* Check RX return ring producer/consumer. */ BGE_UNLOCK(sc); + NET_EPOCH_ENTER(et); bge_rxeof(sc, rx_prod, 0); + NET_EPOCH_EXIT(et); BGE_LOCK(sc); } if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { |