29 Nov, 2011

1 commit

  • We can't rely on ieee80211_select_queue() to do its job at this point
    since the skb->protocol is not yet known. Instead, factor out and reuse
    the queue mapping logic for injected frames.

    Also, to mitigate congestion, forwarded frames should be dropped if the
    outgoing queue was stopped. This was not correctly implemented as we
    were not checking the right queue. Furthermore, we were dropping frames
    that had arrived to their destination if that queue was stopped.

    Signed-off-by: Thomas Pedersen
    Signed-off-by: Javier Cardona
    Signed-off-by: John W. Linville

    Thomas Pedersen
     

15 Sep, 2011

1 commit


28 Jun, 2011

1 commit


06 Jan, 2010

1 commit

  • Since I removed the master netdev, we've been
    keeping internal queues only, and even before
    that we never told the networking stack above
    the virtual interfaces about congestion. This
    means that packets are queued in mac80211 and
    the upper layers never know, possibly leading
    to memory exhaustion and other problems.

    This patch makes all interfaces multiqueue and
    uses ndo_select_queue to put the packets into
    queues per AC. Additionally, when the driver
    stops a queue, we now stop all corresponding
    queues for the virtual interfaces as well.

    The injection case will use VO by default for
    non-data frames, and BE for data frames, but
    downgrade any data frames according to ACM. It
    needs to be fleshed out in the future to allow
    chosing the queue/AC in radiotap.

    Reported-by: Lennert Buytenhek
    Signed-off-by: Johannes Berg
    Cc: stable@kernel.org [2.6.32]
    Signed-off-by: John W. Linville

    Johannes Berg
     

25 Jul, 2009

1 commit

  • With the internal 'pending' queue system in place, we can simply
    put packets there instead of pushing them off to the master dev,
    getting rid of the master interface completely.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     

28 Feb, 2009

1 commit

  • Hardware with AMPDU queues currently has broken aggregation.

    This patch fixes it by making all A-MPDUs go over the regular AC queues,
    but keeping track of the hardware queues in mac80211. As a first rough
    version, it actually stops the AC queue for extended periods of time,
    which can be removed by adding buffering internal to mac80211, but is
    currently not a huge problem because people rarely use multiple TIDs
    that are in the same AC (and iwlwifi currently doesn't operate as AP).

    This is a short-term fix, my current medium-term plan, which I hope to
    execute soon as well, but am not sure can finish before .30, looks like
    this:
    1) rework the internal queuing layer in mac80211 that we use for
    fragments if the driver stopped queue in the middle of a fragmented
    frame to be able to queue more frames at once (rather than just a
    single frame with its fragments)
    2) instead of stopping the entire AC queue, queue up the frames in a
    per-station/per-TID queue during aggregation session initiation,
    when the session has come up take all those frames and put them
    onto the queue from 1)
    3) push the ampdu queue layer abstraction this patch introduces in
    mac80211 into the driver, and remove the virtual queue stuff from
    mac80211 again

    This plan will probably also affect ath9k in that mac80211 queues the
    frames instead of passing them down, even when there are no ampdu queues.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     

16 Sep, 2008

1 commit


23 Aug, 2008

1 commit


18 Jul, 2008

1 commit


09 Jul, 2008

1 commit


22 May, 2008

1 commit

  • This patch updates mac80211 and drivers to be multi-queue aware and
    use that instead of the internal queue mapping. Also does a number
    of cleanups in various pieces of the code that fall out and reduces
    internal mac80211 state size.

    Signed-off-by: Johannes Berg
    Signed-off-by: John W. Linville

    Johannes Berg
     

01 Mar, 2008

1 commit


11 Oct, 2007

1 commit


06 May, 2007

1 commit