<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/net/mac80211/agg-tx.c, branch linux-3.18.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.18.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-3.18.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2014-06-23T12:22:25Z</updated>
<entry>
<title>mac80211: introduce refcount for queue_stop_reasons</title>
<updated>2014-06-23T12:22:25Z</updated>
<author>
<name>Luciano Coelho</name>
</author>
<published>2014-06-13T13:30:05Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=cca07b00a56d6ddd339e457dfd1a229222b9acf5'/>
<id>urn:sha1:cca07b00a56d6ddd339e457dfd1a229222b9acf5</id>
<content type='text'>
Sometimes different vifs may be stopping the queues for the same
reason (e.g. when several interfaces are performing a channel switch).
Instead of using a bitmask for the reasons, use an integer that holds
a refcount instead.  In order to keep it backwards compatible,
introduce a boolean in some functions that tell us whether the queue
stopping should be refcounted or not.  For now, use not refcounted for
all calls to keep it functionally the same as before.

Signed-off-by: Luciano Coelho &lt;luciano.coelho@intel.com&gt;
Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
</content>
</entry>
<entry>
<title>mac80211: send {ADD,DEL}BA on AC_VO like other mgmt frames, as per spec</title>
<updated>2014-02-04T20:48:28Z</updated>
<author>
<name>Karl Beldan</name>
</author>
<published>2014-01-23T19:06:34Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c6e133277bcf05597ad32f2699b928b284138d59'/>
<id>urn:sha1:c6e133277bcf05597ad32f2699b928b284138d59</id>
<content type='text'>
ATM, {ADD,DEL}BA and BAR frames are sent on the AC matching the TID of
the BA parameters. In the discussion [1] about this patch, Johannes
recalled that it fixed some races with the DELBA and indeed this
behavior was introduced in [2].
While [2] is right for the BARs, the part queueing the {ADD,DEL}BAs on
their BA params TID AC violates the spec and is more a workaround for
some drivers. Helmut expressed some concerns wrt such drivers, in
particular DELBAs in rt2x00.

ATM, DELBAs are sent after a driver has called (hence "purposely")
ieee80211_start_tx_ba_cb_irqsafe and Johannes and Emmanuel gave some
details wrt intentions behind the split of the IEEE80211_AMPDU_TX_STOP_*
given to the driver ampdu_action supposed to call this function, which
could prove handy to people trying to do the right thing in faulty
drivers (if their fw/hw don't get in their way).

[1] http://mid.gmane.org/1390391564-18481-1-git-send-email-karl.beldan@gmail.com
[2] Commit: cf6bb79ad828 ("mac80211: Use appropriate TID for sending BAR, ADDBA and DELBA frames")

Signed-off-by: Karl Beldan &lt;karl.beldan@rivierawaves.com&gt;
Cc: Helmut Schaa &lt;helmut.schaa@googlemail.com&gt;
Cc: Emmanuel Grumbach &lt;emmanuel.grumbach@intel.com&gt;
Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
</content>
</entry>
<entry>
<title>mac80211: fix aggregation state with current drivers</title>
<updated>2013-01-24T14:43:51Z</updated>
<author>
<name>Johannes Berg</name>
</author>
<published>2013-01-18T22:47:05Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=8147dc7f54f0f2e13c3b65fd9628994ad576610b'/>
<id>urn:sha1:8147dc7f54f0f2e13c3b65fd9628994ad576610b</id>
<content type='text'>
For drivers that don't actually flush their queues when
aggregation stop with the IEEE80211_AMPDU_TX_STOP_FLUSH
or IEEE80211_AMPDU_TX_STOP_FLUSH_CONT reasons is done,
like iwlwifi or iwlegacy, mac80211 can then transmit on
a TID that the driver still considers busy. This happens
in the following way:

 - IEEE80211_AMPDU_TX_STOP_FLUSH requested
 - driver marks TID as emptying
 - mac80211 removes tid_tx data, this can copy packets
   to the TX pending queues and also let new packets
   through to the driver
 - driver gets unexpected TX as it wasn't completely
   converted to the new API

In iwlwifi, this lead to the following warning:

WARNING: at drivers/net/wireless/iwlwifi/dvm/tx.c:442 iwlagn_tx_skb+0xc47/0xce0
Tx while agg.state = 4
Modules linked in: [...]
Pid: 0, comm: kworker/0:0 Tainted: G        W   3.1.0 #1
Call Trace:
 [&lt;c1046e42&gt;] warn_slowpath_common+0x72/0xa0
 [&lt;c1046f13&gt;] warn_slowpath_fmt+0x33/0x40
 [&lt;fddffa17&gt;] iwlagn_tx_skb+0xc47/0xce0 [iwldvm]
 [&lt;fddfcaa3&gt;] iwlagn_mac_tx+0x23/0x40 [iwldvm]
 [&lt;fd8c98b6&gt;] __ieee80211_tx+0xf6/0x3c0 [mac80211]
 [&lt;fd8cbe00&gt;] ieee80211_tx+0xd0/0x100 [mac80211]
 [&lt;fd8cc176&gt;] ieee80211_xmit+0x96/0xe0 [mac80211]
 [&lt;fd8cc578&gt;] ieee80211_subif_start_xmit+0x348/0xc80 [mac80211]
 [&lt;c1445207&gt;] dev_hard_start_xmit+0x337/0x6d0
 [&lt;c145eee9&gt;] sch_direct_xmit+0xa9/0x210
 [&lt;c14462c0&gt;] dev_queue_xmit+0x1b0/0x8e0

Fortunately, solving this problem is easy as the station
is being destroyed, so such transmit packets can only
happen due to races. Instead of trying to close the race
just let the race not reach the drivers by making two
changes:
 1) remove the explicit aggregation session teardown in
    the managed mode code, the same thing will be done
    when the station is removed, in __sta_info_destroy.
 2) When aggregation stop with AGG_STOP_DESTROY_STA is
    requested, leave the tid_tx data around as stopped.
    It will be cleared and freed in cleanup_single_sta
    later, but until then any racy packets will be put
    onto the tid_tx pending queue instead of transmitted
    which is fine since the station is being removed.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
