Index: if_rge.c =================================================================== RCS file: /cvs/src/sys/dev/pci/if_rge.c,v diff -u -p -r1.35 if_rge.c --- if_rge.c 31 Aug 2024 16:23:09 -0000 1.35 +++ if_rge.c 30 Jan 2025 09:38:05 -0000 @@ -78,7 +78,7 @@ void rge_rx_list_init(struct rge_queues void rge_tx_list_init(struct rge_queues *); void rge_fill_rx_ring(struct rge_queues *); int rge_rxeof(struct rge_queues *); -int rge_txeof(struct rge_queues *); +void rge_txeof(void *); void rge_reset(struct rge_softc *); void rge_iff(struct rge_softc *); void rge_chipinit(struct rge_softc *); @@ -310,6 +310,9 @@ rge_attach(struct device *parent, struct ifmedia_set(&sc->sc_media, IFM_ETHER | IFM_AUTO); sc->sc_media.ifm_media = sc->sc_media.ifm_cur->ifm_media; + q->q_ifq = &ifp->if_snd; + task_set(&q->q_txeof, rge_txeof, q); + if_attach(ifp); ether_ifattach(ifp); @@ -364,8 +367,8 @@ rge_intr(void *arg) rv = 0; if (status & sc->rge_intrs) { + ifq_serialize(q->q_ifq, &q->q_txeof); rv |= rge_rxeof(q); - rv |= rge_txeof(q); if (status & RGE_ISR_SYSTEM_ERR) { KERNEL_LOCK(); @@ -389,7 +392,7 @@ rge_intr(void *arg) * masks. */ rge_rxeof(q); - rge_txeof(q); + ifq_serialize(q->q_ifq, &q->q_txeof); } else RGE_WRITE_4(sc, RGE_TIMERCNT, 1); } else if (rv) { @@ -1372,9 +1375,10 @@ rge_rxeof(struct rge_queues *q) return (1); } -int -rge_txeof(struct rge_queues *q) +void +rge_txeof(void *arg) { + struct rge_queues *q = arg; struct rge_softc *sc = q->q_sc; struct ifnet *ifp = &sc->sc_arpcom.ac_if; struct rge_txq *txq; @@ -1415,7 +1419,7 @@ rge_txeof(struct rge_queues *q) } if (free == 0) - return (0); + return; if (idx >= cons) { rge_tx_list_sync(sc, q, cons, idx - cons, @@ -1435,8 +1439,6 @@ rge_txeof(struct rge_queues *q) ifq_serialize(&ifp->if_snd, &sc->sc_task); else ifp->if_timer = 0; - - return (1); } void Index: if_rgereg.h =================================================================== RCS file: /cvs/src/sys/dev/pci/if_rgereg.h,v diff -u -p -r1.13 if_rgereg.h --- if_rgereg.h 21 Aug 2024 01:12:52 -0000 1.13 +++ if_rgereg.h 30 Jan 2025 09:38:06 -0000 @@ -355,6 +355,8 @@ struct rge_queues { pci_intr_handle_t q_ih; struct rge_tx q_tx; struct rge_rx q_rx; + struct task q_txeof; + struct ifqueue *q_ifq; }; /* Microcode version */