diff mbox

mac80211: fix AP buffered multicast frames with queue control and txq

Message ID 1456669193-56860-1-git-send-email-nbd@openwrt.org (mailing list archive)
State Accepted
Delegated to: Johannes Berg
Headers show

Commit Message

Felix Fietkau Feb. 28, 2016, 2:19 p.m. UTC
Buffered multicast frames must be passed to the driver directly via
drv_tx instead of going through the txq, otherwise they cannot easily be
scheduled to be sent after DTIM.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
---
 net/mac80211/tx.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Dave Taht Feb. 28, 2016, 5:35 p.m. UTC | #1
On Sun, Feb 28, 2016 at 6:19 AM, Felix Fietkau <nbd@openwrt.org> wrote:
> Buffered multicast frames must be passed to the driver directly via
> drv_tx instead of going through the txq, otherwise they cannot easily be
> scheduled to be sent after DTIM.
>
> Signed-off-by: Felix Fietkau <nbd@openwrt.org>
> ---
>  net/mac80211/tx.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
> index 3a7475f..b294820 100644
> --- a/net/mac80211/tx.c
> +++ b/net/mac80211/tx.c
> @@ -1247,7 +1247,8 @@ static void ieee80211_drv_tx(struct ieee80211_local *local,
>         struct txq_info *txqi;
>         u8 ac;
>
> -       if (info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE)
> +       if ((info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM) ||
> +           (info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE))
>                 goto tx_normal;
>
>         if (!ieee80211_is_data(hdr->frame_control))
> --
> 2.2.2

I would like hooks to emerge to be able to keep the level of multicast
at a dull roar, relative to other traffic, and the impact of a
multicast bursts measureable (stat exposed to userspace, something
reporting back to the main tx queues that one just happened and how
long it took). On receive, too.....


>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Johannes Berg March 3, 2016, 3:12 p.m. UTC | #2
On Sun, 2016-02-28 at 15:19 +0100, Felix Fietkau wrote:
> Buffered multicast frames must be passed to the driver directly via
> drv_tx instead of going through the txq, otherwise they cannot easily
> be scheduled to be sent after DTIM.
> 
Applied.

johannes
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Johannes Berg March 3, 2016, 3:14 p.m. UTC | #3
On Sun, 2016-02-28 at 09:35 -0800, Dave Taht wrote:
> On Sun, Feb 28, 2016 at 6:19 AM, Felix Fietkau <nbd@openwrt.org>
> wrote:
> > Buffered multicast frames must be passed to the driver directly via
> > drv_tx instead of going through the txq, otherwise they cannot
> > easily be
> > scheduled to be sent after DTIM.
> > 
> > Signed-off-by: Felix Fietkau <nbd@openwrt.org>
> > ---
> >  net/mac80211/tx.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
> > index 3a7475f..b294820 100644
> > --- a/net/mac80211/tx.c
> > +++ b/net/mac80211/tx.c
> > @@ -1247,7 +1247,8 @@ static void ieee80211_drv_tx(struct
> > ieee80211_local *local,
> >         struct txq_info *txqi;
> >         u8 ac;
> > 
> > -       if (info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE)
> > +       if ((info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM) ||
> > +           (info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE))
> >                 goto tx_normal;
> > 
> >         if (!ieee80211_is_data(hdr->frame_control))
> > --
> > 2.2.2
> 
> I would like 

Feel free to propose patches for anything you like :)

johannes
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dave Taht March 3, 2016, 4:23 p.m. UTC | #4
On Thu, Mar 3, 2016 at 7:14 AM, Johannes Berg <johannes@sipsolutions.net> wrote:
> On Sun, 2016-02-28 at 09:35 -0800, Dave Taht wrote:
>> On Sun, Feb 28, 2016 at 6:19 AM, Felix Fietkau <nbd@openwrt.org>
>> wrote:
>> > Buffered multicast frames must be passed to the driver directly via
>> > drv_tx instead of going through the txq, otherwise they cannot
>> > easily be
>> > scheduled to be sent after DTIM.
>> >
>> > Signed-off-by: Felix Fietkau <nbd@openwrt.org>
>> > ---
>> >  net/mac80211/tx.c | 3 ++-
>> >  1 file changed, 2 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
>> > index 3a7475f..b294820 100644
>> > --- a/net/mac80211/tx.c
>> > +++ b/net/mac80211/tx.c
>> > @@ -1247,7 +1247,8 @@ static void ieee80211_drv_tx(struct
>> > ieee80211_local *local,
>> >         struct txq_info *txqi;
>> >         u8 ac;
>> >
>> > -       if (info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE)
>> > +       if ((info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM) ||
>> > +           (info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE))
>> >                 goto tx_normal;
>> >
>> >         if (!ieee80211_is_data(hdr->frame_control))
>> > --
>> > 2.2.2
>>
>> I would like
>
> Feel free to propose patches for anything you like :)

At the moment all I can do is cheer people on, and try to assemble
enough gear to test comprehensively when enough patches have landed in
your tree... Go, felix! Go, Michal! Go Mohammed! Go, Ben! Go Tim! Go,
Emmanuel! Go Johannes!


>
> johannes
>>
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 3a7475f..b294820 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1247,7 +1247,8 @@  static void ieee80211_drv_tx(struct ieee80211_local *local,
 	struct txq_info *txqi;
 	u8 ac;
 
-	if (info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE)
+	if ((info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM) ||
+	    (info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE))
 		goto tx_normal;
 
 	if (!ieee80211_is_data(hdr->frame_control))