mac80211: use RCU for RX aggregation
Currently we allocate some memory for each RX aggregation session and additionally keep a flag indicating whether or not it is valid. By using RCU to protect the pointer and making sure that the memory is fully set up before it becomes visible to the RX path, we can remove the need for the bool that indicates validity, as well as for locking on the RX path since it is always synchronised against itself, and we can guarantee that all other modifications are done when the structure is not visible to the RX path. The net result is that since we remove locking requirements from the RX path, we can in the future use any kind of lock for the setup and teardown code paths. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
c1475ca99e
commit
a87f736d94
@@ -125,12 +125,12 @@ static ssize_t sta_agg_status_read(struct file *file, char __user *userbuf,
|
||||
for (i = 0; i < STA_TID_NUM; i++) {
|
||||
p += scnprintf(p, sizeof(buf) + buf - p, "%02d", i);
|
||||
p += scnprintf(p, sizeof(buf) + buf - p, "\t\t%x",
|
||||
sta->ampdu_mlme.tid_active_rx[i]);
|
||||
!!sta->ampdu_mlme.tid_rx[i]);
|
||||
p += scnprintf(p, sizeof(buf) + buf - p, "\t%#.2x",
|
||||
sta->ampdu_mlme.tid_active_rx[i] ?
|
||||
sta->ampdu_mlme.tid_rx[i] ?
|
||||
sta->ampdu_mlme.tid_rx[i]->dialog_token : 0);
|
||||
p += scnprintf(p, sizeof(buf) + buf - p, "\t%#.3x",
|
||||
sta->ampdu_mlme.tid_active_rx[i] ?
|
||||
sta->ampdu_mlme.tid_rx[i] ?
|
||||
sta->ampdu_mlme.tid_rx[i]->ssn : 0);
|
||||
|
||||
p += scnprintf(p, sizeof(buf) + buf - p, "\t\t%x",
|
||||
|
Reference in New Issue
Block a user