diff options
Diffstat (limited to 'drivers/net/wireless/ath')
| -rw-r--r-- | drivers/net/wireless/ath/Makefile | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath10k/Makefile | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath10k/htt_rx.c | 122 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath10k/pci.c | 7 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath10k/rx_desc.h | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath5k/Makefile | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath5k/sysfs.c | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath5k/trace.h | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath6kl/trace.h | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/ath9k/Makefile | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/carl9170/version.h | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/wcn36xx/Makefile | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/wcn36xx/main.c | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/ath/wil6210/Makefile | 1 | 
14 files changed, 110 insertions, 33 deletions
| diff --git a/drivers/net/wireless/ath/Makefile b/drivers/net/wireless/ath/Makefile index 4cdebc7659dd..e4e460b5498e 100644 --- a/drivers/net/wireless/ath/Makefile +++ b/drivers/net/wireless/ath/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  obj-$(CONFIG_ATH5K)		+= ath5k/  obj-$(CONFIG_ATH9K_HW)		+= ath9k/  obj-$(CONFIG_CARL9170)		+= carl9170/ diff --git a/drivers/net/wireless/ath/ath10k/Makefile b/drivers/net/wireless/ath/ath10k/Makefile index 899b9b79f4ce..9492177e9063 100644 --- a/drivers/net/wireless/ath/ath10k/Makefile +++ b/drivers/net/wireless/ath/ath10k/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  obj-$(CONFIG_ATH10K) += ath10k_core.o  ath10k_core-y += mac.o \  		 debug.o \ diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c index a3f5dc78353f..0aeeb233af78 100644 --- a/drivers/net/wireless/ath/ath10k/htt_rx.c +++ b/drivers/net/wireless/ath/ath10k/htt_rx.c @@ -550,6 +550,11 @@ static int ath10k_htt_rx_crypto_param_len(struct ath10k *ar,  		return IEEE80211_TKIP_IV_LEN;  	case HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2:  		return IEEE80211_CCMP_HDR_LEN; +	case HTT_RX_MPDU_ENCRYPT_AES_CCM256_WPA2: +		return IEEE80211_CCMP_256_HDR_LEN; +	case HTT_RX_MPDU_ENCRYPT_AES_GCMP_WPA2: +	case HTT_RX_MPDU_ENCRYPT_AES_GCMP256_WPA2: +		return IEEE80211_GCMP_HDR_LEN;  	case HTT_RX_MPDU_ENCRYPT_WEP128:  	case HTT_RX_MPDU_ENCRYPT_WAPI:  		break; @@ -575,6 +580,11 @@ static int ath10k_htt_rx_crypto_tail_len(struct ath10k *ar,  		return IEEE80211_TKIP_ICV_LEN;  	case HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2:  		return IEEE80211_CCMP_MIC_LEN; +	case HTT_RX_MPDU_ENCRYPT_AES_CCM256_WPA2: +		return IEEE80211_CCMP_256_MIC_LEN; +	case HTT_RX_MPDU_ENCRYPT_AES_GCMP_WPA2: +	case HTT_RX_MPDU_ENCRYPT_AES_GCMP256_WPA2: +		return IEEE80211_GCMP_MIC_LEN;  	case HTT_RX_MPDU_ENCRYPT_WEP128:  	case HTT_RX_MPDU_ENCRYPT_WAPI:  		break; @@ -1051,9 +1061,21 @@ static void ath10k_htt_rx_h_undecap_raw(struct ath10k *ar,  	hdr = (void *)msdu->data;  	/* Tail */ -	if (status->flag & RX_FLAG_IV_STRIPPED) +	if (status->flag & RX_FLAG_IV_STRIPPED) {  		skb_trim(msdu, msdu->len -  			 ath10k_htt_rx_crypto_tail_len(ar, enctype)); +	} else { +		/* MIC */ +		if ((status->flag & RX_FLAG_MIC_STRIPPED) && +		    enctype == HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2) +			skb_trim(msdu, msdu->len - 8); + +		/* ICV */ +		if (status->flag & RX_FLAG_ICV_STRIPPED && +		    enctype != HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2) +			skb_trim(msdu, msdu->len - +				 ath10k_htt_rx_crypto_tail_len(ar, enctype)); +	}  	/* MMIC */  	if ((status->flag & RX_FLAG_MMIC_STRIPPED) && @@ -1075,7 +1097,8 @@ static void ath10k_htt_rx_h_undecap_raw(struct ath10k *ar,  static void ath10k_htt_rx_h_undecap_nwifi(struct ath10k *ar,  					  struct sk_buff *msdu,  					  struct ieee80211_rx_status *status, -					  const u8 first_hdr[64]) +					  const u8 first_hdr[64], +					  enum htt_rx_mpdu_encrypt_type enctype)  {  	struct ieee80211_hdr *hdr;  	struct htt_rx_desc *rxd; @@ -1083,6 +1106,7 @@ static void ath10k_htt_rx_h_undecap_nwifi(struct ath10k *ar,  	u8 da[ETH_ALEN];  	u8 sa[ETH_ALEN];  	int l3_pad_bytes; +	int bytes_aligned = ar->hw_params.decap_align_bytes;  	/* Delivered decapped frame:  	 * [nwifi 802.11 header] <-- replaced with 802.11 hdr @@ -1111,6 +1135,14 @@ static void ath10k_htt_rx_h_undecap_nwifi(struct ath10k *ar,  	/* push original 802.11 header */  	hdr = (struct ieee80211_hdr *)first_hdr;  	hdr_len = ieee80211_hdrlen(hdr->frame_control); + +	if (!(status->flag & RX_FLAG_IV_STRIPPED)) { +		memcpy(skb_push(msdu, +				ath10k_htt_rx_crypto_param_len(ar, enctype)), +		       (void *)hdr + round_up(hdr_len, bytes_aligned), +			ath10k_htt_rx_crypto_param_len(ar, enctype)); +	} +  	memcpy(skb_push(msdu, hdr_len), hdr, hdr_len);  	/* original 802.11 header has a different DA and in @@ -1171,6 +1203,7 @@ static void ath10k_htt_rx_h_undecap_eth(struct ath10k *ar,  	u8 sa[ETH_ALEN];  	int l3_pad_bytes;  	struct htt_rx_desc *rxd; +	int bytes_aligned = ar->hw_params.decap_align_bytes;  	/* Delivered decapped frame:  	 * [eth header] <-- replaced with 802.11 hdr & rfc1042/llc @@ -1199,6 +1232,14 @@ static void ath10k_htt_rx_h_undecap_eth(struct ath10k *ar,  	/* push original 802.11 header */  	hdr = (struct ieee80211_hdr *)first_hdr;  	hdr_len = ieee80211_hdrlen(hdr->frame_control); + +	if (!(status->flag & RX_FLAG_IV_STRIPPED)) { +		memcpy(skb_push(msdu, +				ath10k_htt_rx_crypto_param_len(ar, enctype)), +		       (void *)hdr + round_up(hdr_len, bytes_aligned), +			ath10k_htt_rx_crypto_param_len(ar, enctype)); +	} +  	memcpy(skb_push(msdu, hdr_len), hdr, hdr_len);  	/* original 802.11 header has a different DA and in @@ -1212,12 +1253,14 @@ static void ath10k_htt_rx_h_undecap_eth(struct ath10k *ar,  static void ath10k_htt_rx_h_undecap_snap(struct ath10k *ar,  					 struct sk_buff *msdu,  					 struct ieee80211_rx_status *status, -					 const u8 first_hdr[64]) +					 const u8 first_hdr[64], +					 enum htt_rx_mpdu_encrypt_type enctype)  {  	struct ieee80211_hdr *hdr;  	size_t hdr_len;  	int l3_pad_bytes;  	struct htt_rx_desc *rxd; +	int bytes_aligned = ar->hw_params.decap_align_bytes;  	/* Delivered decapped frame:  	 * [amsdu header] <-- replaced with 802.11 hdr @@ -1233,6 +1276,14 @@ static void ath10k_htt_rx_h_undecap_snap(struct ath10k *ar,  	hdr = (struct ieee80211_hdr *)first_hdr;  	hdr_len = ieee80211_hdrlen(hdr->frame_control); + +	if (!(status->flag & RX_FLAG_IV_STRIPPED)) { +		memcpy(skb_push(msdu, +				ath10k_htt_rx_crypto_param_len(ar, enctype)), +		       (void *)hdr + round_up(hdr_len, bytes_aligned), +			ath10k_htt_rx_crypto_param_len(ar, enctype)); +	} +  	memcpy(skb_push(msdu, hdr_len), hdr, hdr_len);  } @@ -1267,13 +1318,15 @@ static void ath10k_htt_rx_h_undecap(struct ath10k *ar,  					    is_decrypted);  		break;  	case RX_MSDU_DECAP_NATIVE_WIFI: -		ath10k_htt_rx_h_undecap_nwifi(ar, msdu, status, first_hdr); +		ath10k_htt_rx_h_undecap_nwifi(ar, msdu, status, first_hdr, +					      enctype);  		break;  	case RX_MSDU_DECAP_ETHERNET2_DIX:  		ath10k_htt_rx_h_undecap_eth(ar, msdu, status, first_hdr, enctype);  		break;  	case RX_MSDU_DECAP_8023_SNAP_LLC: -		ath10k_htt_rx_h_undecap_snap(ar, msdu, status, first_hdr); +		ath10k_htt_rx_h_undecap_snap(ar, msdu, status, first_hdr, +					     enctype);  		break;  	}  } @@ -1316,7 +1369,8 @@ static void ath10k_htt_rx_h_csum_offload(struct sk_buff *msdu)  static void ath10k_htt_rx_h_mpdu(struct ath10k *ar,  				 struct sk_buff_head *amsdu, -				 struct ieee80211_rx_status *status) +				 struct ieee80211_rx_status *status, +				 bool fill_crypt_header)  {  	struct sk_buff *first;  	struct sk_buff *last; @@ -1326,7 +1380,6 @@ static void ath10k_htt_rx_h_mpdu(struct ath10k *ar,  	enum htt_rx_mpdu_encrypt_type enctype;  	u8 first_hdr[64];  	u8 *qos; -	size_t hdr_len;  	bool has_fcs_err;  	bool has_crypto_err;  	bool has_tkip_err; @@ -1351,15 +1404,17 @@ static void ath10k_htt_rx_h_mpdu(struct ath10k *ar,  	 * decapped header. It'll be used for undecapping of each MSDU.  	 */  	hdr = (void *)rxd->rx_hdr_status; -	hdr_len = ieee80211_hdrlen(hdr->frame_control); -	memcpy(first_hdr, hdr, hdr_len); +	memcpy(first_hdr, hdr, RX_HTT_HDR_STATUS_LEN);  	/* Each A-MSDU subframe will use the original header as the base and be  	 * reported as a separate MSDU so strip the A-MSDU bit from QoS Ctl.  	 */  	hdr = (void *)first_hdr; -	qos = ieee80211_get_qos_ctl(hdr); -	qos[0] &= ~IEEE80211_QOS_CTL_A_MSDU_PRESENT; + +	if (ieee80211_is_data_qos(hdr->frame_control)) { +		qos = ieee80211_get_qos_ctl(hdr); +		qos[0] &= ~IEEE80211_QOS_CTL_A_MSDU_PRESENT; +	}  	/* Some attention flags are valid only in the last MSDU. */  	last = skb_peek_tail(amsdu); @@ -1406,9 +1461,14 @@ static void ath10k_htt_rx_h_mpdu(struct ath10k *ar,  		status->flag |= RX_FLAG_DECRYPTED;  		if (likely(!is_mgmt)) -			status->flag |= RX_FLAG_IV_STRIPPED | -					RX_FLAG_MMIC_STRIPPED; -} +			status->flag |= RX_FLAG_MMIC_STRIPPED; + +		if (fill_crypt_header) +			status->flag |= RX_FLAG_MIC_STRIPPED | +					RX_FLAG_ICV_STRIPPED; +		else +			status->flag |= RX_FLAG_IV_STRIPPED; +	}  	skb_queue_walk(amsdu, msdu) {  		ath10k_htt_rx_h_csum_offload(msdu); @@ -1424,6 +1484,9 @@ static void ath10k_htt_rx_h_mpdu(struct ath10k *ar,  		if (is_mgmt)  			continue; +		if (fill_crypt_header) +			continue; +  		hdr = (void *)msdu->data;  		hdr->frame_control &= ~__cpu_to_le16(IEEE80211_FCTL_PROTECTED);  	} @@ -1434,6 +1497,9 @@ static void ath10k_htt_rx_h_deliver(struct ath10k *ar,  				    struct ieee80211_rx_status *status)  {  	struct sk_buff *msdu; +	struct sk_buff *first_subframe; + +	first_subframe = skb_peek(amsdu);  	while ((msdu = __skb_dequeue(amsdu))) {  		/* Setup per-MSDU flags */ @@ -1442,6 +1508,13 @@ static void ath10k_htt_rx_h_deliver(struct ath10k *ar,  		else  			status->flag |= RX_FLAG_AMSDU_MORE; +		if (msdu == first_subframe) { +			first_subframe = NULL; +			status->flag &= ~RX_FLAG_ALLOW_SAME_PN; +		} else { +			status->flag |= RX_FLAG_ALLOW_SAME_PN; +		} +  		ath10k_process_rx(ar, status, msdu);  	}  } @@ -1584,7 +1657,7 @@ static int ath10k_htt_rx_handle_amsdu(struct ath10k_htt *htt)  		ath10k_htt_rx_h_unchain(ar, &amsdu);  	ath10k_htt_rx_h_filter(ar, &amsdu, rx_status); -	ath10k_htt_rx_h_mpdu(ar, &amsdu, rx_status); +	ath10k_htt_rx_h_mpdu(ar, &amsdu, rx_status, true);  	ath10k_htt_rx_h_deliver(ar, &amsdu, rx_status);  	return num_msdus; @@ -1745,8 +1818,7 @@ static void ath10k_htt_rx_delba(struct ath10k *ar, struct htt_resp *resp)  }  static int ath10k_htt_rx_extract_amsdu(struct sk_buff_head *list, -				       struct sk_buff_head *amsdu, -				       int budget_left) +				       struct sk_buff_head *amsdu)  {  	struct sk_buff *msdu;  	struct htt_rx_desc *rxd; @@ -1757,9 +1829,8 @@ static int ath10k_htt_rx_extract_amsdu(struct sk_buff_head *list,  	if (WARN_ON(!skb_queue_empty(amsdu)))  		return -EINVAL; -	while ((msdu = __skb_dequeue(list)) && budget_left) { +	while ((msdu = __skb_dequeue(list))) {  		__skb_queue_tail(amsdu, msdu); -		budget_left--;  		rxd = (void *)msdu->data - sizeof(*rxd);  		if (rxd->msdu_end.common.info0 & @@ -1850,8 +1921,7 @@ static int ath10k_htt_rx_h_rx_offload(struct ath10k *ar,  	return num_msdu;  } -static int ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb, -				    int budget_left) +static int ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb)  {  	struct ath10k_htt *htt = &ar->htt;  	struct htt_resp *resp = (void *)skb->data; @@ -1908,9 +1978,9 @@ static int ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb,  	if (offload)  		num_msdus = ath10k_htt_rx_h_rx_offload(ar, &list); -	while (!skb_queue_empty(&list) && budget_left) { +	while (!skb_queue_empty(&list)) {  		__skb_queue_head_init(&amsdu); -		ret = ath10k_htt_rx_extract_amsdu(&list, &amsdu, budget_left); +		ret = ath10k_htt_rx_extract_amsdu(&list, &amsdu);  		switch (ret) {  		case 0:  			/* Note: The in-order indication may report interleaved @@ -1920,10 +1990,9 @@ static int ath10k_htt_rx_in_ord_ind(struct ath10k *ar, struct sk_buff *skb,  			 * should still give an idea about rx rate to the user.  			 */  			num_msdus += skb_queue_len(&amsdu); -			budget_left -= skb_queue_len(&amsdu);  			ath10k_htt_rx_h_ppdu(ar, &amsdu, status, vdev_id);  			ath10k_htt_rx_h_filter(ar, &amsdu, status); -			ath10k_htt_rx_h_mpdu(ar, &amsdu, status); +			ath10k_htt_rx_h_mpdu(ar, &amsdu, status, false);  			ath10k_htt_rx_h_deliver(ar, &amsdu, status);  			break;  		case -EAGAIN: @@ -2563,8 +2632,7 @@ int ath10k_htt_txrx_compl_task(struct ath10k *ar, int budget)  		}  		spin_lock_bh(&htt->rx_ring.lock); -		num_rx_msdus = ath10k_htt_rx_in_ord_ind(ar, skb, -							(budget - quota)); +		num_rx_msdus = ath10k_htt_rx_in_ord_ind(ar, skb);  		spin_unlock_bh(&htt->rx_ring.lock);  		if (num_rx_msdus < 0) {  			resched_napi = true; diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c index bc1633945a56..195dafb98131 100644 --- a/drivers/net/wireless/ath/ath10k/pci.c +++ b/drivers/net/wireless/ath/ath10k/pci.c @@ -3396,9 +3396,7 @@ static void ath10k_pci_remove(struct pci_dev *pdev)  MODULE_DEVICE_TABLE(pci, ath10k_pci_id_table); -#ifdef CONFIG_PM - -static int ath10k_pci_pm_suspend(struct device *dev) +static __maybe_unused int ath10k_pci_pm_suspend(struct device *dev)  {  	struct ath10k *ar = dev_get_drvdata(dev);  	int ret; @@ -3414,7 +3412,7 @@ static int ath10k_pci_pm_suspend(struct device *dev)  	return ret;  } -static int ath10k_pci_pm_resume(struct device *dev) +static __maybe_unused int ath10k_pci_pm_resume(struct device *dev)  {  	struct ath10k *ar = dev_get_drvdata(dev);  	int ret; @@ -3433,7 +3431,6 @@ static int ath10k_pci_pm_resume(struct device *dev)  static SIMPLE_DEV_PM_OPS(ath10k_pci_pm_ops,  			 ath10k_pci_pm_suspend,  			 ath10k_pci_pm_resume); -#endif  static struct pci_driver ath10k_pci_driver = {  	.name = "ath10k_pci", diff --git a/drivers/net/wireless/ath/ath10k/rx_desc.h b/drivers/net/wireless/ath/ath10k/rx_desc.h index c1022a1cf855..28da14398951 100644 --- a/drivers/net/wireless/ath/ath10k/rx_desc.h +++ b/drivers/net/wireless/ath/ath10k/rx_desc.h @@ -239,6 +239,9 @@ enum htt_rx_mpdu_encrypt_type {  	HTT_RX_MPDU_ENCRYPT_WAPI             = 5,  	HTT_RX_MPDU_ENCRYPT_AES_CCM_WPA2     = 6,  	HTT_RX_MPDU_ENCRYPT_NONE             = 7, +	HTT_RX_MPDU_ENCRYPT_AES_CCM256_WPA2  = 8, +	HTT_RX_MPDU_ENCRYPT_AES_GCMP_WPA2    = 9, +	HTT_RX_MPDU_ENCRYPT_AES_GCMP256_WPA2 = 10,  };  #define RX_MPDU_START_INFO0_PEER_IDX_MASK     0x000007ff diff --git a/drivers/net/wireless/ath/ath5k/Makefile b/drivers/net/wireless/ath/ath5k/Makefile index 1b3a34f7f224..a8724eee21f8 100644 --- a/drivers/net/wireless/ath/ath5k/Makefile +++ b/drivers/net/wireless/ath/ath5k/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  ath5k-y				+= caps.o  ath5k-y				+= initvals.o  ath5k-y				+= eeprom.o diff --git a/drivers/net/wireless/ath/ath5k/sysfs.c b/drivers/net/wireless/ath/ath5k/sysfs.c index 04cf0ca72610..25978c732fe1 100644 --- a/drivers/net/wireless/ath/ath5k/sysfs.c +++ b/drivers/net/wireless/ath/ath5k/sysfs.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt  #include <linux/device.h> diff --git a/drivers/net/wireless/ath/ath5k/trace.h b/drivers/net/wireless/ath/ath5k/trace.h index c6eef519bb61..a41e3bf42dfc 100644 --- a/drivers/net/wireless/ath/ath5k/trace.h +++ b/drivers/net/wireless/ath/ath5k/trace.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #if !defined(__TRACE_ATH5K_H) || defined(TRACE_HEADER_MULTI_READ)  #define __TRACE_ATH5K_H diff --git a/drivers/net/wireless/ath/ath6kl/trace.h b/drivers/net/wireless/ath/ath6kl/trace.h index 1a1ea7881b4d..91e735cfdef7 100644 --- a/drivers/net/wireless/ath/ath6kl/trace.h +++ b/drivers/net/wireless/ath/ath6kl/trace.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #if !defined(_ATH6KL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)  #include <net/cfg80211.h> diff --git a/drivers/net/wireless/ath/ath9k/Makefile b/drivers/net/wireless/ath/ath9k/Makefile index 36a40ffdce15..d804ce7391a0 100644 --- a/drivers/net/wireless/ath/ath9k/Makefile +++ b/drivers/net/wireless/ath/ath9k/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  ath9k-y +=	beacon.o \  		gpio.o \  		init.o \ diff --git a/drivers/net/wireless/ath/carl9170/version.h b/drivers/net/wireless/ath/carl9170/version.h index a0410fe8c03a..9a44d004c206 100644 --- a/drivers/net/wireless/ath/carl9170/version.h +++ b/drivers/net/wireless/ath/carl9170/version.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  #ifndef __CARL9170_SHARED_VERSION_H  #define __CARL9170_SHARED_VERSION_H  #define CARL9170FW_VERSION_YEAR 16 diff --git a/drivers/net/wireless/ath/wcn36xx/Makefile b/drivers/net/wireless/ath/wcn36xx/Makefile index 50c43b4382ba..3b09435104eb 100644 --- a/drivers/net/wireless/ath/wcn36xx/Makefile +++ b/drivers/net/wireless/ath/wcn36xx/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  obj-$(CONFIG_WCN36XX) := wcn36xx.o  wcn36xx-y +=   main.o \                 dxe.o \ diff --git a/drivers/net/wireless/ath/wcn36xx/main.c b/drivers/net/wireless/ath/wcn36xx/main.c index 35bd50bcbbd5..b83f01d6e3dd 100644 --- a/drivers/net/wireless/ath/wcn36xx/main.c +++ b/drivers/net/wireless/ath/wcn36xx/main.c @@ -812,7 +812,6 @@ static void wcn36xx_bss_info_changed(struct ieee80211_hw *hw,  			if (!sta) {  				wcn36xx_err("sta %pM is not found\n",  					      bss_conf->bssid); -				rcu_read_unlock();  				goto out;  			}  			sta_priv = wcn36xx_sta_to_priv(sta); diff --git a/drivers/net/wireless/ath/wil6210/Makefile b/drivers/net/wireless/ath/wil6210/Makefile index d27efe83748b..398edd2a7f2b 100644 --- a/drivers/net/wireless/ath/wil6210/Makefile +++ b/drivers/net/wireless/ath/wil6210/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  obj-$(CONFIG_WIL6210) += wil6210.o  wil6210-y := main.o |