Here are a few fixes for mac80211. One has been discussed for a while
and adds a terminating NUL-byte to the alpha2 sent to userspace, which shouldn't be necessary but since many places treat it as a string we couldn't move to just sending two bytes. In addition to that, we have two VLAN fixes from Felix, a mesh fix, a fix for the recently introduced RX aggregation offload, a revert for a broken patch (that luckily didn't really cause any harm) and a small fix for alignment in debugfs. -----BEGIN PGP SIGNATURE----- iQIcBAABCAAGBQJUAFrmAAoJEDBSmw7B7bqr79AP/1yGi9lkv/wWUs5y0AhUSen9 850MU26BBlyAAFSz11xqgaEeRmeBeqhR3K7w/M02TX0CHxBzMqMZfyE//tq0UJaI ZwZmtyQmdMiOSNKignTIIx7OHTioq0wrGKb6O2UvKoJfTlB9t01jCC4jmCTF5Vos 6ReF7NaZEbxW6XDOsClNTAtIa1c6n1RQ5VbDIEL5Vfvqv8LbcobduF8WcYl80eIQ +EvIHtUm/Luxg6DblibgEVtwYOtNpvRz4pofdw3xoSHAnF+zhXbUr0dUjpkBNA7o vWboCBl14Qn1M7pOJZ0+TBzFmquAr6CDbDvArVCH01Swh27EUDQUcHQAggGpT71w DFgWHOYP0UCB6Y4U0GjBehy8PeuytqJLBSceKVud7DDqd8fY+Lq3MMyicIk0aw3o IIDLWrujkCBXsdfuxQETmYxHU05WHSuYOCTgGSqbq3QPTWm8pBGWTdbk+1t/0FyH cGLJOWs/jCrtHdzDj6TH+kL8NmvwB7sC9MT45qG0ilevmPW25yrnTJPEMEvFBqvZ lnaqiX6D1kGNZd09CxgSIhxrQi+N0Yg+UlLa4IUtOIqnQussOC3xH2U5qTufdpa1 Gi9aCkBGVKQiObPWucf2QB4t1sZ18rxBhrAelZhQPLTKrnsuLhpcVBlU+L6ScCAk FVni4HZH2IGtDQ577k10 =G/pB -----END PGP SIGNATURE----- Merge tag 'mac80211-for-john-2014-08-29' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211 Johannes Berg <johannes@sipsolutions.net> says: "Here are a few fixes for mac80211. One has been discussed for a while and adds a terminating NUL-byte to the alpha2 sent to userspace, which shouldn't be necessary but since many places treat it as a string we couldn't move to just sending two bytes. In addition to that, we have two VLAN fixes from Felix, a mesh fix, a fix for the recently introduced RX aggregation offload, a revert for a broken patch (that luckily didn't really cause any harm) and a small fix for alignment in debugfs." Signed-off-by: John W. Linville <linville@redhat.com>
This commit is contained in:
commit
190355cc06
|
@ -167,7 +167,7 @@ struct ieee80211_reg_rule {
|
||||||
struct ieee80211_regdomain {
|
struct ieee80211_regdomain {
|
||||||
struct rcu_head rcu_head;
|
struct rcu_head rcu_head;
|
||||||
u32 n_reg_rules;
|
u32 n_reg_rules;
|
||||||
char alpha2[2];
|
char alpha2[3];
|
||||||
enum nl80211_dfs_regions dfs_region;
|
enum nl80211_dfs_regions dfs_region;
|
||||||
struct ieee80211_reg_rule reg_rules[];
|
struct ieee80211_reg_rule reg_rules[];
|
||||||
};
|
};
|
||||||
|
|
|
@ -541,6 +541,8 @@ static void ieee80211_recalc_chanctx_chantype(struct ieee80211_local *local,
|
||||||
continue;
|
continue;
|
||||||
if (rcu_access_pointer(sdata->vif.chanctx_conf) != conf)
|
if (rcu_access_pointer(sdata->vif.chanctx_conf) != conf)
|
||||||
continue;
|
continue;
|
||||||
|
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (!compat)
|
if (!compat)
|
||||||
compat = &sdata->vif.bss_conf.chandef;
|
compat = &sdata->vif.bss_conf.chandef;
|
||||||
|
|
|
@ -167,7 +167,7 @@ static ssize_t sta_agg_status_read(struct file *file, char __user *userbuf,
|
||||||
p += scnprintf(p, sizeof(buf) + buf - p, "next dialog_token: %#02x\n",
|
p += scnprintf(p, sizeof(buf) + buf - p, "next dialog_token: %#02x\n",
|
||||||
sta->ampdu_mlme.dialog_token_allocator + 1);
|
sta->ampdu_mlme.dialog_token_allocator + 1);
|
||||||
p += scnprintf(p, sizeof(buf) + buf - p,
|
p += scnprintf(p, sizeof(buf) + buf - p,
|
||||||
"TID\t\tRX active\tDTKN\tSSN\t\tTX\tDTKN\tpending\n");
|
"TID\t\tRX\tDTKN\tSSN\t\tTX\tDTKN\tpending\n");
|
||||||
|
|
||||||
for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
|
for (i = 0; i < IEEE80211_NUM_TIDS; i++) {
|
||||||
tid_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[i]);
|
tid_rx = rcu_dereference(sta->ampdu_mlme.tid_rx[i]);
|
||||||
|
|
|
@ -1175,8 +1175,8 @@ static void ieee80211_iface_work(struct work_struct *work)
|
||||||
if (sta) {
|
if (sta) {
|
||||||
u16 last_seq;
|
u16 last_seq;
|
||||||
|
|
||||||
last_seq = le16_to_cpu(
|
last_seq = IEEE80211_SEQ_TO_SN(le16_to_cpu(
|
||||||
sta->last_seq_ctrl[rx_agg->tid]);
|
sta->last_seq_ctrl[rx_agg->tid]));
|
||||||
|
|
||||||
__ieee80211_start_rx_ba_session(sta,
|
__ieee80211_start_rx_ba_session(sta,
|
||||||
0, 0,
|
0, 0,
|
||||||
|
|
|
@ -959,7 +959,8 @@ mesh_plink_get_event(struct ieee80211_sub_if_data *sdata,
|
||||||
if (!matches_local)
|
if (!matches_local)
|
||||||
event = CNF_RJCT;
|
event = CNF_RJCT;
|
||||||
if (!mesh_plink_free_count(sdata) ||
|
if (!mesh_plink_free_count(sdata) ||
|
||||||
(sta->llid != llid || sta->plid != plid))
|
sta->llid != llid ||
|
||||||
|
(sta->plid && sta->plid != plid))
|
||||||
event = CNF_IGNR;
|
event = CNF_IGNR;
|
||||||
else
|
else
|
||||||
event = CNF_ACPT;
|
event = CNF_ACPT;
|
||||||
|
@ -1080,6 +1081,10 @@ mesh_process_plink_frame(struct ieee80211_sub_if_data *sdata,
|
||||||
goto unlock_rcu;
|
goto unlock_rcu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 802.11-2012 13.3.7.2 - update plid on CNF if not set */
|
||||||
|
if (!sta->plid && event == CNF_ACPT)
|
||||||
|
sta->plid = plid;
|
||||||
|
|
||||||
changed |= mesh_plink_fsm(sdata, sta, event);
|
changed |= mesh_plink_fsm(sdata, sta, event);
|
||||||
|
|
||||||
unlock_rcu:
|
unlock_rcu:
|
||||||
|
|
|
@ -4376,8 +4376,7 @@ int ieee80211_mgd_assoc(struct ieee80211_sub_if_data *sdata,
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
|
|
||||||
if (bss->wmm_used && bss->uapsd_supported &&
|
if (bss->wmm_used && bss->uapsd_supported &&
|
||||||
(sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD) &&
|
(sdata->local->hw.flags & IEEE80211_HW_SUPPORTS_UAPSD)) {
|
||||||
sdata->wmm_acm != 0xff) {
|
|
||||||
assoc_data->uapsd = true;
|
assoc_data->uapsd = true;
|
||||||
ifmgd->flags |= IEEE80211_STA_UAPSD_ENABLED;
|
ifmgd->flags |= IEEE80211_STA_UAPSD_ENABLED;
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1094,8 +1094,11 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct ps_data *ps;
|
struct ps_data *ps;
|
||||||
|
|
||||||
if (sdata->vif.type == NL80211_IFTYPE_AP ||
|
if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
||||||
sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
|
sdata = container_of(sdata->bss, struct ieee80211_sub_if_data,
|
||||||
|
u.ap);
|
||||||
|
|
||||||
|
if (sdata->vif.type == NL80211_IFTYPE_AP)
|
||||||
ps = &sdata->bss->ps;
|
ps = &sdata->bss->ps;
|
||||||
else if (ieee80211_vif_is_mesh(&sdata->vif))
|
else if (ieee80211_vif_is_mesh(&sdata->vif))
|
||||||
ps = &sdata->u.mesh.ps;
|
ps = &sdata->u.mesh.ps;
|
||||||
|
|
Loading…
Reference in New Issue