From: damien Date: Thu, 14 Aug 2008 16:02:23 +0000 (+0000) Subject: in ieee80211_input(), call if_start() after enqueuing frames in if_snd X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=45514928869e0272673b341a181fff36bff157a3;p=openbsd in ieee80211_input(), call if_start() after enqueuing frames in if_snd when acting as an access point instead of having each driver doing the job. tested by krw@ (ral AP) and me with several drivers. --- diff --git a/sys/dev/ic/acx.c b/sys/dev/ic/acx.c index ff8a1360273..f3b46dd1ffa 100644 --- a/sys/dev/ic/acx.c +++ b/sys/dev/ic/acx.c @@ -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 @@ -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 diff --git a/sys/dev/ic/ath.c b/sys/dev/ic/ath.c index 6c340a24d4f..419831f0386 100644 --- a/sys/dev/ic/ath.c +++ b/sys/dev/ic/ath.c @@ -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 } diff --git a/sys/dev/ic/malo.c b/sys/dev/ic/malo.c index 2e502ef3f3c..643fcf6313b 100644 --- a/sys/dev/ic/malo.c +++ b/sys/dev/ic/malo.c @@ -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 @@ -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 diff --git a/sys/dev/ic/rt2560.c b/sys/dev/ic/rt2560.c index ab8d87fbb7c..0879d492e97 100644 --- a/sys/dev/ic/rt2560.c +++ b/sys/dev/ic/rt2560.c @@ -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); } /* diff --git a/sys/dev/ic/rt2661.c b/sys/dev/ic/rt2661.c index a55f5a6efc0..6a1bbc4ca0a 100644 --- a/sys/dev/ic/rt2661.c +++ b/sys/dev/ic/rt2661.c @@ -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); } /* diff --git a/sys/dev/ic/rt2860.c b/sys/dev/ic/rt2860.c index 7943b077155..849e5e573b7 100644 --- a/sys/dev/ic/rt2860.c +++ b/sys/dev/ic/rt2860.c @@ -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 diff --git a/sys/dev/ic/rtw.c b/sys/dev/ic/rtw.c index 0dca15b1685..d2fbe888299 100644 --- a/sys/dev/ic/rtw.c +++ b/sys/dev/ic/rtw.c @@ -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 } diff --git a/sys/dev/usb/if_ral.c b/sys/dev/usb/if_ral.c index 323c6b4e30f..5e7a8c3400d 100644 --- a/sys/dev/usb/if_ral.c +++ b/sys/dev/usb/if_ral.c @@ -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")); diff --git a/sys/dev/usb/if_rum.c b/sys/dev/usb/if_rum.c index c9ffc5f0f25..50fc589b3a7 100644 --- a/sys/dev/usb/if_rum.c +++ b/sys/dev/usb/if_rum.c @@ -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 @@ -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")); diff --git a/sys/net80211/ieee80211_input.c b/sys/net80211/ieee80211_input.c index 1499054dc77..9d8c93c41d4 100644 --- a/sys/net80211/ieee80211_input.c +++ b/sys/net80211/ieee80211_input.c @@ -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); } } }