Commit 9146fe28 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge tag 'wireless-2026-11-22' of...

Merge tag 'wireless-2026-11-22' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless

Johannes Berg says:

====================
Another set of updates:
 - various small fixes for ath10k/ath12k/mwifiex/rsi
 - cfg80211 fix for HE bitrate overflow
 - mac80211 fixes
   - S1G beacon handling in scan
   - skb tailroom handling for HW encryption
   - CSA fix for multi-link
   - handling of disabled links during association

* tag 'wireless-2026-11-22' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless:
  wifi: cfg80211: ignore link disabled flag from userspace
  wifi: mac80211: apply advertised TTLM from association response
  wifi: mac80211: parse all TTLM entries
  wifi: mac80211: don't increment crypto_tx_tailroom_needed_cnt twice
  wifi: mac80211: don't perform DA check on S1G beacon
  wifi: ath12k: Fix wrong P2P device link id issue
  wifi: ath12k: fix dead lock while flushing management frames
  wifi: ath12k: Fix scan state stuck in ABORTING after cancel_remain_on_channel
  wifi: ath12k: cancel scan only on active scan vdev
  wifi: mwifiex: Fix a loop in mwifiex_update_ampdu_rxwinsize()
  wifi: mac80211: correctly check if CSA is active
  wifi: cfg80211: Fix bitrate calculation overflow for HE rates
  wifi: rsi: Fix memory corruption due to not set vif driver data size
  wifi: ath12k: don't force radio frequency check in freq_to_idx()
  wifi: ath12k: fix dma_free_coherent() pointer
  wifi: ath10k: fix dma_free_coherent() pointer
====================

Link: https://patch.msgid.link/20260122110248.15450-3-johannes@sipsolutions.net


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 5778d65d 50b35989
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -1727,8 +1727,8 @@ static void _ath10k_ce_free_pipe(struct ath10k *ar, int ce_id)
				  (ce_state->src_ring->nentries *
				   sizeof(struct ce_desc) +
				   CE_DESC_RING_ALIGN),
				  ce_state->src_ring->base_addr_owner_space,
				  ce_state->src_ring->base_addr_ce_space);
				  ce_state->src_ring->base_addr_owner_space_unaligned,
				  ce_state->src_ring->base_addr_ce_space_unaligned);
		kfree(ce_state->src_ring);
	}

@@ -1737,8 +1737,8 @@ static void _ath10k_ce_free_pipe(struct ath10k *ar, int ce_id)
				  (ce_state->dest_ring->nentries *
				   sizeof(struct ce_desc) +
				   CE_DESC_RING_ALIGN),
				  ce_state->dest_ring->base_addr_owner_space,
				  ce_state->dest_ring->base_addr_ce_space);
				  ce_state->dest_ring->base_addr_owner_space_unaligned,
				  ce_state->dest_ring->base_addr_ce_space_unaligned);
		kfree(ce_state->dest_ring);
	}

@@ -1758,8 +1758,8 @@ static void _ath10k_ce_free_pipe_64(struct ath10k *ar, int ce_id)
				  (ce_state->src_ring->nentries *
				   sizeof(struct ce_desc_64) +
				   CE_DESC_RING_ALIGN),
				  ce_state->src_ring->base_addr_owner_space,
				  ce_state->src_ring->base_addr_ce_space);
				  ce_state->src_ring->base_addr_owner_space_unaligned,
				  ce_state->src_ring->base_addr_ce_space_unaligned);
		kfree(ce_state->src_ring);
	}

@@ -1768,8 +1768,8 @@ static void _ath10k_ce_free_pipe_64(struct ath10k *ar, int ce_id)
				  (ce_state->dest_ring->nentries *
				   sizeof(struct ce_desc_64) +
				   CE_DESC_RING_ALIGN),
				  ce_state->dest_ring->base_addr_owner_space,
				  ce_state->dest_ring->base_addr_ce_space);
				  ce_state->dest_ring->base_addr_owner_space_unaligned,
				  ce_state->dest_ring->base_addr_ce_space_unaligned);
		kfree(ce_state->dest_ring);
	}

+6 −6
Original line number Diff line number Diff line
@@ -984,8 +984,8 @@ void ath12k_ce_free_pipes(struct ath12k_base *ab)
			dma_free_coherent(ab->dev,
					  pipe->src_ring->nentries * desc_sz +
					  CE_DESC_RING_ALIGN,
					  pipe->src_ring->base_addr_owner_space,
					  pipe->src_ring->base_addr_ce_space);
					  pipe->src_ring->base_addr_owner_space_unaligned,
					  pipe->src_ring->base_addr_ce_space_unaligned);
			kfree(pipe->src_ring);
			pipe->src_ring = NULL;
		}
