Commit 8fa74e3a authored by Johannes Berg's avatar Johannes Berg

Merge branch 'mac80211' into mac80211-next

This was needed to avoid conflicts in the minstrel changes.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parents b08cc24e 11b2357d
...@@ -3522,7 +3522,7 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy, ...@@ -3522,7 +3522,7 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
rcu_read_lock(); rcu_read_lock();
chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
if (chanctx_conf) { if (chanctx_conf) {
*chandef = chanctx_conf->def; *chandef = sdata->vif.bss_conf.chandef;
ret = 0; ret = 0;
} else if (local->open_count > 0 && } else if (local->open_count > 0 &&
local->open_count == local->monitors && local->open_count == local->monitors &&
......
...@@ -448,7 +448,7 @@ static void rate_fixup_ratelist(struct ieee80211_vif *vif, ...@@ -448,7 +448,7 @@ static void rate_fixup_ratelist(struct ieee80211_vif *vif,
*/ */
if (!(rates[0].flags & IEEE80211_TX_RC_MCS)) { if (!(rates[0].flags & IEEE80211_TX_RC_MCS)) {
u32 basic_rates = vif->bss_conf.basic_rates; u32 basic_rates = vif->bss_conf.basic_rates;
s8 baserate = basic_rates ? ffs(basic_rates - 1) : 0; s8 baserate = basic_rates ? ffs(basic_rates) - 1 : 0;
rate = &sband->bitrates[rates[0].idx]; rate = &sband->bitrates[rates[0].idx];
......
...@@ -62,14 +62,14 @@ minstrel_stats_open(struct inode *inode, struct file *file) ...@@ -62,14 +62,14 @@ minstrel_stats_open(struct inode *inode, struct file *file)
unsigned int i, tp, prob, eprob; unsigned int i, tp, prob, eprob;
char *p; char *p;
ms = kmalloc(sizeof(*ms) + 4096, GFP_KERNEL); ms = kmalloc(2048, GFP_KERNEL);
if (!ms) if (!ms)
return -ENOMEM; return -ENOMEM;
file->private_data = ms; file->private_data = ms;
p = ms->buf; p = ms->buf;
p += sprintf(p, "rate throughput ewma prob this prob " p += sprintf(p, "rate tpt eprob *prob"
"this succ/attempt success attempts\n"); " *ok(*cum) ok( cum)\n");
for (i = 0; i < mi->n_rates; i++) { for (i = 0; i < mi->n_rates; i++) {
struct minstrel_rate *mr = &mi->r[i]; struct minstrel_rate *mr = &mi->r[i];
struct minstrel_rate_stats *mrs = &mi->r[i].stats; struct minstrel_rate_stats *mrs = &mi->r[i].stats;
...@@ -86,8 +86,8 @@ minstrel_stats_open(struct inode *inode, struct file *file) ...@@ -86,8 +86,8 @@ minstrel_stats_open(struct inode *inode, struct file *file)
prob = MINSTREL_TRUNC(mrs->cur_prob * 1000); prob = MINSTREL_TRUNC(mrs->cur_prob * 1000);
eprob = MINSTREL_TRUNC(mrs->probability * 1000); eprob = MINSTREL_TRUNC(mrs->probability * 1000);
p += sprintf(p, " %6u.%1u %6u.%1u %6u.%1u " p += sprintf(p, " %4u.%1u %3u.%1u %3u.%1u"
" %3u(%3u) %8llu %8llu\n", " %4u(%4u) %9llu(%9llu)\n",
tp / 10, tp % 10, tp / 10, tp % 10,
eprob / 10, eprob % 10, eprob / 10, eprob % 10,
prob / 10, prob % 10, prob / 10, prob % 10,
...@@ -102,6 +102,8 @@ minstrel_stats_open(struct inode *inode, struct file *file) ...@@ -102,6 +102,8 @@ minstrel_stats_open(struct inode *inode, struct file *file)
mi->sample_packets); mi->sample_packets);
ms->len = p - ms->buf; ms->len = p - ms->buf;
WARN_ON(ms->len + sizeof(*ms) > 2048);
return 0; return 0;
} }
......
...@@ -63,8 +63,8 @@ minstrel_ht_stats_dump(struct minstrel_ht_sta *mi, int i, char *p) ...@@ -63,8 +63,8 @@ minstrel_ht_stats_dump(struct minstrel_ht_sta *mi, int i, char *p)
prob = MINSTREL_TRUNC(mr->cur_prob * 1000); prob = MINSTREL_TRUNC(mr->cur_prob * 1000);
eprob = MINSTREL_TRUNC(mr->probability * 1000); eprob = MINSTREL_TRUNC(mr->probability * 1000);
p += sprintf(p, " %6u.%1u %6u.%1u %6u.%1u " p += sprintf(p, " %4u.%1u %3u.%1u %3u.%1u "
"%3u %3u(%3u) %8llu %8llu\n", "%3u %4u(%4u) %9llu(%9llu)\n",
tp / 10, tp % 10, tp / 10, tp % 10,
eprob / 10, eprob % 10, eprob / 10, eprob % 10,
prob / 10, prob % 10, prob / 10, prob % 10,
...@@ -96,14 +96,15 @@ minstrel_ht_stats_open(struct inode *inode, struct file *file) ...@@ -96,14 +96,15 @@ minstrel_ht_stats_open(struct inode *inode, struct file *file)
return ret; return ret;
} }
ms = kmalloc(sizeof(*ms) + 8192, GFP_KERNEL); ms = kmalloc(8192, GFP_KERNEL);
if (!ms) if (!ms)
return -ENOMEM; return -ENOMEM;
file->private_data = ms; file->private_data = ms;
p = ms->buf; p = ms->buf;
p += sprintf(p, "type rate throughput ewma prob " p += sprintf(p, "type rate tpt eprob *prob "
"this prob retry this succ/attempt success attempts\n"); "ret *ok(*cum) ok( cum)\n");
p = minstrel_ht_stats_dump(mi, max_mcs, p); p = minstrel_ht_stats_dump(mi, max_mcs, p);
for (i = 0; i < max_mcs; i++) for (i = 0; i < max_mcs; i++)
...@@ -118,6 +119,8 @@ minstrel_ht_stats_open(struct inode *inode, struct file *file) ...@@ -118,6 +119,8 @@ minstrel_ht_stats_open(struct inode *inode, struct file *file)
MINSTREL_TRUNC(mi->avg_ampdu_len * 10) % 10); MINSTREL_TRUNC(mi->avg_ampdu_len * 10) % 10);
ms->len = p - ms->buf; ms->len = p - ms->buf;
WARN_ON(ms->len + sizeof(*ms) > 8192);
return nonseekable_open(inode, file); return nonseekable_open(inode, file);
} }
......
...@@ -336,6 +336,7 @@ struct ieee80211_tx_latency_stat { ...@@ -336,6 +336,7 @@ struct ieee80211_tx_latency_stat {
* @known_smps_mode: the smps_mode the client thinks we are in. Relevant for * @known_smps_mode: the smps_mode the client thinks we are in. Relevant for
* AP only. * AP only.
* @cipher_scheme: optional cipher scheme for this station * @cipher_scheme: optional cipher scheme for this station
* @last_tdls_pkt_time: holds the time in jiffies of last TDLS pkt ACKed
*/ */
struct sta_info { struct sta_info {
/* General information, mostly static */ /* General information, mostly static */
......
...@@ -329,7 +329,7 @@ static atomic_t rfkill_input_disabled = ATOMIC_INIT(0); ...@@ -329,7 +329,7 @@ static atomic_t rfkill_input_disabled = ATOMIC_INIT(0);
/** /**
* __rfkill_switch_all - Toggle state of all switches of given type * __rfkill_switch_all - Toggle state of all switches of given type
* @type: type of interfaces to be affected * @type: type of interfaces to be affected
* @state: the new state * @blocked: the new state
* *
* This function sets the state of all switches of given type, * This function sets the state of all switches of given type,
* unless a specific switch is claimed by userspace (in which case, * unless a specific switch is claimed by userspace (in which case,
...@@ -353,7 +353,7 @@ static void __rfkill_switch_all(const enum rfkill_type type, bool blocked) ...@@ -353,7 +353,7 @@ static void __rfkill_switch_all(const enum rfkill_type type, bool blocked)
/** /**
* rfkill_switch_all - Toggle state of all switches of given type * rfkill_switch_all - Toggle state of all switches of given type
* @type: type of interfaces to be affected * @type: type of interfaces to be affected
* @state: the new state * @blocked: the new state
* *
* Acquires rfkill_global_mutex and calls __rfkill_switch_all(@type, @state). * Acquires rfkill_global_mutex and calls __rfkill_switch_all(@type, @state).
* Please refer to __rfkill_switch_all() for details. * Please refer to __rfkill_switch_all() for details.
......
...@@ -6040,6 +6040,7 @@ static int nl80211_channel_switch(struct sk_buff *skb, struct genl_info *info) ...@@ -6040,6 +6040,7 @@ static int nl80211_channel_switch(struct sk_buff *skb, struct genl_info *info)
int err; int err;
bool need_new_beacon = false; bool need_new_beacon = false;
int len, i; int len, i;
u32 cs_count;
if (!rdev->ops->channel_switch || if (!rdev->ops->channel_switch ||
!(rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH)) !(rdev->wiphy.flags & WIPHY_FLAG_HAS_CHANNEL_SWITCH))
...@@ -6076,7 +6077,14 @@ static int nl80211_channel_switch(struct sk_buff *skb, struct genl_info *info) ...@@ -6076,7 +6077,14 @@ static int nl80211_channel_switch(struct sk_buff *skb, struct genl_info *info)
if (need_new_beacon && !info->attrs[NL80211_ATTR_CSA_IES]) if (need_new_beacon && !info->attrs[NL80211_ATTR_CSA_IES])
return -EINVAL; return -EINVAL;
params.count = nla_get_u32(info->attrs[NL80211_ATTR_CH_SWITCH_COUNT]); /* Even though the attribute is u32, the specification says
* u8, so let's make sure we don't overflow.
*/
cs_count = nla_get_u32(info->attrs[NL80211_ATTR_CH_SWITCH_COUNT]);
if (cs_count > 255)
return -EINVAL;
params.count = cs_count;
if (!need_new_beacon) if (!need_new_beacon)
goto skip_beacons; goto skip_beacons;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment