Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F139754092
main_bpf.diff
Public
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
zlei
Mon, Dec 15, 6:56 PM
2025-12-15 18:56:57 (UTC+0)
Size
43 KB
Referenced Files
None
Subscribers
None
main_bpf.diff
View Options
diff --git a/sys/arm/allwinner/if_awg.c b/sys/arm/allwinner/if_awg.c
index 98e879d22d3d..e4b15e890cea 100644
--- a/sys/arm/allwinner/if_awg.c
+++ b/sys/arm/allwinner/if_awg.c
@@ -1877,6 +1877,7 @@ awg_reset(device_t dev)
static void
awg_tick(void *softc)
{
+ struct epoch_tracker et;
struct awg_softc *sc;
struct mii_data *mii;
if_t ifp;
@@ -1893,8 +1894,11 @@ awg_tick(void *softc)
link = sc->link;
mii_tick(mii);
- if (sc->link && !link)
+ if (sc->link && !link) {
+ NET_EPOCH_ENTER(et);
awg_start_locked(sc);
+ NET_EPOCH_EXIT(et);
+ }
callout_reset(&sc->stat_ch, hz, awg_tick, sc);
}
diff --git a/sys/arm/allwinner/if_emac.c b/sys/arm/allwinner/if_emac.c
index 1fa6691ade1a..06dbda4be96c 100644
--- a/sys/arm/allwinner/if_emac.c
+++ b/sys/arm/allwinner/if_emac.c
@@ -446,6 +446,7 @@ emac_rxeof(struct emac_softc *sc, int count)
static void
emac_watchdog(struct emac_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
EMAC_ASSERT_LOCKED(sc);
@@ -465,8 +466,11 @@ emac_watchdog(struct emac_softc *sc)
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
emac_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
emac_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
static void
diff --git a/sys/arm64/broadcom/genet/if_genet.c b/sys/arm64/broadcom/genet/if_genet.c
index 013573f1551b..cc40ce0d96fa 100644
--- a/sys/arm64/broadcom/genet/if_genet.c
+++ b/sys/arm64/broadcom/genet/if_genet.c
@@ -1644,6 +1644,7 @@ gen_ioctl(if_t ifp, u_long cmd, caddr_t data)
static void
gen_tick(void *softc)
{
+ struct epoch_tracker et;
struct gen_softc *sc;
struct mii_data *mii;
if_t ifp;
@@ -1660,8 +1661,11 @@ gen_tick(void *softc)
link = sc->link;
mii_tick(mii);
- if (sc->link && !link)
+ if (sc->link && !link) {
+ NET_EPOCH_ENTER(et);
gen_start_locked(sc);
+ NET_EPOCH_EXIT(et);
+ }
callout_reset(&sc->stat_ch, hz, gen_tick, sc);
}
diff --git a/sys/dev/ae/if_ae.c b/sys/dev/ae/if_ae.c
index 87de885701ae..b55bc9465785 100644
--- a/sys/dev/ae/if_ae.c
+++ b/sys/dev/ae/if_ae.c
@@ -251,7 +251,7 @@ ae_attach(device_t dev)
*/
mtx_init(&sc->mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK, MTX_DEF);
callout_init_mtx(&sc->tick_ch, &sc->mtx, 0);
- TASK_INIT(&sc->int_task, 0, ae_int_task, sc);
+ NET_TASK_INIT(&sc->int_task, 0, ae_int_task, sc);
TASK_INIT(&sc->link_task, 0, ae_link_task, sc);
pci_enable_busmaster(dev); /* Enable bus mastering. */
@@ -1754,6 +1754,11 @@ ae_int_task(void *arg, int pending)
if ((val & (AE_ISR_DMAR_TIMEOUT | AE_ISR_DMAW_TIMEOUT |
AE_ISR_PHY_LINKDOWN)) != 0) {
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
+ /*
+ * XXXZL This appears wrong to me, we already
+ * have watchdog for this. Is it safe to just
+ * return ?
+ */
ae_init_locked(sc);
AE_UNLOCK(sc);
return;
@@ -1950,6 +1955,7 @@ ae_rx_intr(ae_softc_t *sc)
static void
ae_watchdog(ae_softc_t *sc)
{
+ struct epoch_tracker et;
if_t ifp;
KASSERT(sc != NULL, ("[ae, %d]: sc is NULL!", __LINE__));
@@ -1967,8 +1973,11 @@ ae_watchdog(ae_softc_t *sc)
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
ae_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
ae_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
static void
diff --git a/sys/dev/age/if_age.c b/sys/dev/age/if_age.c
index 46d92ab11f53..357f19ef5f66 100644
--- a/sys/dev/age/if_age.c
+++ b/sys/dev/age/if_age.c
@@ -1756,6 +1756,7 @@ age_start_locked(if_t ifp)
static void
age_watchdog(struct age_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
AGE_LOCK_ASSERT(sc);
@@ -1774,16 +1775,22 @@ age_watchdog(struct age_softc *sc)
if (sc->age_cdata.age_tx_cnt == 0) {
if_printf(sc->age_ifp,
"watchdog timeout (missed Tx interrupts) -- recovering\n");
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
age_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
return;
}
if_printf(sc->age_ifp, "watchdog timeout\n");
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
age_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
age_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
static int
@@ -2107,6 +2114,7 @@ age_intr(void *arg)
static void
age_int_task(void *arg, int pending)
{
+ struct epoch_tracker et;
struct age_softc *sc;
if_t ifp;
struct cmb *cmb;
@@ -2138,9 +2146,12 @@ age_int_task(void *arg, int pending)
ifp = sc->age_ifp;
if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) != 0) {
- if ((status & INTR_CMB_RX) != 0)
+ if ((status & INTR_CMB_RX) != 0) {
+ NET_EPOCH_ENTER(et);
sc->age_morework = age_rxintr(sc, sc->age_rr_prod,
sc->age_process_limit);
+ NET_EPOCH_EXIT(et);
+ }
if ((status & INTR_CMB_TX) != 0)
age_txintr(sc, sc->age_tpd_cons);
if ((status & (INTR_DMA_RD_TO_RST | INTR_DMA_WR_TO_RST)) != 0) {
@@ -2153,8 +2164,11 @@ age_int_task(void *arg, int pending)
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
age_init_locked(sc);
}
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
age_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
if ((status & INTR_SMB) != 0)
age_stats_update(sc);
}
diff --git a/sys/dev/alc/if_alc.c b/sys/dev/alc/if_alc.c
index 7d47054414d6..2cbca9c88446 100644
--- a/sys/dev/alc/if_alc.c
+++ b/sys/dev/alc/if_alc.c
@@ -2991,6 +2991,7 @@ alc_start_tx(struct alc_softc *sc)
static void
alc_watchdog(struct alc_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
ALC_LOCK_ASSERT(sc);
@@ -3010,8 +3011,11 @@ alc_watchdog(struct alc_softc *sc)
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
alc_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
alc_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
static int
diff --git a/sys/dev/ale/if_ale.c b/sys/dev/ale/if_ale.c
index 0c84575d6754..4f5eb6a380e6 100644
--- a/sys/dev/ale/if_ale.c
+++ b/sys/dev/ale/if_ale.c
@@ -1897,6 +1897,7 @@ ale_start_locked(if_t ifp)
static void
ale_watchdog(struct ale_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
ALE_LOCK_ASSERT(sc);
@@ -1916,8 +1917,11 @@ ale_watchdog(struct ale_softc *sc)
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
ale_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
ale_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
static int
diff --git a/sys/dev/bce/if_bce.c b/sys/dev/bce/if_bce.c
index 6cf39e035ea6..4971c47d1766 100644
--- a/sys/dev/bce/if_bce.c
+++ b/sys/dev/bce/if_bce.c
@@ -8291,6 +8291,7 @@ bce_pulse(void *xsc)
static void
bce_tick(void *xsc)
{
+ struct epoch_tracker et;
struct bce_softc *sc = xsc;
struct mii_data *mii;
if_t ifp;
@@ -8350,7 +8351,9 @@ bce_tick(void *xsc)
if (!if_sendq_empty(ifp)) {
DBPRINT(sc, BCE_VERBOSE_MISC, "%s(): Found "
"pending TX traffic.\n", __FUNCTION__);
+ NET_EPOCH_ENTER(et);
bce_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
}
}
diff --git a/sys/dev/bfe/if_bfe.c b/sys/dev/bfe/if_bfe.c
index 2fb6938fbdc5..cc50c8488737 100644
--- a/sys/dev/bfe/if_bfe.c
+++ b/sys/dev/bfe/if_bfe.c
@@ -593,6 +593,7 @@ bfe_suspend(device_t dev)
static int
bfe_resume(device_t dev)
{
+ struct epoch_tracker et;
struct bfe_softc *sc;
if_t ifp;
@@ -603,8 +604,11 @@ bfe_resume(device_t dev)
if (if_getflags(ifp) & IFF_UP) {
bfe_init_locked(sc);
if (if_getdrvflags(ifp) & IFF_DRV_RUNNING &&
- !if_sendq_empty(ifp))
+ !if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
bfe_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
BFE_UNLOCK(sc);
@@ -1799,6 +1803,7 @@ bfe_ioctl(if_t ifp, u_long command, caddr_t data)
static void
bfe_watchdog(struct bfe_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
BFE_LOCK_ASSERT(sc);
@@ -1814,8 +1819,11 @@ bfe_watchdog(struct bfe_softc *sc)
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
bfe_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
bfe_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
static void
diff --git a/sys/dev/bge/if_bge.c b/sys/dev/bge/if_bge.c
index cf3084f9b768..687277f46d4c 100644
--- a/sys/dev/bge/if_bge.c
+++ b/sys/dev/bge/if_bge.c
@@ -6076,6 +6076,7 @@ bge_suspend(device_t dev)
static int
bge_resume(device_t dev)
{
+ struct epoch_tracker et;
struct bge_softc *sc;
if_t ifp;
@@ -6084,8 +6085,11 @@ bge_resume(device_t dev)
ifp = sc->bge_ifp;
if (if_getflags(ifp) & IFF_UP) {
bge_init_locked(sc);
- if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
+ if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) {
+ NET_EPOCH_ENTER(et);
bge_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
BGE_UNLOCK(sc);
diff --git a/sys/dev/bxe/bxe.c b/sys/dev/bxe/bxe.c
index 3e7120a42a90..6f4fcc2287b5 100644
--- a/sys/dev/bxe/bxe.c
+++ b/sys/dev/bxe/bxe.c
@@ -5731,12 +5731,15 @@ static void
bxe_tx_mq_start_deferred(void *arg,
int pending)
{
+ struct epoch_tracker et;
struct bxe_fastpath *fp = (struct bxe_fastpath *)arg;
struct bxe_softc *sc = fp->sc;
if_t ifp = sc->ifp;
BXE_FP_TX_LOCK(fp);
+ NET_EPOCH_ENTER(et);
bxe_tx_mq_start_locked(sc, ifp, fp, NULL);
+ NET_EPOCH_EXIT(et);
BXE_FP_TX_UNLOCK(fp);
}
diff --git a/sys/dev/cas/if_cas.c b/sys/dev/cas/if_cas.c
index fed2c3a3a051..54e2fa32add5 100644
--- a/sys/dev/cas/if_cas.c
+++ b/sys/dev/cas/if_cas.c
@@ -202,7 +202,7 @@ cas_attach(struct cas_softc *sc)
callout_init_mtx(&sc->sc_rx_ch, &sc->sc_mtx, 0);
/* Create local taskq. */
NET_TASK_INIT(&sc->sc_intr_task, 0, cas_intr_task, sc);
- TASK_INIT(&sc->sc_tx_task, 1, cas_tx_task, ifp);
+ NET_TASK_INIT(&sc->sc_tx_task, 1, cas_tx_task, ifp);
sc->sc_tq = taskqueue_create_fast("cas_taskq", M_WAITOK,
taskqueue_thread_enqueue, &sc->sc_tq);
error = taskqueue_start_threads(&sc->sc_tq, 1, PI_NET, "%s taskq",
diff --git a/sys/dev/cxgb/cxgb_sge.c b/sys/dev/cxgb/cxgb_sge.c
index 85e92b0e06ff..1f931bc29fa7 100644
--- a/sys/dev/cxgb/cxgb_sge.c
+++ b/sys/dev/cxgb/cxgb_sge.c
@@ -1605,6 +1605,7 @@ cxgb_debugnet_encap(struct sge_qset *qs, struct mbuf **m)
void
cxgb_tx_watchdog(void *arg)
{
+ struct epoch_tracker et;
struct sge_qset *qs = arg;
struct sge_txq *txq = &qs->txq[TXQ_ETH];
@@ -1617,7 +1618,9 @@ cxgb_tx_watchdog(void *arg)
qs->coalescing = 1;
if (TXQ_TRYLOCK(qs)) {
qs->qs_flags |= QS_FLUSHING;
+ NET_EPOCH_ENTER(et);
cxgb_start_locked(qs);
+ NET_EPOCH_EXIT(et);
qs->qs_flags &= ~QS_FLUSHING;
TXQ_UNLOCK(qs);
}
@@ -1629,6 +1632,7 @@ cxgb_tx_watchdog(void *arg)
static void
cxgb_tx_timeout(void *arg)
{
+ struct epoch_tracker et;
struct sge_qset *qs = arg;
struct sge_txq *txq = &qs->txq[TXQ_ETH];
@@ -1636,7 +1640,9 @@ cxgb_tx_timeout(void *arg)
qs->coalescing = 1;
if (TXQ_TRYLOCK(qs)) {
qs->qs_flags |= QS_TIMEOUT;
+ NET_EPOCH_ENTER(et);
cxgb_start_locked(qs);
+ NET_EPOCH_EXIT(et);
qs->qs_flags &= ~QS_TIMEOUT;
TXQ_UNLOCK(qs);
}
diff --git a/sys/dev/dc/if_dc.c b/sys/dev/dc/if_dc.c
index 5c1d7ff30976..fccce060d119 100644
--- a/sys/dev/dc/if_dc.c
+++ b/sys/dev/dc/if_dc.c
@@ -3078,6 +3078,7 @@ dc_txeof(struct dc_softc *sc)
static void
dc_tick(void *xsc)
{
+ struct epoch_tracker et;
struct dc_softc *sc;
struct mii_data *mii;
if_t ifp;
@@ -3142,8 +3143,11 @@ dc_tick(void *xsc)
* that time, packets will stay in the send queue, and once the
* link comes up, they will be flushed out to the wire.
*/
- if (sc->dc_link != 0 && !if_sendq_empty(ifp))
+ if (sc->dc_link != 0 && !if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
dc_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
if (sc->dc_flags & DC_21143_NWAY && !sc->dc_link)
callout_reset(&sc->dc_stat_ch, hz/10, dc_tick, sc);
@@ -3919,6 +3923,7 @@ dc_ioctl(if_t ifp, u_long command, caddr_t data)
static void
dc_watchdog(void *xsc)
{
+ struct epoch_tracker et;
struct dc_softc *sc = xsc;
if_t ifp;
@@ -3936,8 +3941,11 @@ dc_watchdog(void *xsc)
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
dc_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
dc_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
/*
diff --git a/sys/dev/dwc/if_dwc.c b/sys/dev/dwc/if_dwc.c
index 1b4b4be68747..bdc12142bb84 100644
--- a/sys/dev/dwc/if_dwc.c
+++ b/sys/dev/dwc/if_dwc.c
@@ -314,6 +314,7 @@ dwc_intr(void *arg)
static void
dwc_tick(void *arg)
{
+ struct epoch_tracker et;
struct dwc_softc *sc;
if_t ifp;
int link_was_up;
@@ -344,8 +345,11 @@ dwc_tick(void *arg)
/* Check the media status. */
link_was_up = sc->link_is_up;
mii_tick(sc->mii_softc);
- if (sc->link_is_up && !link_was_up)
+ if (sc->link_is_up && !link_was_up) {
+ NET_EPOCH_ENTER(et);
dwc_txstart_locked(sc);
+ NET_EPOCH_EXIT(et);
+ }
/* Schedule another check one second from now. */
callout_reset(&sc->dwc_callout, hz, dwc_tick, sc);
diff --git a/sys/dev/ena/ena.c b/sys/dev/ena/ena.c
index af158b5aea1d..b3c192c33dc9 100644
--- a/sys/dev/ena/ena.c
+++ b/sys/dev/ena/ena.c
@@ -709,7 +709,7 @@ ena_setup_tx_resources(struct ena_adapter *adapter, int qid)
}
/* Allocate taskqueues */
- TASK_INIT(&tx_ring->enqueue_task, 0, ena_deferred_mq_start, tx_ring);
+ NET_TASK_INIT(&tx_ring->enqueue_task, 0, ena_deferred_mq_start, tx_ring);
tx_ring->enqueue_tq = taskqueue_create_fast("ena_tx_enque", M_NOWAIT,
taskqueue_thread_enqueue, &tx_ring->enqueue_tq);
if (unlikely(tx_ring->enqueue_tq == NULL)) {
diff --git a/sys/dev/eqos/if_eqos.c b/sys/dev/eqos/if_eqos.c
index e07d6b48f723..88b9428188a2 100644
--- a/sys/dev/eqos/if_eqos.c
+++ b/sys/dev/eqos/if_eqos.c
@@ -817,6 +817,7 @@ eqos_intr_mtl(struct eqos_softc *sc, uint32_t mtl_status)
static void
eqos_tick(void *softc)
{
+ struct epoch_tracker et;
struct eqos_softc *sc = softc;
struct mii_data *mii = device_get_softc(sc->miibus);
bool link_status;
@@ -826,13 +827,18 @@ eqos_tick(void *softc)
if (sc->tx_watchdog > 0)
if (!--sc->tx_watchdog) {
device_printf(sc->dev, "watchdog timeout\n");
+ NET_EPOCH_ENTER(et);
eqos_txintr(sc);
+ NET_EPOCH_EXIT(et);
}
link_status = sc->link_up;
mii_tick(mii);
- if (sc->link_up && !link_status)
+ if (sc->link_up && !link_status) {
+ NET_EPOCH_ENTER(et);
eqos_start_locked(sc->ifp);
+ NET_EPOCH_EXIT(et);
+ }
callout_reset(&sc->callout, hz, eqos_tick, sc);
}
diff --git a/sys/dev/ffec/if_ffec.c b/sys/dev/ffec/if_ffec.c
index 17fab283fc81..fe294fcd5eb5 100644
--- a/sys/dev/ffec/if_ffec.c
+++ b/sys/dev/ffec/if_ffec.c
@@ -551,6 +551,7 @@ ffec_harvest_stats(struct ffec_softc *sc)
static void
ffec_tick(void *arg)
{
+ struct epoch_tracker et;
struct ffec_softc *sc;
if_t ifp;
int link_was_up;
@@ -571,7 +572,9 @@ ffec_tick(void *arg)
*/
if (sc->tx_watchdog_count > 0) {
if (--sc->tx_watchdog_count == 0) {
+ NET_EPOCH_ENTER(et);
ffec_txfinish_locked(sc);
+ NET_EPOCH_EXIT(et);
}
}
@@ -581,8 +584,11 @@ ffec_tick(void *arg)
/* Check the media status. */
link_was_up = sc->link_is_up;
mii_tick(sc->mii_softc);
- if (sc->link_is_up && !link_was_up)
+ if (sc->link_is_up && !link_was_up) {
+ NET_EPOCH_ENTER(et);
ffec_txstart_locked(sc);
+ NET_EPOCH_EXIT(et);
+ }
/* Schedule another check one second from now. */
callout_reset(&sc->ffec_callout, hz, ffec_tick, sc);
diff --git a/sys/dev/firewire/if_fwe.c b/sys/dev/firewire/if_fwe.c
index 44d3425799e9..73eb6e59d034 100644
--- a/sys/dev/firewire/if_fwe.c
+++ b/sys/dev/firewire/if_fwe.c
@@ -415,6 +415,7 @@ fwe_ioctl(if_t ifp, u_long cmd, caddr_t data)
static void
fwe_output_callback(struct fw_xfer *xfer)
{
+ struct epoch_tracker et;
struct fwe_softc *fwe;
if_t ifp;
int s;
@@ -435,8 +436,11 @@ fwe_output_callback(struct fw_xfer *xfer)
splx(s);
/* for queue full */
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
fwe_start(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
static void
diff --git a/sys/dev/gem/if_gem.c b/sys/dev/gem/if_gem.c
index 74504a950d31..07e3aa2d819f 100644
--- a/sys/dev/gem/if_gem.c
+++ b/sys/dev/gem/if_gem.c
@@ -1770,6 +1770,7 @@ gem_intr(void *v)
static int
gem_watchdog(struct gem_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp = sc->sc_ifp;
GEM_LOCK_ASSERT(sc, MA_OWNED);
@@ -1799,7 +1800,9 @@ gem_watchdog(struct gem_softc *sc)
/* Try to get more packets going. */
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
gem_init_locked(sc);
+ NET_EPOCH_ENTER(et);
gem_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
return (EJUSTRETURN);
}
diff --git a/sys/dev/gve/gve_tx.c b/sys/dev/gve/gve_tx.c
index 84e3a4c4eb9f..7a6833b555ef 100644
--- a/sys/dev/gve/gve_tx.c
+++ b/sys/dev/gve/gve_tx.c
@@ -259,7 +259,7 @@ gve_start_tx_ring(struct gve_priv *priv, int i)
taskqueue_start_threads(&com->cleanup_tq, 1, PI_NET, "%s txq %d",
device_get_nameunit(priv->dev), i);
- TASK_INIT(&tx->xmit_task, 0, gve_xmit_tq, tx);
+ NET_TASK_INIT(&tx->xmit_task, 0, gve_xmit_tq, tx);
tx->xmit_tq = taskqueue_create_fast("gve tx xmit",
M_WAITOK, taskqueue_thread_enqueue, &tx->xmit_tq);
taskqueue_start_threads(&tx->xmit_tq, 1, PI_NET, "%s txq %d xmit",
diff --git a/sys/dev/hyperv/netvsc/if_hn.c b/sys/dev/hyperv/netvsc/if_hn.c
index 2ae9e710978e..b7f70acafbfc 100644
--- a/sys/dev/hyperv/netvsc/if_hn.c
+++ b/sys/dev/hyperv/netvsc/if_hn.c
@@ -5186,16 +5186,16 @@ hn_tx_ring_create(struct hn_softc *sc, int id)
#ifdef HN_IFSTART_SUPPORT
if (hn_use_if_start) {
txr->hn_txeof = hn_start_txeof;
- TASK_INIT(&txr->hn_tx_task, 0, hn_start_taskfunc, txr);
- TASK_INIT(&txr->hn_txeof_task, 0, hn_start_txeof_taskfunc, txr);
+ NET_TASK_INIT(&txr->hn_tx_task, 0, hn_start_taskfunc, txr);
+ NET_TASK_INIT(&txr->hn_txeof_task, 0, hn_start_txeof_taskfunc, txr);
} else
#endif
{
int br_depth;
txr->hn_txeof = hn_xmit_txeof;
- TASK_INIT(&txr->hn_tx_task, 0, hn_xmit_taskfunc, txr);
- TASK_INIT(&txr->hn_txeof_task, 0, hn_xmit_txeof_taskfunc, txr);
+ NET_TASK_INIT(&txr->hn_tx_task, 0, hn_xmit_taskfunc, txr);
+ NET_TASK_INIT(&txr->hn_txeof_task, 0, hn_xmit_txeof_taskfunc, txr);
br_depth = hn_get_txswq_depth(txr);
txr->hn_mbuf_br = buf_ring_alloc(br_depth, M_DEVBUF,
diff --git a/sys/dev/iicbus/if_ic.c b/sys/dev/iicbus/if_ic.c
index caca35a3d22b..0c757377bdc4 100644
--- a/sys/dev/iicbus/if_ic.c
+++ b/sys/dev/iicbus/if_ic.c
@@ -267,6 +267,7 @@ icioctl(if_t ifp, u_long cmd, caddr_t data)
static int
icintr(device_t dev, int event, char *ptr)
{
+ struct epoch_tracker et;
struct ic_softc *sc = (struct ic_softc *)device_get_softc(dev);
struct mbuf *top;
int len;
@@ -299,18 +300,16 @@ icintr(device_t dev, int event, char *ptr)
len -= ICHDRLEN;
if_inc_counter(sc->ic_ifp, IFCOUNTER_IPACKETS, 1);
if_inc_counter(sc->ic_ifp, IFCOUNTER_IBYTES, len);
+ NET_EPOCH_ENTER(et);
BPF_TAP(sc->ic_ifp, sc->ic_ifbuf, len + ICHDRLEN);
top = m_devget(sc->ic_ifbuf + ICHDRLEN, len, 0, sc->ic_ifp, 0);
if (top) {
- struct epoch_tracker et;
-
mtx_unlock(&sc->ic_lock);
M_SETFIB(top, if_getfib(sc->ic_ifp));
- NET_EPOCH_ENTER(et);
netisr_dispatch(NETISR_IP, top);
- NET_EPOCH_EXIT(et);
mtx_lock(&sc->ic_lock);
}
+ NET_EPOCH_EXIT(et);
break;
err:
if_printf(sc->ic_ifp, "errors (%d)!\n", sc->ic_iferrs);
diff --git a/sys/dev/jme/if_jme.c b/sys/dev/jme/if_jme.c
index d9982a2f031c..cc55fa074db5 100644
--- a/sys/dev/jme/if_jme.c
+++ b/sys/dev/jme/if_jme.c
@@ -634,7 +634,7 @@ jme_attach(device_t dev)
mtx_init(&sc->jme_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK,
MTX_DEF);
callout_init_mtx(&sc->jme_tick_ch, &sc->jme_mtx, 0);
- TASK_INIT(&sc->jme_int_task, 0, jme_int_task, sc);
+ NET_TASK_INIT(&sc->jme_int_task, 0, jme_int_task, sc);
TASK_INIT(&sc->jme_link_task, 0, jme_link_task, sc);
/*
@@ -1900,6 +1900,7 @@ jme_start_locked(if_t ifp)
static void
jme_watchdog(struct jme_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
JME_LOCK_ASSERT(sc);
@@ -1919,8 +1920,11 @@ jme_watchdog(struct jme_softc *sc)
if (sc->jme_cdata.jme_tx_cnt == 0) {
if_printf(sc->jme_ifp,
"watchdog timeout (missed Tx interrupts) -- recovering\n");
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
jme_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
return;
}
@@ -1928,8 +1932,11 @@ jme_watchdog(struct jme_softc *sc)
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
jme_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
jme_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
static int
diff --git a/sys/dev/le/am7990.c b/sys/dev/le/am7990.c
index 95184356f33b..e0b8d6e4f367 100644
--- a/sys/dev/le/am7990.c
+++ b/sys/dev/le/am7990.c
@@ -489,6 +489,7 @@ am7990_intr(void *arg)
static void
am7990_start_locked(struct lance_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp = sc->sc_ifp;
struct letmd tmd;
struct mbuf *m;
@@ -523,7 +524,9 @@ am7990_start_locked(struct lance_softc *sc)
* If BPF is listening on this interface, let it see the packet
* before we commit it to the wire.
*/
+ NET_EPOCH_ENTER(et);
BPF_MTAP(ifp, m);
+ NET_EPOCH_EXIT(et);
/*
* Copy the mbuf chain into the transmit buffer.
diff --git a/sys/dev/le/am79900.c b/sys/dev/le/am79900.c
index c680fd5e2dc2..897bbc170f64 100644
--- a/sys/dev/le/am79900.c
+++ b/sys/dev/le/am79900.c
@@ -525,6 +525,7 @@ am79900_intr(void *arg)
static void
am79900_start_locked(struct lance_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp = sc->sc_ifp;
struct letmd tmd;
struct mbuf *m;
@@ -559,7 +560,9 @@ am79900_start_locked(struct lance_softc *sc)
* If BPF is listening on this interface, let it see the packet
* before we commit it to the wire.
*/
+ NET_EPOCH_ENTER(et);
BPF_MTAP(ifp, m);
+ NET_EPOCH_EXIT(et);
/*
* Copy the mbuf chain into the transmit buffer.
diff --git a/sys/dev/lge/if_lge.c b/sys/dev/lge/if_lge.c
index c5cfafc0bd22..77057d92c44f 100644
--- a/sys/dev/lge/if_lge.c
+++ b/sys/dev/lge/if_lge.c
@@ -987,6 +987,7 @@ lge_txeof(struct lge_softc *sc)
static void
lge_tick(void *xsc)
{
+ struct epoch_tracker et;
struct lge_softc *sc;
struct mii_data *mii;
if_t ifp;
@@ -1010,8 +1011,11 @@ lge_tick(void *xsc)
(IFM_SUBTYPE(mii->mii_media_active) == IFM_1000_SX||
IFM_SUBTYPE(mii->mii_media_active) == IFM_1000_T))
device_printf(sc->lge_dev, "gigabit link up\n");
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
lge_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
}
@@ -1443,6 +1447,7 @@ lge_ioctl(if_t ifp, u_long command, caddr_t data)
static void
lge_watchdog(struct lge_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
LGE_LOCK_ASSERT(sc);
@@ -1456,8 +1461,11 @@ lge_watchdog(struct lge_softc *sc)
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
lge_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
lge_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
/*
diff --git a/sys/dev/liquidio/base/lio_request_manager.c b/sys/dev/liquidio/base/lio_request_manager.c
index 95eac12ecf3b..9666fb139f64 100644
--- a/sys/dev/liquidio/base/lio_request_manager.c
+++ b/sys/dev/liquidio/base/lio_request_manager.c
@@ -527,6 +527,7 @@ lio_flush_iq(struct octeon_device *oct, struct lio_instr_queue *iq,
static void
__lio_check_db_timeout(struct octeon_device *oct, uint64_t iq_no)
{
+ struct epoch_tracker et;
struct lio_instr_queue *iq;
uint64_t next_time;
@@ -553,8 +554,11 @@ __lio_check_db_timeout(struct octeon_device *oct, uint64_t iq_no)
if (oct->props.ifp != NULL && iq->br != NULL) {
if (mtx_trylock(&iq->enq_lock)) {
- if (!drbr_empty(oct->props.ifp, iq->br))
+ if (!drbr_empty(oct->props.ifp, iq->br)) {
+ NET_EPOCH_ENTER(et);
lio_mq_start_locked(oct->props.ifp, iq);
+ NET_EPOCH_EXIT(et);
+ }
mtx_unlock(&iq->enq_lock);
}
diff --git a/sys/dev/msk/if_msk.c b/sys/dev/msk/if_msk.c
index 295eb2584b3e..3265e3ca1269 100644
--- a/sys/dev/msk/if_msk.c
+++ b/sys/dev/msk/if_msk.c
@@ -2931,6 +2931,7 @@ msk_start_locked(if_t ifp)
static void
msk_watchdog(struct msk_if_softc *sc_if)
{
+ struct epoch_tracker et;
if_t ifp;
MSK_IF_LOCK_ASSERT(sc_if);
@@ -2952,8 +2953,11 @@ msk_watchdog(struct msk_if_softc *sc_if)
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
msk_init_locked(sc_if);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
msk_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
static int
diff --git a/sys/dev/mxge/if_mxge.c b/sys/dev/mxge/if_mxge.c
index f36f41d53b40..267e1bdec0c8 100644
--- a/sys/dev/mxge/if_mxge.c
+++ b/sys/dev/mxge/if_mxge.c
@@ -3684,6 +3684,7 @@ mxge_read_reboot(mxge_softc_t *sc)
static void
mxge_watchdog_reset(mxge_softc_t *sc)
{
+ struct epoch_tracker et;
struct pci_devinfo *dinfo;
struct mxge_slice_state *ss;
int err, running, s, num_tx_slices = 1;
@@ -3759,11 +3760,13 @@ mxge_watchdog_reset(mxge_softc_t *sc)
if (!err)
err = mxge_open(sc);
/* release all TX locks */
+ NET_EPOCH_ENTER(et);
for (s = 0; s < num_tx_slices; s++) {
ss = &sc->ss[s];
mxge_start_locked(ss);
mtx_unlock(&ss->tx.mtx);
}
+ NET_EPOCH_EXIT(et);
}
sc->watchdog_resets++;
} else {
diff --git a/sys/dev/my/if_my.c b/sys/dev/my/if_my.c
index f6d407fedade..ca79aaf39d44 100644
--- a/sys/dev/my/if_my.c
+++ b/sys/dev/my/if_my.c
@@ -385,6 +385,7 @@ my_autoneg_timeout(void *arg)
static void
my_autoneg_mii(struct my_softc * sc, int flag, int verbose)
{
+ struct epoch_tracker et;
u_int16_t phy_sts = 0, media, advert, ability;
u_int16_t ability2 = 0;
if_t ifp;
@@ -540,7 +541,9 @@ my_autoneg_mii(struct my_softc * sc, int flag, int verbose)
if (sc->my_tx_pend) {
sc->my_autoneg = 0;
sc->my_tx_pend = 0;
+ NET_EPOCH_ENTER(et);
my_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
}
return;
}
@@ -1670,6 +1673,7 @@ my_ioctl(if_t ifp, u_long command, caddr_t data)
static void
my_watchdog(void *arg)
{
+ struct epoch_tracker et;
struct my_softc *sc;
if_t ifp;
@@ -1687,8 +1691,11 @@ my_watchdog(void *arg)
my_stop(sc);
my_reset(sc);
my_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
my_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
/*
diff --git a/sys/dev/neta/if_mvneta.c b/sys/dev/neta/if_mvneta.c
index 1c6247adb56b..c76c9c12b7e4 100644
--- a/sys/dev/neta/if_mvneta.c
+++ b/sys/dev/neta/if_mvneta.c
@@ -1850,6 +1850,7 @@ mvneta_qflush(if_t ifp)
STATIC void
mvneta_tx_task(void *arg, int pending)
{
+ struct epoch_tracker et;
struct mvneta_softc *sc;
struct mvneta_tx_ring *tx;
if_t ifp;
@@ -1860,7 +1861,9 @@ mvneta_tx_task(void *arg, int pending)
sc = if_getsoftc(ifp);
mvneta_tx_lockq(sc, tx->qidx);
+ NET_EPOCH_ENTER(et);
error = mvneta_xmit_locked(sc, tx->qidx);
+ NET_EPOCH_EXIT(et);
mvneta_tx_unlockq(sc, tx->qidx);
/* Try again */
diff --git a/sys/dev/netmap/if_ptnet.c b/sys/dev/netmap/if_ptnet.c
index 9c06f7fec530..63675f574314 100644
--- a/sys/dev/netmap/if_ptnet.c
+++ b/sys/dev/netmap/if_ptnet.c
@@ -679,7 +679,7 @@ ptnet_irqs_init(struct ptnet_softc *sc)
struct ptnet_queue *pq = sc->queues + i;
if (i < sc->num_tx_rings)
- TASK_INIT(&pq->task, 0, ptnet_tx_task, pq);
+ NET_TASK_INIT(&pq->task, 0, ptnet_tx_task, pq);
else
NET_TASK_INIT(&pq->task, 0, ptnet_rx_task, pq);
diff --git a/sys/dev/nfe/if_nfe.c b/sys/dev/nfe/if_nfe.c
index 265181ef7ad0..b593338cdc89 100644
--- a/sys/dev/nfe/if_nfe.c
+++ b/sys/dev/nfe/if_nfe.c
@@ -2634,6 +2634,7 @@ nfe_start_locked(if_t ifp)
static void
nfe_watchdog(if_t ifp)
{
+ struct epoch_tracker et;
struct nfe_softc *sc = if_getsoftc(ifp);
if (sc->nfe_watchdog_timer == 0 || --sc->nfe_watchdog_timer)
@@ -2644,8 +2645,11 @@ nfe_watchdog(if_t ifp)
if (sc->txq.queued == 0) {
if_printf(ifp, "watchdog timeout (missed Tx interrupts) "
"-- recovering\n");
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
nfe_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
return;
}
/* Check if we've lost start Tx command. */
diff --git a/sys/dev/nge/if_nge.c b/sys/dev/nge/if_nge.c
index b9cf77cc0428..08a37863f54b 100644
--- a/sys/dev/nge/if_nge.c
+++ b/sys/dev/nge/if_nge.c
@@ -2396,6 +2396,7 @@ nge_ioctl(if_t ifp, u_long command, caddr_t data)
static void
nge_watchdog(struct nge_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
NGE_LOCK_ASSERT(sc);
@@ -2410,8 +2411,11 @@ nge_watchdog(struct nge_softc *sc)
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
nge_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
nge_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
static int
diff --git a/sys/dev/ntb/if_ntb/if_ntb.c b/sys/dev/ntb/if_ntb/if_ntb.c
index 2334265cefa7..c4d16541b8a9 100644
--- a/sys/dev/ntb/if_ntb/if_ntb.c
+++ b/sys/dev/ntb/if_ntb/if_ntb.c
@@ -154,7 +154,7 @@ ntb_net_attach(device_t dev)
sc->mtu = imin(sc->mtu, ntb_transport_max_size(q->qp));
mtx_init(&q->tx_lock, "ntb tx", NULL, MTX_DEF);
q->br = buf_ring_alloc(4096, M_DEVBUF, M_WAITOK, &q->tx_lock);
- TASK_INIT(&q->tx_task, 0, ntb_handle_tx, q);
+ NET_TASK_INIT(&q->tx_task, 0, ntb_handle_tx, q);
q->tx_tq = taskqueue_create_fast("ntb_txq", M_NOWAIT,
taskqueue_thread_enqueue, &q->tx_tq);
taskqueue_start_threads(&q->tx_tq, 1, PI_NET, "%s txq%d",
diff --git a/sys/dev/oce/oce_queue.c b/sys/dev/oce/oce_queue.c
index b6d882b7fc36..d48ba4dd9a1d 100644
--- a/sys/dev/oce/oce_queue.c
+++ b/sys/dev/oce/oce_queue.c
@@ -133,7 +133,7 @@ oce_queue_init_all(POCE_SOFTC sc)
if (rc)
goto error;
wq->queue_index = i;
- TASK_INIT(&wq->txtask, 1, oce_tx_task, wq);
+ NET_TASK_INIT(&wq->txtask, 1, oce_tx_task, wq);
}
for_all_rq_queues(sc, rq, i) {
diff --git a/sys/dev/qlxgb/qla_os.c b/sys/dev/qlxgb/qla_os.c
index 87e504a83c79..8b21f568bcc4 100644
--- a/sys/dev/qlxgb/qla_os.c
+++ b/sys/dev/qlxgb/qla_os.c
@@ -295,7 +295,7 @@ qla_pci_attach(device_t dev)
goto qla_pci_attach_err;
}
- TASK_INIT(&ha->tx_task, 0, qla_tx_done, ha);
+ NET_TASK_INIT(&ha->tx_task, 0, qla_tx_done, ha);
ha->tx_tq = taskqueue_create_fast("qla_txq", M_NOWAIT,
taskqueue_thread_enqueue, &ha->tx_tq);
taskqueue_start_threads(&ha->tx_tq, 1, PI_NET, "%s txq",
diff --git a/sys/dev/qlxge/qls_os.c b/sys/dev/qlxge/qls_os.c
index eca7006850e0..c8de2f64d816 100644
--- a/sys/dev/qlxge/qls_os.c
+++ b/sys/dev/qlxge/qls_os.c
@@ -438,7 +438,7 @@ qls_pci_attach(device_t dev)
ha->flags.qla_watchdog_active = 1;
ha->flags.qla_watchdog_pause = 1;
- TASK_INIT(&ha->tx_task, 0, qls_tx_done, ha);
+ NET_TASK_INIT(&ha->tx_task, 0, qls_tx_done, ha);
ha->tx_tq = taskqueue_create_fast("qla_txq", M_NOWAIT,
taskqueue_thread_enqueue, &ha->tx_tq);
taskqueue_start_threads(&ha->tx_tq, 1, PI_NET, "%s txq",
diff --git a/sys/dev/re/if_re.c b/sys/dev/re/if_re.c
index 50e7e1cad16c..b40c8b594e6b 100644
--- a/sys/dev/re/if_re.c
+++ b/sys/dev/re/if_re.c
@@ -3586,8 +3586,11 @@ re_watchdog(struct rl_softc *sc)
NET_EPOCH_EXIT(et);
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
re_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
re_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
/*
diff --git a/sys/dev/sbni/if_sbni.c b/sys/dev/sbni/if_sbni.c
index ffbce54a56f2..5d5571367efb 100644
--- a/sys/dev/sbni/if_sbni.c
+++ b/sys/dev/sbni/if_sbni.c
@@ -293,6 +293,7 @@ sbni_init(void *xsc)
static void
sbni_init_locked(struct sbni_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
ifp = sc->ifp;
@@ -311,7 +312,9 @@ sbni_init_locked(struct sbni_softc *sc)
if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE);
/* attempt to start output */
+ NET_EPOCH_ENTER(et);
sbni_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
}
static void
diff --git a/sys/dev/sfxge/sfxge_tx.c b/sys/dev/sfxge/sfxge_tx.c
index dcc3dd4cd100..eadcce61eff4 100644
--- a/sys/dev/sfxge/sfxge_tx.c
+++ b/sys/dev/sfxge/sfxge_tx.c
@@ -1430,6 +1430,7 @@ sfxge_tx_queue_tso(struct sfxge_txq *txq, struct mbuf *mbuf,
static void
sfxge_tx_qunblock(struct sfxge_txq *txq)
{
+ struct epoch_tracker et;
struct sfxge_softc *sc;
struct sfxge_evq *evq __diagused;
@@ -1454,7 +1455,9 @@ sfxge_tx_qunblock(struct sfxge_txq *txq)
}
}
+ NET_EPOCH_ENTER(et);
sfxge_tx_qdpl_service(txq);
+ NET_EPOCH_EXIT(et);
/* note: lock has been dropped */
}
diff --git a/sys/dev/sge/if_sge.c b/sys/dev/sge/if_sge.c
index 80ec0c435ead..b18ac8ccddaa 100644
--- a/sys/dev/sge/if_sge.c
+++ b/sys/dev/sge/if_sge.c
@@ -1290,6 +1290,7 @@ sge_txeof(struct sge_softc *sc)
static void
sge_tick(void *arg)
{
+ struct epoch_tracker et;
struct sge_softc *sc;
struct mii_data *mii;
if_t ifp;
@@ -1303,8 +1304,11 @@ sge_tick(void *arg)
if ((sc->sge_flags & SGE_FLAG_LINK) == 0) {
sge_miibus_statchg(sc->sge_dev);
if ((sc->sge_flags & SGE_FLAG_LINK) != 0 &&
- !if_sendq_empty(ifp))
+ !if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
sge_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
/*
* Reclaim transmitted frames here as we do not request
@@ -1836,6 +1840,7 @@ sge_ioctl(if_t ifp, u_long command, caddr_t data)
static void
sge_watchdog(struct sge_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
SGE_LOCK_ASSERT(sc);
@@ -1857,8 +1862,11 @@ sge_watchdog(struct sge_softc *sc)
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
sge_init_locked(sc);
- if (!if_sendq_empty(sc->sge_ifp))
+ if (!if_sendq_empty(sc->sge_ifp)) {
+ NET_EPOCH_ENTER(et);
sge_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
/*
diff --git a/sys/dev/sis/if_sis.c b/sys/dev/sis/if_sis.c
index d00cf0a8128c..ba382c3149ec 100644
--- a/sys/dev/sis/if_sis.c
+++ b/sys/dev/sis/if_sis.c
@@ -2190,6 +2190,7 @@ sis_ioctl(if_t ifp, u_long command, caddr_t data)
static void
sis_watchdog(struct sis_softc *sc)
{
+ struct epoch_tracker et;
SIS_LOCK_ASSERT(sc);
@@ -2202,8 +2203,11 @@ sis_watchdog(struct sis_softc *sc)
if_setdrvflagbits(sc->sis_ifp, 0, IFF_DRV_RUNNING);
sis_initl(sc);
- if (!if_sendq_empty(sc->sis_ifp))
+ if (!if_sendq_empty(sc->sis_ifp)) {
+ NET_EPOCH_ENTER(et);
sis_startl(sc->sis_ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
/*
diff --git a/sys/dev/smc/if_smc.c b/sys/dev/smc/if_smc.c
index cc05cfd45f67..ef2f4a764872 100644
--- a/sys/dev/smc/if_smc.c
+++ b/sys/dev/smc/if_smc.c
@@ -390,7 +390,7 @@ smc_attach(device_t dev)
/* Set up taskqueue */
TASK_INIT(&sc->smc_intr, SMC_INTR_PRIORITY, smc_task_intr, ifp);
NET_TASK_INIT(&sc->smc_rx, SMC_RX_PRIORITY, smc_task_rx, ifp);
- TASK_INIT(&sc->smc_tx, SMC_TX_PRIORITY, smc_task_tx, ifp);
+ NET_TASK_INIT(&sc->smc_tx, SMC_TX_PRIORITY, smc_task_tx, ifp);
sc->smc_tq = taskqueue_create_fast("smc_taskq", M_NOWAIT,
taskqueue_thread_enqueue, &sc->smc_tq);
taskqueue_start_threads(&sc->smc_tq, 1, PI_NET, "%s taskq",
diff --git a/sys/dev/ste/if_ste.c b/sys/dev/ste/if_ste.c
index bf8f6fafec11..d096aac70097 100644
--- a/sys/dev/ste/if_ste.c
+++ b/sys/dev/ste/if_ste.c
@@ -1944,6 +1944,7 @@ ste_start_locked(if_t ifp)
static void
ste_watchdog(struct ste_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
ifp = sc->ste_ifp;
@@ -1961,8 +1962,11 @@ ste_watchdog(struct ste_softc *sc)
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
ste_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
ste_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
static int
diff --git a/sys/dev/stge/if_stge.c b/sys/dev/stge/if_stge.c
index a9a30332358c..e9f6125694d7 100644
--- a/sys/dev/stge/if_stge.c
+++ b/sys/dev/stge/if_stge.c
@@ -1216,6 +1216,7 @@ stge_start_locked(if_t ifp)
static void
stge_watchdog(struct stge_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
STGE_LOCK_ASSERT(sc);
@@ -1228,8 +1229,11 @@ stge_watchdog(struct stge_softc *sc)
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
stge_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
stge_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
/*
diff --git a/sys/dev/tsec/if_tsec.c b/sys/dev/tsec/if_tsec.c
index 80e42116ed9f..f261981e85f1 100644
--- a/sys/dev/tsec/if_tsec.c
+++ b/sys/dev/tsec/if_tsec.c
@@ -1242,6 +1242,7 @@ tsec_stop(struct tsec_softc *sc)
static void
tsec_tick(void *arg)
{
+ struct epoch_tracker et;
struct tsec_softc *sc = arg;
if_t ifp;
int link;
@@ -1256,8 +1257,11 @@ tsec_tick(void *arg)
mii_tick(sc->tsec_mii);
if (link == 0 && sc->tsec_link == 1 &&
- (!if_sendq_empty(ifp)))
+ (!if_sendq_empty(ifp))) {
+ NET_EPOCH_ENTER(et);
tsec_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
/* Schedule another timeout one second from now. */
callout_reset(&sc->tsec_callout, hz, tsec_tick, sc);
diff --git a/sys/dev/virtio/network/if_vtnet.c b/sys/dev/virtio/network/if_vtnet.c
index d9daa5bfd70a..21c7ba122845 100644
--- a/sys/dev/virtio/network/if_vtnet.c
+++ b/sys/dev/virtio/network/if_vtnet.c
@@ -884,9 +884,9 @@ vtnet_init_txq(struct vtnet_softc *sc, int id)
if (txq->vtntx_br == NULL)
return (ENOMEM);
- TASK_INIT(&txq->vtntx_defrtask, 0, vtnet_txq_tq_deferred, txq);
+ NET_TASK_INIT(&txq->vtntx_defrtask, 0, vtnet_txq_tq_deferred, txq);
}
- TASK_INIT(&txq->vtntx_intrtask, 0, vtnet_txq_tq_intr, txq);
+ NET_TASK_INIT(&txq->vtntx_intrtask, 0, vtnet_txq_tq_intr, txq);
txq->vtntx_tq = taskqueue_create(txq->vtntx_name, M_NOWAIT,
taskqueue_thread_enqueue, &txq->vtntx_tq);
if (txq->vtntx_tq == NULL)
diff --git a/sys/dev/vnic/nicvf_queues.c b/sys/dev/vnic/nicvf_queues.c
index 45d6b54b18ed..7ff73640dc59 100644
--- a/sys/dev/vnic/nicvf_queues.c
+++ b/sys/dev/vnic/nicvf_queues.c
@@ -1126,7 +1126,7 @@ nicvf_init_snd_queue(struct nicvf *nic, struct snd_queue *sq, int q_len,
NICVF_TX_UNLOCK(sq);
/* Allocate taskqueue */
- TASK_INIT(&sq->snd_task, 0, nicvf_snd_task, sq);
+ NET_TASK_INIT(&sq->snd_task, 0, nicvf_snd_task, sq);
sq->snd_taskq = taskqueue_create_fast("nicvf_snd_taskq", M_WAITOK,
taskqueue_thread_enqueue, &sq->snd_taskq);
taskqueue_start_threads(&sq->snd_taskq, 1, PI_NET, "%s: snd_taskq(%d)",
diff --git a/sys/dev/vr/if_vr.c b/sys/dev/vr/if_vr.c
index 284628365c83..64767cd575ec 100644
--- a/sys/dev/vr/if_vr.c
+++ b/sys/dev/vr/if_vr.c
@@ -2301,6 +2301,7 @@ vr_ioctl(if_t ifp, u_long command, caddr_t data)
static void
vr_watchdog(struct vr_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
VR_LOCK_ASSERT(sc);
@@ -2332,8 +2333,11 @@ vr_watchdog(struct vr_softc *sc)
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
vr_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
vr_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
+ }
}
static void
diff --git a/sys/dev/vte/if_vte.c b/sys/dev/vte/if_vte.c
index f32053c36cee..a243cded44ab 100644
--- a/sys/dev/vte/if_vte.c
+++ b/sys/dev/vte/if_vte.c
@@ -1152,6 +1152,7 @@ vte_start_locked(struct vte_softc *sc)
static void
vte_watchdog(struct vte_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp;
VTE_LOCK_ASSERT(sc);
@@ -1164,8 +1165,11 @@ vte_watchdog(struct vte_softc *sc)
if_inc_counter(ifp, IFCOUNTER_OERRORS, 1);
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
vte_init_locked(sc);
- if (!if_sendq_empty(ifp))
+ if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
vte_start_locked(sc);
+ NET_EPOCH_EXIT(et);
+ }
}
static int
diff --git a/sys/dev/xen/netfront/netfront.c b/sys/dev/xen/netfront/netfront.c
index 3bc3679eb0db..e09a5cb196f3 100644
--- a/sys/dev/xen/netfront/netfront.c
+++ b/sys/dev/xen/netfront/netfront.c
@@ -949,7 +949,7 @@ setup_txqs(device_t dev, struct netfront_info *info,
txq->br = buf_ring_alloc(NET_TX_RING_SIZE, M_DEVBUF,
M_WAITOK, &txq->lock);
- TASK_INIT(&txq->defrtask, 0, xn_txq_tq_deferred, txq);
+ NET_TASK_INIT(&txq->defrtask, 0, xn_txq_tq_deferred, txq);
txq->tq = taskqueue_create(txq->name, M_WAITOK,
taskqueue_thread_enqueue, &txq->tq);
@@ -1776,6 +1776,7 @@ xn_assemble_tx_request(struct netfront_txq *txq, struct mbuf *m_head)
static void
xn_ifinit_locked(struct netfront_info *np)
{
+ struct epoch_tracker et;
if_t ifp;
int i;
struct netfront_rxq *rxq;
@@ -1794,8 +1795,11 @@ xn_ifinit_locked(struct netfront_info *np)
XN_RX_LOCK(rxq);
xn_alloc_rx_buffers(rxq);
rxq->ring.sring->rsp_event = rxq->ring.rsp_cons + 1;
- if (RING_HAS_UNCONSUMED_RESPONSES(&rxq->ring))
+ if (RING_HAS_UNCONSUMED_RESPONSES(&rxq->ring)) {
+ NET_EPOCH_ENTER(et);
xn_rxeof(rxq);
+ NET_EPOCH_EXIT(et);
+ }
XN_RX_UNLOCK(rxq);
}
@@ -2047,10 +2051,12 @@ xn_connect(struct netfront_info *np)
static void
xn_kick_rings(struct netfront_info *np)
{
+ struct epoch_tracker et;
struct netfront_rxq *rxq;
struct netfront_txq *txq;
int i;
+ NET_EPOCH_ENTER(et);
for (i = 0; i < np->num_queues; i++) {
txq = &np->txq[i];
rxq = &np->rxq[i];
@@ -2062,6 +2068,7 @@ xn_kick_rings(struct netfront_info *np)
xn_alloc_rx_buffers(rxq);
XN_RX_UNLOCK(rxq);
}
+ NET_EPOCH_EXIT(et);
}
static void
diff --git a/sys/dev/xilinx/axidma.c b/sys/dev/xilinx/axidma.c
index 29757a335dee..001f2a9df6c8 100644
--- a/sys/dev/xilinx/axidma.c
+++ b/sys/dev/xilinx/axidma.c
@@ -172,7 +172,7 @@ axidma_setup_cb(device_t dev, int chan_id, void (*cb)(void *), void *arg)
return (EEXIST);
error = bus_setup_intr(dev, sc->res[chan_id + 1],
- INTR_TYPE_MISC | INTR_MPSAFE, NULL, cb, arg,
+ INTR_TYPE_NET | INTR_MPSAFE, NULL, cb, arg,
&sc->ih[chan_id]);
if (error)
device_printf(dev, "Unable to alloc interrupt resource.\n");
diff --git a/sys/dev/xilinx/if_xae.c b/sys/dev/xilinx/if_xae.c
index 7880f93c48ee..061089f4850f 100644
--- a/sys/dev/xilinx/if_xae.c
+++ b/sys/dev/xilinx/if_xae.c
@@ -621,6 +621,7 @@ xae_harvest_stats(struct xae_softc *sc)
static void
xae_tick(void *arg)
{
+ struct epoch_tracker et;
struct xae_softc *sc;
if_t ifp;
int link_was_up;
@@ -640,8 +641,11 @@ xae_tick(void *arg)
/* Check the media status. */
link_was_up = sc->link_is_up;
mii_tick(sc->mii_softc);
- if (sc->link_is_up && !link_was_up)
+ if (sc->link_is_up && !link_was_up) {
+ NET_EPOCH_ENTER(et);
xae_txstart_locked(sc);
+ NET_EPOCH_EXIT(et);
+ }
/* Schedule another check one second from now. */
callout_reset(&sc->xae_callout, hz, xae_tick, sc);
diff --git a/sys/dev/xl/if_xl.c b/sys/dev/xl/if_xl.c
index 0d1e05833f1e..ab716a6f4a68 100644
--- a/sys/dev/xl/if_xl.c
+++ b/sys/dev/xl/if_xl.c
@@ -3081,6 +3081,7 @@ xl_ioctl(if_t ifp, u_long command, caddr_t data)
static int
xl_watchdog(struct xl_softc *sc)
{
+ struct epoch_tracker et;
if_t ifp = sc->xl_ifp;
u_int16_t status = 0;
int misintr;
@@ -3121,10 +3122,12 @@ xl_watchdog(struct xl_softc *sc)
xl_init_locked(sc);
if (!if_sendq_empty(ifp)) {
+ NET_EPOCH_ENTER(et);
if (sc->xl_type == XL_TYPE_905B)
xl_start_90xB_locked(ifp);
else
xl_start_locked(ifp);
+ NET_EPOCH_EXIT(et);
}
return (EJUSTRETURN);
diff --git a/sys/netgraph/ng_iface.c b/sys/netgraph/ng_iface.c
index fbe89e13474b..a8c9a8debbc6 100644
--- a/sys/netgraph/ng_iface.c
+++ b/sys/netgraph/ng_iface.c
@@ -701,6 +701,7 @@ ng_iface_rcvdata(hook_p hook, item_p item)
/* Note receiving interface */
m->m_pkthdr.rcvif = ifp;
+ NET_EPOCH_ENTER(et);
/* Berkeley packet filter */
ng_iface_bpftap(ifp, m, iffam->family);
@@ -717,13 +718,13 @@ ng_iface_rcvdata(hook_p hook, item_p item)
break;
#endif
default:
+ NET_EPOCH_EXIT(et);
m_freem(m);
return (EAFNOSUPPORT);
}
random_harvest_queue(m, sizeof(*m), RANDOM_NET_NG);
M_SETFIB(m, ifp->if_fib);
CURVNET_SET(ifp->if_vnet);
- NET_EPOCH_ENTER(et);
netisr_dispatch(isr, m);
NET_EPOCH_EXIT(et);
CURVNET_RESTORE();
File Metadata
Details
Attached
Mime Type
text/x-diff
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27019302
Default Alt Text
main_bpf.diff (43 KB)
Attached To
Mode
No data available.
Event Timeline
Log In to Comment