@@ -995,8 +995,8 @@ void ath12k_ce_free_pipes(struct ath12k_base *ab)
			dma_free_coherent(ab->dev,
					  pipe->dest_ring->nentries * desc_sz +
					  CE_DESC_RING_ALIGN,
					  pipe->dest_ring->base_addr_owner_space,
					  pipe->dest_ring->base_addr_ce_space);
					  pipe->dest_ring->base_addr_owner_space_unaligned,
					  pipe->dest_ring->base_addr_ce_space_unaligned);
			kfree(pipe->dest_ring);
			pipe->dest_ring = NULL;
		}
@@ -1007,8 +1007,8 @@ void ath12k_ce_free_pipes(struct ath12k_base *ab)
			dma_free_coherent(ab->dev,
					  pipe->status_ring->nentries * desc_sz +
					  CE_DESC_RING_ALIGN,
					  pipe->status_ring->base_addr_owner_space,
					  pipe->status_ring->base_addr_ce_space);
					  pipe->status_ring->base_addr_owner_space_unaligned,
					  pipe->status_ring->base_addr_ce_space_unaligned);
			kfree(pipe->status_ring);
			pipe->status_ring = NULL;
		}
+10 −6
Original line number Diff line number Diff line
@@ -5495,7 +5495,8 @@ static void ath12k_mac_op_cancel_hw_scan(struct ieee80211_hw *hw,

	for_each_set_bit(link_id, &links_map, ATH12K_NUM_MAX_LINKS) {
		arvif = wiphy_dereference(hw->wiphy, ahvif->link[link_id]);
		if (!arvif || arvif->is_started)
		if (!arvif || !arvif->is_created ||
		    arvif->ar->scan.arvif != arvif)
			continue;

		ar = arvif->ar;
@@ -9172,6 +9173,9 @@ static void ath12k_mac_op_tx(struct ieee80211_hw *hw,
			return;
		}
	} else {
		if (vif->type == NL80211_IFTYPE_P2P_DEVICE)
			link_id = ATH12K_FIRST_SCAN_LINK;
		else
			link_id = 0;
	}

@@ -12142,6 +12146,9 @@ static void ath12k_mac_op_flush(struct ieee80211_hw *hw, struct ieee80211_vif *v
	if (drop)
		return;

	for_each_ar(ah, ar, i)
		wiphy_work_flush(hw->wiphy, &ar->wmi_mgmt_tx_work);

	/* vif can be NULL when flush() is considered for hw */
	if (!vif) {
		for_each_ar(ah, ar, i)
@@ -12149,9 +12156,6 @@ static void ath12k_mac_op_flush(struct ieee80211_hw *hw, struct ieee80211_vif *v
		return;
	}

	for_each_ar(ah, ar, i)
		wiphy_work_flush(hw->wiphy, &ar->wmi_mgmt_tx_work);

	ahvif = ath12k_vif_to_ahvif(vif);
	links = ahvif->links_map;
	for_each_set_bit(link_id, &links, IEEE80211_MLD_MAX_NUM_LINKS) {
@@ -13343,7 +13347,7 @@ static int ath12k_mac_op_cancel_remain_on_channel(struct ieee80211_hw *hw,
	ath12k_scan_abort(ar);

	cancel_delayed_work_sync(&ar->scan.timeout);
	wiphy_work_cancel(hw->wiphy, &ar->scan.vdev_clean_wk);
	wiphy_work_flush(hw->wiphy, &ar->scan.vdev_clean_wk);

	return 0;
}
+1 −8
Original line number Diff line number Diff line
@@ -6575,17 +6575,10 @@ static int freq_to_idx(struct ath12k *ar, int freq)
		if (!sband)
			continue;

		for (ch = 0; ch < sband->n_channels; ch++, idx++) {
			if (sband->channels[ch].center_freq <
			    KHZ_TO_MHZ(ar->freq_range.start_freq) ||
			    sband->channels[ch].center_freq >
			    KHZ_TO_MHZ(ar->freq_range.end_freq))
				continue;

		for (ch = 0; ch < sband->n_channels; ch++, idx++)
			if (sband->channels[ch].center_freq == freq)
				goto exit;
	}
	}

exit:
	return idx;
+3 −3
Original line number Diff line number Diff line
@@ -825,7 +825,7 @@ void mwifiex_update_rxreor_flags(struct mwifiex_adapter *adapter, u8 flags)
static void mwifiex_update_ampdu_rxwinsize(struct mwifiex_adapter *adapter,
					   bool coex_flag)
{
	u8 i;
	u8 i, j;
	u32 rx_win_size;
	struct mwifiex_private *priv;

@@ -863,8 +863,8 @@ static void mwifiex_update_ampdu_rxwinsize(struct mwifiex_adapter *adapter,
		if (rx_win_size != priv->add_ba_param.rx_win_size) {
			if (!priv->media_connected)
				continue;
			for (i = 0; i < MAX_NUM_TID; i++)
				mwifiex_11n_delba(priv, i);
			for (j = 0; j < MAX_NUM_TID; j++)
				mwifiex_11n_delba(priv, j);
		}
	}
}
Loading