in ieee80211_input(), call if_start() after enqueuing frames in if_snd
authordamien <damien@openbsd.org>
Thu, 14 Aug 2008 16:02:23 +0000 (16:02 +0000)
committerdamien <damien@openbsd.org>
Thu, 14 Aug 2008 16:02:23 +0000 (16:02 +0000)
when acting as an access point instead of having each driver doing the
job.

tested by krw@ (ral AP) and me with several drivers.

sys/dev/ic/acx.c
sys/dev/ic/ath.c
sys/dev/ic/malo.c
sys/dev/ic/rt2560.c
sys/dev/ic/rt2661.c
sys/dev/ic/rt2860.c
sys/dev/ic/rtw.c
sys/dev/usb/if_ral.c
sys/dev/usb/if_rum.c
sys/net80211/ieee80211_input.c

index ff8a136..f3b46dd 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: acx.c,v 1.85 2008/07/21 18:43:19 damien Exp $ */
+/*     $OpenBSD: acx.c,v 1.86 2008/08/14 16:02:24 damien Exp $ */
 
 /*
  * Copyright (c) 2006 Jonathan Gray <jsg@openbsd.org>
@@ -1417,13 +1417,6 @@ next:
         * time we can start from it.
         */
        bd->rx_scan_start = idx;
-
-       /*
-        * In HostAP mode, ieee80211_input() will enqueue packets in if_snd
-        * without calling if_start().
-        */
-       if (!IFQ_IS_EMPTY(&ifp->if_snd) && !(ifp->if_flags & IFF_OACTIVE))
-               (*ifp->if_start)(ifp);
 }
 
 int
index 6c340a2..419831f 100644 (file)
@@ -1,4 +1,4 @@
-/*      $OpenBSD: ath.c,v 1.72 2008/07/30 07:43:01 reyk Exp $  */
+/*      $OpenBSD: ath.c,v 1.73 2008/08/14 16:02:24 damien Exp $  */
 /*     $NetBSD: ath.c,v 1.37 2004/08/18 21:59:39 dyoung Exp $  */
 
 /*-
@@ -2086,9 +2086,6 @@ ath_rx_proc(void *arg, int npending)
 
        ath_hal_set_rx_signal(ah);              /* rx signal state monitoring */
        ath_hal_start_rx(ah);                   /* in case of RXEOL */
-
-       if ((ifp->if_flags & IFF_OACTIVE) == 0 && !IFQ_IS_EMPTY(&ifp->if_snd))
-               ath_start(ifp);
 #undef PA2DESC
 }
 
index 2e502ef..643fcf6 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: malo.c,v 1.84 2008/07/27 11:28:17 mbalmer Exp $ */
+/*     $OpenBSD: malo.c,v 1.85 2008/08/14 16:02:24 damien Exp $ */
 
 /*
  * Copyright (c) 2006 Claudio Jeker <claudio@openbsd.org>
@@ -1758,13 +1758,6 @@ skip:
        }
 
        malo_mem_write4(sc, sc->sc_RxPdRdPtr, rxRdPtr);
-
-       /*
-        * In HostAP mode, ieee80211_input() will enqueue packets in if_snd
-        * without calling if_start().
-        */
-       if (!IFQ_IS_EMPTY(&ifp->if_snd) && !(ifp->if_flags & IFF_OACTIVE))
-               (*ifp->if_start)(ifp);
 }
 
 int
index ab8d87f..0879d49 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: rt2560.c,v 1.37 2008/07/21 18:43:19 damien Exp $  */
+/*     $OpenBSD: rt2560.c,v 1.38 2008/08/14 16:02:24 damien Exp $  */
 
 /*-
  * Copyright (c) 2005, 2006
@@ -1213,13 +1213,6 @@ skip:            desc->flags = htole32(RT2560_RX_BUSY);
                sc->rxq.cur_decrypt =
                    (sc->rxq.cur_decrypt + 1) % RT2560_RX_RING_COUNT;
        }
-
-       /*
-        * In HostAP mode, ieee80211_input() will enqueue packets in if_snd
-        * without calling if_start().
-        */
-       if (!IFQ_IS_EMPTY(&ifp->if_snd) && !(ifp->if_flags & IFF_OACTIVE))
-               rt2560_start(ifp);
 }
 
 /*
index a55f5a6..6a1bbc4 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: rt2661.c,v 1.42 2008/07/21 18:43:19 damien Exp $      */
+/*     $OpenBSD: rt2661.c,v 1.43 2008/08/14 16:02:24 damien Exp $      */
 
 /*-
  * Copyright (c) 2006
@@ -1142,13 +1142,6 @@ skip:            desc->flags |= htole32(RT2661_RX_BUSY);
 
                sc->rxq.cur = (sc->rxq.cur + 1) % RT2661_RX_RING_COUNT;
        }
-
-       /*
-        * In HostAP mode, ieee80211_input() will enqueue packets in if_snd
-        * without calling if_start().
-        */
-       if (!IFQ_IS_EMPTY(&ifp->if_snd) && !(ifp->if_flags & IFF_OACTIVE))
-               rt2661_start(ifp);
 }
 
 /*
index 7943b07..849e5e5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: rt2860.c,v 1.17 2008/07/21 19:41:44 damien Exp $      */
+/*     $OpenBSD: rt2860.c,v 1.18 2008/08/14 16:02:24 damien Exp $      */
 
 /*-
  * Copyright (c) 2007,2008
@@ -1193,13 +1193,6 @@ skip:            rxd->sdl0 &= ~htole16(RT2860_RX_DDONE);
        /* tell HW what we have processed */
        RAL_WRITE(sc, RT2860_RX_CALC_IDX,
            (sc->rxq.cur - 1) % RT2860_RX_RING_COUNT);