</content>
</entry>
<entry>
<title>mac80211: improve aggregation debug messages</title>
<updated>2013-01-18T20:55:15Z</updated>
<author>
<name>Johannes Berg</name>
</author>
<published>2013-01-16T09:39:44Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=0a214d3f7e5041685ebff054628a4354bedd78c3'/>
<id>urn:sha1:0a214d3f7e5041685ebff054628a4354bedd78c3</id>
<content type='text'>
A lot of the aggregation messages don't indicate the
station so they're hard to understand if there are
multiple sessions in progress. Make that easier by
adding the MAC address to most messages. Also add
the TID if it wasn't already there.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
</content>
</entry>
<entry>
<title>mac80211: split TX aggregation stop action</title>
<updated>2013-01-03T12:01:42Z</updated>
<author>
<name>Johannes Berg</name>
</author>
<published>2012-07-18T11:51:25Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=18b559d5db47c86b10c14590aa2d26c0243c39e4'/>
<id>urn:sha1:18b559d5db47c86b10c14590aa2d26c0243c39e4</id>
<content type='text'>
When TX aggregation is stopped, there are a few
different cases:
 - connection with the peer was dropped
 - session stop was requested locally
 - session stop was requested by the peer
 - connection was dropped while a session is stopping

The behaviour in these cases should be different, if
the connection is dropped then the driver should drop
all frames, otherwise the frames may continue to be
transmitted, aggregated in the case of a locally
requested session stop or unaggregated in the case of
the peer requesting session stop.

Split these different cases so that the driver can
act accordingly; however, treat local and remote stop
the same way and ask the driver to not send frames as
aggregated packets any more.

In the case of connection drop, the stop callback the
driver is otherwise supposed to call is no longer
required.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
</content>
</entry>
<entry>
<title>mac80211: move ieee80211_remove_tid_tx function</title>
<updated>2013-01-03T12:01:42Z</updated>
<author>
<name>Johannes Berg</name>
</author>
<published>2012-12-28T08:43:03Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=30bf5f1f433c7612857ed13c50525945c483dfe0'/>
<id>urn:sha1:30bf5f1f433c7612857ed13c50525945c483dfe0</id>
<content type='text'>
To call it from ___ieee80211_stop_tx_ba_session,
move the function and dependencies up.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
</content>
</entry>
<entry>
<title>mac80211: split out aggregation TX removal</title>
<updated>2013-01-03T12:01:41Z</updated>
<author>
<name>Johannes Berg</name>
</author>
<published>2012-07-18T12:12:44Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=faec12ee2dd92edc09f75aab3d8c5085102052c5'/>
<id>urn:sha1:faec12ee2dd92edc09f75aab3d8c5085102052c5</id>
<content type='text'>
Create the function ieee80211_remove_tid_tx to call
it from ___ieee80211_stop_tx_ba_session later.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
</content>
</entry>
<entry>
<title>mac80211: split aggregation stop by reason</title>
<updated>2013-01-03T12:01:41Z</updated>
<author>
<name>Johannes Berg</name>
</author>
<published>2012-07-18T11:31:31Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c82c4a80bbb9c8ffa1d783070a8caa37f2db45b6'/>
<id>urn:sha1:c82c4a80bbb9c8ffa1d783070a8caa37f2db45b6</id>
<content type='text'>
The initiator/tx doesn't really identify why an
aggregation session is stopped, give a reason
for stopping that more clearly identifies what's
going on. This will help tell the driver clearly
what is expected of it.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
</content>
</entry>
<entry>
<title>mac80211: warn only once if ampdu_action isn't assigned</title>
<updated>2012-12-07T08:12:50Z</updated>
<author>
<name>Chaitanya</name>
</author>
<published>2012-12-07T06:49:34Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=50c16e2251b63224c05e35d80d434a479a312b4a'/>
<id>urn:sha1:50c16e2251b63224c05e35d80d434a479a312b4a</id>
<content type='text'>
New drivers that might not support ampdu_action yet while in
development cause a lot of warnings, use WARN_ON_ONCE instead.

Signed-off-by: T Krushna Chaitanya &lt;chaitanyatk@posedge.com&gt;
Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
</content>
</entry>
<entry>
<title>mac80211: introduce IEEE80211_NUM_TIDS and use it</title>
<updated>2012-11-19T14:44:00Z</updated>
<author>
<name>Johannes Berg</name>
</author>
<published>2012-11-14T22:22:21Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=5a306f5887d5fd840beb8ea872897fa89e8fcdef'/>
<id>urn:sha1:5a306f5887d5fd840beb8ea872897fa89e8fcdef</id>
<content type='text'>
Introduce IEEE80211_NUM_TIDS in the generic 802.11
header file and use it in place of STA_TID_NUM and
NUM_RX_DATA_QUEUES which are both really the number
of TIDs.

Signed-off-by: Johannes Berg &lt;johannes.berg@intel.com&gt;
</content>
</entry>
</feed>
