Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 86c8fc4b authored by David S. Miller's avatar David S. Miller
Browse files

Merge tag 'mac80211-for-davem-2014-12-18' of...

Merge tag 'mac80211-for-davem-2014-12-18' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211



Johannes Berg says:

====================
pull-request: mac80211 2014-12-18

Also from me a first pull request - we have a number of really old
issues that happened to crop up now with new work (or just more testing)
in the right areas as well as some small bugs newly introduced in 3.19.

Let me know if there are any problems.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 7dce675b 28a9bc68
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -1011,6 +1011,10 @@ ieee80211_vif_use_reserved_reassign(struct ieee80211_sub_if_data *sdata)


	ieee80211_vif_update_chandef(sdata, &sdata->reserved_chandef);
	ieee80211_vif_update_chandef(sdata, &sdata->reserved_chandef);


	ieee80211_recalc_smps_chanctx(local, new_ctx);
	ieee80211_recalc_radar_chanctx(local, new_ctx);
	ieee80211_recalc_chanctx_min_def(local, new_ctx);

	if (changed)
	if (changed)
		ieee80211_bss_info_change_notify(sdata, changed);
		ieee80211_bss_info_change_notify(sdata, changed);


+1 −1
Original line number Original line Diff line number Diff line
@@ -656,7 +656,7 @@ void ieee80211_free_sta_keys(struct ieee80211_local *local,
	int i;
	int i;


	mutex_lock(&local->key_mtx);
	mutex_lock(&local->key_mtx);
	for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
	for (i = 0; i < ARRAY_SIZE(sta->gtk); i++) {
		key = key_mtx_dereference(local, sta->gtk[i]);
		key = key_mtx_dereference(local, sta->gtk[i]);
		if (!key)
		if (!key)
			continue;
			continue;
+1 −0
Original line number Original line Diff line number Diff line
@@ -174,6 +174,7 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
	if (!(ht_cap->cap_info &
	if (!(ht_cap->cap_info &
	      cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40))) {
	      cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40))) {
		ret = IEEE80211_STA_DISABLE_40MHZ;
		ret = IEEE80211_STA_DISABLE_40MHZ;
		vht_chandef = *chandef;
		goto out;
		goto out;
	}
	}


+6 −5
Original line number Original line Diff line number Diff line
@@ -1761,14 +1761,14 @@ ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx)
	sc = le16_to_cpu(hdr->seq_ctrl);
	sc = le16_to_cpu(hdr->seq_ctrl);
	frag = sc & IEEE80211_SCTL_FRAG;
	frag = sc & IEEE80211_SCTL_FRAG;


	if (likely(!ieee80211_has_morefrags(fc) && frag == 0))
		goto out;

	if (is_multicast_ether_addr(hdr->addr1)) {
	if (is_multicast_ether_addr(hdr->addr1)) {
		rx->local->dot11MulticastReceivedFrameCount++;
		rx->local->dot11MulticastReceivedFrameCount++;
		goto out;
		goto out_no_led;
	}
	}


	if (likely(!ieee80211_has_morefrags(fc) && frag == 0))
		goto out;

	I802_DEBUG_INC(rx->local->rx_handlers_fragments);
	I802_DEBUG_INC(rx->local->rx_handlers_fragments);


	if (skb_linearize(rx->skb))
	if (skb_linearize(rx->skb))
@@ -1859,9 +1859,10 @@ ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx)
	status->rx_flags |= IEEE80211_RX_FRAGMENTED;
	status->rx_flags |= IEEE80211_RX_FRAGMENTED;


 out:
 out:
	ieee80211_led_rx(rx->local);
 out_no_led:
	if (rx->sta)
	if (rx->sta)
		rx->sta->rx_packets++;
		rx->sta->rx_packets++;
	ieee80211_led_rx(rx->local);
	return RX_CONTINUE;
	return RX_CONTINUE;
}
}


+6 −3
Original line number Original line Diff line number Diff line
@@ -603,7 +603,7 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
{
{
	struct ieee80211_sta_ht_cap *ht_cap;
	struct ieee80211_sta_ht_cap *ht_cap;
	struct ieee80211_sta_vht_cap *vht_cap;
	struct ieee80211_sta_vht_cap *vht_cap;
	u32 width, control_freq;
	u32 width, control_freq, cap;


	if (WARN_ON(!cfg80211_chandef_valid(chandef)))
	if (WARN_ON(!cfg80211_chandef_valid(chandef)))
		return false;
		return false;
@@ -643,7 +643,8 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
			return false;
			return false;
		break;
		break;
	case NL80211_CHAN_WIDTH_80P80:
	case NL80211_CHAN_WIDTH_80P80:
		if (!(vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ))
		cap = vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK;
		if (cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)
			return false;
			return false;
	case NL80211_CHAN_WIDTH_80:
	case NL80211_CHAN_WIDTH_80:
		if (!vht_cap->vht_supported)
		if (!vht_cap->vht_supported)
@@ -654,7 +655,9 @@ bool cfg80211_chandef_usable(struct wiphy *wiphy,
	case NL80211_CHAN_WIDTH_160:
	case NL80211_CHAN_WIDTH_160:
		if (!vht_cap->vht_supported)
		if (!vht_cap->vht_supported)
			return false;
			return false;
		if (!(vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ))
		cap = vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK;
		if (cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ &&
		    cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)
			return false;
			return false;
		prohibited_flags |= IEEE80211_CHAN_NO_160MHZ;
		prohibited_flags |= IEEE80211_CHAN_NO_160MHZ;
		width = 160;
		width = 160;
Loading