-
-       /*
-        * In HostAP mode, ieee80211_input() will enqueue packets in if_snd
-        * without calling if_start().
-        */
-       if (!IFQ_IS_EMPTY(&ifp->if_snd) && !(ifp->if_flags & IFF_OACTIVE))
-               rt2860_start(ifp);
 }
 
 int
index 0dca15b..d2fbe88 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: rtw.c,v 1.67 2008/07/21 18:43:19 damien Exp $ */
+/*     $OpenBSD: rtw.c,v 1.68 2008/08/14 16:02:24 damien Exp $ */
 /*     $NetBSD: rtw.c,v 1.29 2004/12/27 19:49:16 dyoung Exp $ */
 
 /*-
@@ -1301,14 +1301,6 @@ next:
 
        KASSERT(rdb->rdb_next < rdb->rdb_ndesc);
 
-       /*
-        * In HostAP mode, ieee80211_input() will enqueue packets in if_snd
-        * without calling if_start().
-        */
-       if (!IFQ_IS_EMPTY(&sc->sc_if.if_snd) &&
-           !(sc->sc_if.if_flags & IFF_OACTIVE))
-               (*sc->sc_if.if_start)(&sc->sc_if);
-
        return;
 #undef IS_BEACON
 }
index 323c6b4..5e7a8c3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_ral.c,v 1.105 2008/07/30 06:25:23 damien Exp $     */
+/*     $OpenBSD: if_ral.c,v 1.106 2008/08/14 16:02:24 damien Exp $     */
 
 /*-
  * Copyright (c) 2005, 2006
@@ -804,13 +804,6 @@ ural_rxeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
        /* node is no longer needed */
        ieee80211_release_node(ic, ni);
 
-       /*
-        * In HostAP mode, ieee80211_input() will enqueue packets in if_snd
-        * without calling if_start().
-        */
-       if (!IFQ_IS_EMPTY(&ifp->if_snd) && !(ifp->if_flags & IFF_OACTIVE))
-               ural_start(ifp);
-
        splx(s);
 
        DPRINTFN(15, ("rx done\n"));
index c9ffc5f..50fc589 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_rum.c,v 1.75 2008/07/30 06:25:23 damien Exp $      */
+/*     $OpenBSD: if_rum.c,v 1.76 2008/08/14 16:02:24 damien Exp $      */
 
 /*-
  * Copyright (c) 2005-2007 Damien Bergamini <damien.bergamini@free.fr>
@@ -869,13 +869,6 @@ rum_rxeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
        /* node is no longer needed */
        ieee80211_release_node(ic, ni);
 
-       /*
-        * In HostAP mode, ieee80211_input() will enqueue packets in if_snd
-        * without calling if_start().
-        */
-       if (!IFQ_IS_EMPTY(&ifp->if_snd) && !(ifp->if_flags & IFF_OACTIVE))
-               rum_start(ifp);
-
        splx(s);
 
        DPRINTFN(15, ("rx done\n"));
index 1499054..9d8c93c 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: ieee80211_input.c,v 1.98 2008/08/13 17:44:45 damien Exp $     */
+/*     $OpenBSD: ieee80211_input.c,v 1.99 2008/08/14 16:02:23 damien Exp $     */
 
 /*-
  * Copyright (c) 2001 Atsushi Onoe
@@ -413,6 +413,7 @@ ieee80211_input(struct ifnet *ifp, struct mbuf *m, struct ieee80211_node *ni,
                                        if (m != NULL)
                                                ifp->if_omcasts++;
                                        ifp->if_obytes += len;
+                                       if_start(ifp);
                                }
                        }
                }