ifsq: Let ifaltq_subque know its related hardware TX queue's serializer
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Fri, 15 Mar 2013 05:57:21 +0000 (13:57 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Fri, 15 Mar 2013 07:58:17 +0000 (15:58 +0800)
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).

23 files changed:
sys/dev/netif/bce/if_bce.c
sys/dev/netif/emx/if_emx.c
sys/dev/netif/igb/if_igb.c
sys/dev/netif/jme/if_jme.c
sys/net/altq/altq_cbq.c
sys/net/altq/altq_subr.c
sys/net/altq/if_altq.h
sys/net/bridge/if_bridge.c
sys/net/gif/if_gif.c
sys/net/gre/if_gre.c
sys/net/if.c
sys/net/if_var.h
sys/net/ifq_var.h
sys/net/ppp/if_ppp.c
sys/net/sl/if_sl.c
sys/net/sppp/if_spppsubr.c
sys/net/stf/if_stf.c
sys/net/tun/if_tun.c
sys/net/vlan/if_vlan.c
sys/netgraph/fec/ng_fec.c
sys/netgraph/iface/ng_iface.c
sys/netproto/atm/atm_if.c
sys/netproto/ipx/ipx_ip.c

index adecb25..f8ec4f3 100644 (file)
@@ -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);
index 2eef8e6..881393a 100644 (file)
@@ -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);
index ab7a095..64820a3 100644 (file)
@@ -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);
index df9e985..e6c22bf 100644 (file)
@@ -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) {
index 77aee3b..f19d45e 100644 (file)
@@ -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);
        }
index a1143e3..d9fdd7c 100644 (file)
@@ -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();
index bb014b5..8c9760a 100644 (file)
@@ -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.
index 429c72c..2a7f66c 100644 (file)
@@ -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 (;;) {
index d71cb02..af3b3c6 100644 (file)
@@ -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;
 }
 
index 0045d92..fc7db67 100644 (file)
@@ -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;
 }
index 70fd608..61ef50a 100644 (file)
@@ -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)
index 2d40b8d..c604a80 100644 (file)
@@ -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 */
index 8befb41..102b525 100644 (file)
@@ -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)
 {
index 243e62d..be70db4 100644 (file)
@@ -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;
 }
index 4c884ae..b288dc2 100644 (file)
@@ -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;
 }
index 07113ca..7be21ba 100644 (file)
@@ -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;
 }
index bbe31b2..6f2b9b1 100644 (file)
@@ -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;
 }
index d0aa34a..d70ca9e 100644 (file)
@@ -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);
        }
 }
index a3569b2..0d241b6 100644 (file)
@@ -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);
index b77ccdd..8566cb2 100644 (file)
@@ -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;
 }
index c200adb..02e448b 100644 (file)
@@ -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;
 }
index 2243c0e..c28fd60 100644 (file)
@@ -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;
 }
index dd8c33d..77685ee 100644 (file)
@@ -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;
 }