Search Linux Wireless

Re: Another fragmentation multiqueue kludge

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2008-07-24 at 16:01 +0300, Tomas Winkler wrote:

> diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
> index 2b912cf..db6540e 100644
> --- a/net/mac80211/tx.c
> +++ b/net/mac80211/tx.c
> @@ -1061,13 +1061,15 @@ static int ieee80211_tx_prepare(struct
> ieee80211_tx_data *tx,
>  static int __ieee80211_tx(struct ieee80211_local *local, struct sk_buff *skb,
>                           struct ieee80211_tx_data *tx)
>  {
> -       struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
> +       struct ieee80211_tx_info *info;
>         int ret, i;
> 
> -       if (netif_subqueue_stopped(local->mdev, skb))
> -               return IEEE80211_TX_AGAIN;
> 
>         if (skb) {
> +               if (netif_subqueue_stopped(local->mdev, skb))
> +                       return IEEE80211_TX_AGAIN;
> +               info = IEEE80211_SKB_CB(skb);
> +

This isn't right. It means that if you have a stopped queue and pending
fragments, you still transmit them, which is not something the driver
should have to expect.

>         if (test_bit(queue, local->queues_pending)) {
> +               /* don't call scheduler just open the queue */
> +               if (ieee80211_is_multiqueue(local)) {
> +                       netif_start_subqueue(local->mdev, queue);
> +               } else {
> +                       WARN_ON(queue != 0);
> +                       netif_start_queue(local->mdev);
> +               }
>                 tasklet_schedule(&local->tx_pending_tasklet);
>         } else {
>                 if (ieee80211_is_multiqueue(local)) {

That's not right either, if you have pending fragments/packets then you
cannot start the queue.

I think what you're trying to do here is implement, in mac80211, to not
stop queues in the middle of a fragmented MSDU, but you really should do
that in the driver and we just remove all this code.

johannes

Attachment: signature.asc
Description: This is a digitally signed message part


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux