aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2020-01-23 16:36:58 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2020-01-23 16:36:58 +0000
commit976d7cecd5213021cd0b730b113d3fcd107c13ab (patch)
tree45e8bd65ad1d36ce672083b96961a4370f72cd53 /sys
parent1bfca40c5715041c14c937c20050a7ef66511f4e (diff)
downloadsrc-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.c3
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) {