From: Sepherosa Ziehau Date: Fri, 15 Mar 2013 05:57:21 +0000 (+0800) Subject: ifsq: Let ifaltq_subque know its related hardware TX queue's serializer X-Git-Tag: v3.4.0rc~95 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/bfefe4a6d6b571306fcc5dc75e8a9c476234dc4d ifsq: Let ifaltq_subque know its related hardware TX queue's serializer This avoids following operations on packet transmission hot path: - Dereferening device driver supplied serialize function pointers - Locating hardware TX queue's serializer Comparing to the lwkt_serialize functions, the above two operations are costful. Driver changes: - For device drivers which use the default ifnet serializer, no additional code will be needed, if_attach() will assign ifnet serializer to ifaltq_subque. - For device drivers which use independent serializers for main function, RX queues and TX queues, ifsq_set_hw_serialize() must be called to properly assign the hardware TX queue's serializer to ifaltq_subque. Drivers in this category are bce(4), emx(4), igb(4) and jme(4). --- diff --git a/sys/dev/netif/bce/if_bce.c b/sys/dev/netif/bce/if_bce.c index adecb25152..f8ec4f3829 100644 --- a/sys/dev/netif/bce/if_bce.c +++ b/sys/dev/netif/bce/if_bce.c @@ -1030,6 +1030,7 @@ bce_attach(device_t dev) ifsq_set_cpuid(ifsq, sc->bce_msix[i].msix_cpuid); ifsq_set_priv(ifsq, txr); + ifsq_set_hw_serialize(ifsq, &txr->tx_serialize); txr->ifsq = ifsq; ifsq_watchdog_init(&txr->tx_watchdog, ifsq, bce_watchdog); diff --git a/sys/dev/netif/emx/if_emx.c b/sys/dev/netif/emx/if_emx.c index 2eef8e6814..881393a0eb 100644 --- a/sys/dev/netif/emx/if_emx.c +++ b/sys/dev/netif/emx/if_emx.c @@ -1972,6 +1972,7 @@ emx_setup_ifp(struct emx_softc *sc) ifsq_set_cpuid(ifsq, rman_get_cpuid(sc->intr_res)); ifsq_set_priv(ifsq, tdata); + ifsq_set_hw_serialize(ifsq, &tdata->tx_serialize); tdata->ifsq = ifsq; ifsq_watchdog_init(&tdata->tx_watchdog, ifsq, emx_watchdog); diff --git a/sys/dev/netif/igb/if_igb.c b/sys/dev/netif/igb/if_igb.c index ab7a09528a..64820a3f2a 100644 --- a/sys/dev/netif/igb/if_igb.c +++ b/sys/dev/netif/igb/if_igb.c @@ -1550,6 +1550,7 @@ igb_setup_ifp(struct igb_softc *sc) ifsq_set_cpuid(ifsq, txr->tx_intr_cpuid); ifsq_set_priv(ifsq, txr); + ifsq_set_hw_serialize(ifsq, &txr->tx_serialize); txr->ifsq = ifsq; ifsq_watchdog_init(&txr->tx_watchdog, ifsq, igb_watchdog); diff --git a/sys/dev/netif/jme/if_jme.c b/sys/dev/netif/jme/if_jme.c index df9e985f62..e6c22bf95d 100644 --- a/sys/dev/netif/jme/if_jme.c +++ b/sys/dev/netif/jme/if_jme.c @@ -1065,6 +1065,8 @@ jme_attach(device_t dev) /* Setup the TX ring's CPUID */ ifq_set_cpuid(&ifp->if_snd, sc->jme_tx_cpuid); + ifsq_set_hw_serialize(ifq_get_subq_default(&ifp->if_snd), + &sc->jme_cdata.jme_tx_data.jme_tx_serialize); error = jme_intr_setup(dev); if (error) { diff --git a/sys/net/altq/altq_cbq.c b/sys/net/altq/altq_cbq.c index 77aee3b56d..f19d45e2b6 100644 --- a/sys/net/altq/altq_cbq.c +++ b/sys/net/altq/altq_cbq.c @@ -614,10 +614,10 @@ cbqrestart(struct ifaltq *ifq) /* Release the altq lock to avoid deadlock */ CBQ_UNLOCK(ifq); - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); if (ifp->if_start && !ifsq_is_oactive(ifsq)) (*ifp->if_start)(ifp, ifsq); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); CBQ_LOCK(ifq); } diff --git a/sys/net/altq/altq_subr.c b/sys/net/altq/altq_subr.c index a1143e3e9e..d9fdd7cf85 100644 --- a/sys/net/altq/altq_subr.c +++ b/sys/net/altq/altq_subr.c @@ -351,9 +351,9 @@ tbr_timeout(void *arg) ifsq = &ifp->if_snd.altq_subq[ALTQ_SUBQ_INDEX_DEFAULT]; active++; if (!ifsq_is_empty(ifsq) && ifp->if_start != NULL) { - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); (*ifp->if_start)(ifp, ifsq); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); } } crit_exit(); diff --git a/sys/net/altq/if_altq.h b/sys/net/altq/if_altq.h index bb014b5a86..8c9760ad33 100644 --- a/sys/net/altq/if_altq.h +++ b/sys/net/altq/if_altq.h @@ -78,6 +78,8 @@ struct ifaltq_subque { ifsq_dequeue_t ifsq_dequeue; ifsq_request_t ifsq_request; + struct lwkt_serialize *ifsq_hw_serialize; + /* hw serializer */ struct mbuf *ifsq_prepended;/* mbuf dequeued, but not yet xmit */ int ifsq_started; /* ifnet.if_start interlock */ int ifsq_hw_oactive;/* hw too busy, protected by driver */ @@ -88,12 +90,19 @@ struct ifaltq_subque { } __cachealign; #ifdef _KERNEL + #define ALTQ_SQ_ASSERT_LOCKED(ifsq) ASSERT_SERIALIZED(&(ifsq)->ifsq_lock) #define ALTQ_SQ_LOCK_INIT(ifsq) lwkt_serialize_init(&(ifsq)->ifsq_lock) #define ALTQ_SQ_LOCK(ifsq) \ lwkt_serialize_adaptive_enter(&(ifsq)->ifsq_lock) #define ALTQ_SQ_UNLOCK(ifsq) lwkt_serialize_exit(&(ifsq)->ifsq_lock) -#endif + +#define ASSERT_ALTQ_SQ_SERIALIZED_HW(ifsq) \ + ASSERT_SERIALIZED((ifsq)->ifsq_hw_serialize) +#define ASSERT_ALTQ_SQ_NOT_SERIALIZED_HW(ifsq) \ + ASSERT_NOT_SERIALIZED((ifsq)->ifsq_hw_serialize) + +#endif /* _KERNEL */ /* * Structure defining a queue for a network interface. diff --git a/sys/net/bridge/if_bridge.c b/sys/net/bridge/if_bridge.c index 429c72cf72..2a7f66c721 100644 --- a/sys/net/bridge/if_bridge.c +++ b/sys/net/bridge/if_bridge.c @@ -2296,7 +2296,7 @@ bridge_start(struct ifnet *ifp, struct ifaltq_subque *ifsq) struct bridge_softc *sc = ifp->if_softc; ASSERT_ALTQ_SQ_DEFAULT(ifp, ifsq); - ASSERT_IFNET_SERIALIZED_TX(ifp, ifsq); + ASSERT_ALTQ_SQ_SERIALIZED_HW(ifsq); ifsq_set_oactive(ifsq); for (;;) { diff --git a/sys/net/gif/if_gif.c b/sys/net/gif/if_gif.c index d71cb0248e..af3b3c6bb5 100644 --- a/sys/net/gif/if_gif.c +++ b/sys/net/gif/if_gif.c @@ -395,12 +395,12 @@ int gif_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst, struct rtentry *rt) { - const struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); + struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); int error; - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); error = gif_output_serialized(ifp, m, dst, rt); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); return error; } diff --git a/sys/net/gre/if_gre.c b/sys/net/gre/if_gre.c index 0045d92afc..fc7db67b62 100644 --- a/sys/net/gre/if_gre.c +++ b/sys/net/gre/if_gre.c @@ -399,12 +399,12 @@ static int gre_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst, struct rtentry *rt) { - const struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); + struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); int error; - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); error = gre_output_serialized(ifp, m, dst, rt); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); return error; } diff --git a/sys/net/if.c b/sys/net/if.c index 70fd608a39..61ef50a8d1 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -339,14 +339,14 @@ ifsq_ifstart_dispatch(netmsg_t msg) return; } - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); if ((ifp->if_flags & IFF_RUNNING) && !ifsq_is_oactive(ifsq)) { ifp->if_start(ifp, ifsq); if ((ifp->if_flags & IFF_RUNNING) && !ifsq_is_oactive(ifsq)) running = 1; } need_sched = ifsq_ifstart_need_schedule(ifsq, running); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); if (need_sched) { /* @@ -365,7 +365,7 @@ ifsq_devstart(struct ifaltq_subque *ifsq) struct ifnet *ifp = ifsq_get_ifp(ifsq); int running = 0; - ASSERT_IFNET_SERIALIZED_TX(ifp, ifsq); + ASSERT_ALTQ_SQ_SERIALIZED_HW(ifsq); ALTQ_SQ_LOCK(ifsq); if (ifsq_is_started(ifsq) || !ifsq_data_ready(ifsq)) { @@ -611,6 +611,8 @@ if_attach(struct ifnet *ifp, lwkt_serialize_t serializer) ifsq->ifsq_started = 0; ifsq->ifsq_hw_oactive = 0; ifsq_set_cpuid(ifsq, 0); + if (ifp->if_serializer != NULL) + ifsq_set_hw_serialize(ifsq, ifp->if_serializer); ifsq->ifsq_stage = kmalloc_cachealign(ncpus * sizeof(struct ifsubq_stage), @@ -2560,7 +2562,7 @@ ifsq_ifstart_try(struct ifaltq_subque *ifsq, int force_sched) * contention on ifnet's serializer, ifnet.if_start will * be scheduled on ifnet's CPU. */ - if (!ifnet_tryserialize_tx(ifp, ifsq)) { + if (!ifsq_tryserialize_hw(ifsq)) { /* * ifnet serializer contention happened, * ifnet.if_start is scheduled on ifnet's @@ -2577,7 +2579,7 @@ ifsq_ifstart_try(struct ifaltq_subque *ifsq, int force_sched) } need_sched = ifsq_ifstart_need_schedule(ifsq, running); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); if (need_sched) { /* @@ -2634,7 +2636,7 @@ ifq_dispatch(struct ifnet *ifp, struct mbuf *m, struct altq_pktattr *pa) struct ifsubq_stage *stage = NULL; ifsq = ifq_map_subq(ifq, mycpuid); - ASSERT_IFNET_NOT_SERIALIZED_TX(ifp, ifsq); + ASSERT_ALTQ_SQ_NOT_SERIALIZED_HW(ifsq); len = m->m_pkthdr.len; if (m->m_flags & M_MCAST) diff --git a/sys/net/if_var.h b/sys/net/if_var.h index 2d40b8da34..c604a80129 100644 --- a/sys/net/if_var.h +++ b/sys/net/if_var.h @@ -134,10 +134,8 @@ struct ifqueue { */ enum ifnet_serialize { - IFNET_SERIALIZE_ALL, - IFNET_SERIALIZE_TX_BASE = 0x10000000, + IFNET_SERIALIZE_ALL }; -#define IFNET_SERIALIZE_TX(i) (IFNET_SERIALIZE_TX_BASE + (i)) #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES) @@ -374,18 +372,9 @@ EVENTHANDLER_DECLARE(iflladdr_event, iflladdr_event_handler_t); (ifp)->if_serialize_assert((ifp), IFNET_SERIALIZE_ALL, TRUE) #define ASSERT_IFNET_NOT_SERIALIZED_ALL(ifp) \ (ifp)->if_serialize_assert((ifp), IFNET_SERIALIZE_ALL, FALSE) - -#define ASSERT_IFNET_SERIALIZED_TX(ifp, ifsq) \ - (ifp)->if_serialize_assert((ifp), \ - IFNET_SERIALIZE_TX((ifsq)->ifsq_index), TRUE) -#define ASSERT_IFNET_NOT_SERIALIZED_TX(ifp, ifsq) \ - (ifp)->if_serialize_assert((ifp), \ - IFNET_SERIALIZE_TX((ifsq)->ifsq_index), FALSE) #else #define ASSERT_IFNET_SERIALIZED_ALL(ifp) ((void)0) #define ASSERT_IFNET_NOT_SERIALIZED_ALL(ifp) ((void)0) -#define ASSERT_IFNET_SERIALIZED_TX(ifp, ifsq) ((void)0) -#define ASSERT_IFNET_NOT_SERIALIZED_TX(ifp, ifsq) ((void)0) #endif static __inline void @@ -406,25 +395,6 @@ ifnet_tryserialize_all(struct ifnet *_ifp) return _ifp->if_tryserialize(_ifp, IFNET_SERIALIZE_ALL); } -static __inline void -ifnet_serialize_tx(struct ifnet *_ifp, const struct ifaltq_subque *_ifsq) -{ - _ifp->if_serialize(_ifp, IFNET_SERIALIZE_TX(_ifsq->ifsq_index)); -} - -static __inline void -ifnet_deserialize_tx(struct ifnet *_ifp, const struct ifaltq_subque *_ifsq) -{ - _ifp->if_deserialize(_ifp, IFNET_SERIALIZE_TX(_ifsq->ifsq_index)); -} - -static __inline int -ifnet_tryserialize_tx(struct ifnet *_ifp, const struct ifaltq_subque *_ifsq) -{ - return _ifp->if_tryserialize(_ifp, - IFNET_SERIALIZE_TX(_ifsq->ifsq_index)); -} - /* * 72 was chosen below because it is the size of a TCP/IP * header (40) + the minimum mss (32). @@ -696,61 +666,28 @@ ifa_forwardmsg(struct lwkt_msg *_lmsg, int _nextcpu) ifnet_forwardmsg(_lmsg, _nextcpu); } -static __inline int -ifnet_serialize_array_index(int _arrcnt, int _txoff, int _rxoff, - enum ifnet_serialize _slz) -{ - int _off; - - KASSERT(_slz & IFNET_SERIALIZE_TX_BASE, - ("unknown serializer %#x", _slz)); - _off = (_slz & ~IFNET_SERIALIZE_TX_BASE) + _txoff; - KASSERT(_off < _arrcnt, ("invalid TX serializer %#x", _slz)); - - return _off; -} - static __inline void ifnet_serialize_array_enter(lwkt_serialize_t *_arr, int _arrcnt, int _txoff, int _rxoff, enum ifnet_serialize _slz) { - int _off; - - if (__predict_false(_slz == IFNET_SERIALIZE_ALL)) { - lwkt_serialize_array_enter(_arr, _arrcnt, 0); - return; - } - - _off = ifnet_serialize_array_index(_arrcnt, _txoff, _rxoff, _slz); - lwkt_serialize_enter(_arr[_off]); + KKASSERT(_slz == IFNET_SERIALIZE_ALL); + lwkt_serialize_array_enter(_arr, _arrcnt, 0); } static __inline void ifnet_serialize_array_exit(lwkt_serialize_t *_arr, int _arrcnt, int _txoff, int _rxoff, enum ifnet_serialize _slz) { - int _off; - - if (__predict_false(_slz == IFNET_SERIALIZE_ALL)) { - lwkt_serialize_array_exit(_arr, _arrcnt, 0); - return; - } - - _off = ifnet_serialize_array_index(_arrcnt, _txoff, _rxoff, _slz); - lwkt_serialize_exit(_arr[_off]); + KKASSERT(_slz == IFNET_SERIALIZE_ALL); + lwkt_serialize_array_exit(_arr, _arrcnt, 0); } static __inline int ifnet_serialize_array_try(lwkt_serialize_t *_arr, int _arrcnt, int _txoff, int _rxoff, enum ifnet_serialize _slz) { - int _off; - - if (__predict_false(_slz == IFNET_SERIALIZE_ALL)) - return lwkt_serialize_array_try(_arr, _arrcnt, 0); - - _off = ifnet_serialize_array_index(_arrcnt, _txoff, _rxoff, _slz); - return lwkt_serialize_try(_arr[_off]); + KKASSERT(_slz == IFNET_SERIALIZE_ALL); + return lwkt_serialize_array_try(_arr, _arrcnt, 0); } #ifdef INVARIANTS @@ -759,26 +696,16 @@ static __inline void ifnet_serialize_array_assert(lwkt_serialize_t *_arr, int _arrcnt, int _txoff, int _rxoff, enum ifnet_serialize _slz, boolean_t _serialized) { - int _off; - - if (__predict_false(_slz == IFNET_SERIALIZE_ALL)) { - int _i; - - if (_serialized) { - for (_i = 0; _i < _arrcnt; ++_i) - ASSERT_SERIALIZED(_arr[_i]); - } else { - for (_i = 0; _i < _arrcnt; ++_i) - ASSERT_NOT_SERIALIZED(_arr[_i]); - } - return; + int _i; + + KKASSERT(_slz == IFNET_SERIALIZE_ALL); + if (_serialized) { + for (_i = 0; _i < _arrcnt; ++_i) + ASSERT_SERIALIZED(_arr[_i]); + } else { + for (_i = 0; _i < _arrcnt; ++_i) + ASSERT_NOT_SERIALIZED(_arr[_i]); } - - _off = ifnet_serialize_array_index(_arrcnt, _txoff, _rxoff, _slz); - if (_serialized) - ASSERT_SERIALIZED(_arr[_off]); - else - ASSERT_NOT_SERIALIZED(_arr[_off]); } #endif /* INVARIANTS */ diff --git a/sys/net/ifq_var.h b/sys/net/ifq_var.h index 8befb41b43..102b525b37 100644 --- a/sys/net/ifq_var.h +++ b/sys/net/ifq_var.h @@ -374,7 +374,7 @@ ifq_handoff(struct ifnet *_ifp, struct mbuf *_m, struct altq_pktattr *_pa) _ifsq = &_ifp->if_snd.altq_subq[_qid]; - ASSERT_IFNET_SERIALIZED_TX(_ifp, _ifsq); + ASSERT_ALTQ_SQ_SERIALIZED_HW(_ifsq); _error = ifsq_enqueue(_ifsq, _m, _pa); if (_error == 0) { IFNET_STAT_INC(_ifp, obytes, _m->m_pkthdr.len); @@ -483,6 +483,34 @@ ifsq_get_ifp(const struct ifaltq_subque *_ifsq) return _ifsq->ifsq_ifp; } +static __inline void +ifsq_set_hw_serialize(struct ifaltq_subque *_ifsq, + struct lwkt_serialize *_hwslz) +{ + KASSERT(_hwslz != NULL, ("NULL hw serialize")); + KASSERT(_ifsq->ifsq_hw_serialize == NULL, + ("hw serialize has been setup")); + _ifsq->ifsq_hw_serialize = _hwslz; +} + +static __inline void +ifsq_serialize_hw(struct ifaltq_subque *_ifsq) +{ + lwkt_serialize_enter(_ifsq->ifsq_hw_serialize); +} + +static __inline void +ifsq_deserialize_hw(struct ifaltq_subque *_ifsq) +{ + lwkt_serialize_exit(_ifsq->ifsq_hw_serialize); +} + +static __inline int +ifsq_tryserialize_hw(struct ifaltq_subque *_ifsq) +{ + return lwkt_serialize_try(_ifsq->ifsq_hw_serialize); +} + static __inline struct ifaltq_subque * ifq_get_subq_default(const struct ifaltq *_ifq) { diff --git a/sys/net/ppp/if_ppp.c b/sys/net/ppp/if_ppp.c index 243e62d2a2..be70db467a 100644 --- a/sys/net/ppp/if_ppp.c +++ b/sys/net/ppp/if_ppp.c @@ -877,7 +877,7 @@ pppoutput_serialized(struct ifnet *ifp, struct ifaltq_subque *ifsq, error = 0; } } else { - ASSERT_IFNET_SERIALIZED_TX(&sc->sc_if, ifsq); + ASSERT_ALTQ_SQ_SERIALIZED_HW(ifsq); error = ifsq_enqueue(ifsq, m0, &pktattr); } if (error) { @@ -907,9 +907,9 @@ pppoutput(struct ifnet *ifp, struct mbuf *m0, struct sockaddr *dst, struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); int error; - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); error = pppoutput_serialized(ifp, ifsq, m0, dst, rtp); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); return error; } diff --git a/sys/net/sl/if_sl.c b/sys/net/sl/if_sl.c index 4c884aea0c..b288dc28b0 100644 --- a/sys/net/sl/if_sl.c +++ b/sys/net/sl/if_sl.c @@ -527,9 +527,9 @@ sloutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst, struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); int error; - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); error = sloutput_serialized(ifp, ifsq, m, dst, rtp); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); return error; } diff --git a/sys/net/sppp/if_spppsubr.c b/sys/net/sppp/if_spppsubr.c index 07113cad20..7be21bab53 100644 --- a/sys/net/sppp/if_spppsubr.c +++ b/sys/net/sppp/if_spppsubr.c @@ -979,9 +979,9 @@ sppp_output(struct ifnet *ifp, struct mbuf *m, struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); int error; - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); error = sppp_output_serialized(ifp, ifsq, m, dst, rt); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); return error; } diff --git a/sys/net/stf/if_stf.c b/sys/net/stf/if_stf.c index bbe31b2ea6..6f2b9b15c1 100644 --- a/sys/net/stf/if_stf.c +++ b/sys/net/stf/if_stf.c @@ -421,12 +421,12 @@ static int stf_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst, struct rtentry *rt) { - const struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); + struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); int error; - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); error = stf_output_serialized(ifp, m, dst, rt); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); return error; } diff --git a/sys/net/tun/if_tun.c b/sys/net/tun/if_tun.c index d0aa34a4b8..d70ca9e11d 100644 --- a/sys/net/tun/if_tun.c +++ b/sys/net/tun/if_tun.c @@ -803,8 +803,8 @@ tunstart(struct ifnet *ifp, struct ifaltq_subque *ifsq) } if (tp->tun_flags & TUN_ASYNC && tp->tun_sigio) pgsigio(tp->tun_sigio, SIGIO, 0); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); KNOTE(&tp->tun_rkq.ki_note, 0); - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); } } diff --git a/sys/net/vlan/if_vlan.c b/sys/net/vlan/if_vlan.c index a3569b2d56..0d241b63f7 100644 --- a/sys/net/vlan/if_vlan.c +++ b/sys/net/vlan/if_vlan.c @@ -505,7 +505,7 @@ vlan_start(struct ifnet *ifp, struct ifaltq_subque *ifsq) lwkt_port_t p_port; ASSERT_ALTQ_SQ_DEFAULT(ifp, ifsq); - ASSERT_IFNET_SERIALIZED_TX(ifp, ifsq); + ASSERT_ALTQ_SQ_SERIALIZED_HW(ifsq); if (ifp_p == NULL) { ifsq_purge(ifsq); diff --git a/sys/netgraph/fec/ng_fec.c b/sys/netgraph/fec/ng_fec.c index b77ccdd47c..8566cb2782 100644 --- a/sys/netgraph/fec/ng_fec.c +++ b/sys/netgraph/fec/ng_fec.c @@ -842,12 +842,12 @@ static int ng_fec_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst, struct rtentry *rt0) { - const struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); + struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); int error; - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); error = ng_fec_output_serialized(ifp, m, dst, rt0); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); return error; } diff --git a/sys/netgraph/iface/ng_iface.c b/sys/netgraph/iface/ng_iface.c index c200adbe66..02e448b790 100644 --- a/sys/netgraph/iface/ng_iface.c +++ b/sys/netgraph/iface/ng_iface.c @@ -461,12 +461,12 @@ static int ng_iface_output(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst, struct rtentry *rt0) { - const struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); + struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); int error; - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); error = ng_iface_output_serialized(ifp, m, dst, rt0); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); return error; } diff --git a/sys/netproto/atm/atm_if.c b/sys/netproto/atm/atm_if.c index 2243c0e2b2..c28fd6003f 100644 --- a/sys/netproto/atm/atm_if.c +++ b/sys/netproto/atm/atm_if.c @@ -972,12 +972,12 @@ int atm_ifoutput(struct ifnet *ifp, KBuffer *m, struct sockaddr *dst, struct rtentry *rt) { - const struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); + struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); int error; - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); error = atm_ifoutput_serialized(ifp, m, dst, rt); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); return error; } diff --git a/sys/netproto/ipx/ipx_ip.c b/sys/netproto/ipx/ipx_ip.c index dd8c33dce0..77685eecc5 100644 --- a/sys/netproto/ipx/ipx_ip.c +++ b/sys/netproto/ipx/ipx_ip.c @@ -293,12 +293,12 @@ static int ipxipoutput(struct ifnet *ifp, struct mbuf *m, struct sockaddr *dst, struct rtentry *rt) { - const struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); + struct ifaltq_subque *ifsq = ifq_get_subq_default(&ifp->if_snd); int error; - ifnet_serialize_tx(ifp, ifsq); + ifsq_serialize_hw(ifsq); error = ipxipoutput_serialized(ifp, m, dst, rt); - ifnet_deserialize_tx(ifp, ifsq); + ifsq_deserialize_hw(ifsq); return error; }