Skip to content

Commit e31a821

Browse files
committed
Merge tag 'wireless-2024-10-21' of git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless
wireless fixes for v6.12-rc5 The first set of wireless fixes for v6.12. We have been busy and have not been able to send this earlier, so there are more fixes than usual. The fixes are all over, both in stack and in drivers, but nothing special really standing out.
2 parents d44cd82 + a940b3a commit e31a821

File tree

26 files changed

+225
-75
lines changed

26 files changed

+225
-75
lines changed

drivers/net/wireless/ath/ath10k/wmi-tlv.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3043,9 +3043,14 @@ ath10k_wmi_tlv_op_cleanup_mgmt_tx_send(struct ath10k *ar,
30433043
struct sk_buff *msdu)
30443044
{
30453045
struct ath10k_skb_cb *cb = ATH10K_SKB_CB(msdu);
3046+
struct ath10k_mgmt_tx_pkt_addr *pkt_addr;
30463047
struct ath10k_wmi *wmi = &ar->wmi;
30473048

3048-
idr_remove(&wmi->mgmt_pending_tx, cb->msdu_id);
3049+
spin_lock_bh(&ar->data_lock);
3050+
pkt_addr = idr_remove(&wmi->mgmt_pending_tx, cb->msdu_id);
3051+
spin_unlock_bh(&ar->data_lock);
3052+
3053+
kfree(pkt_addr);
30493054

30503055
return 0;
30513056
}

drivers/net/wireless/ath/ath10k/wmi.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2441,6 +2441,7 @@ wmi_process_mgmt_tx_comp(struct ath10k *ar, struct mgmt_tx_compl_params *param)
24412441
dma_unmap_single(ar->dev, pkt_addr->paddr,
24422442
msdu->len, DMA_TO_DEVICE);
24432443
info = IEEE80211_SKB_CB(msdu);
2444+
kfree(pkt_addr);
24442445

24452446
if (param->status) {
24462447
info->flags &= ~IEEE80211_TX_STAT_ACK;
@@ -9612,6 +9613,7 @@ static int ath10k_wmi_mgmt_tx_clean_up_pending(int msdu_id, void *ptr,
96129613
dma_unmap_single(ar->dev, pkt_addr->paddr,
96139614
msdu->len, DMA_TO_DEVICE);
96149615
ieee80211_free_txskb(ar->hw, msdu);
9616+
kfree(pkt_addr);
96159617

96169618
return 0;
96179619
}

drivers/net/wireless/ath/ath11k/dp_rx.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5291,8 +5291,11 @@ int ath11k_dp_rx_process_mon_status(struct ath11k_base *ab, int mac_id,
52915291
hal_status == HAL_TLV_STATUS_PPDU_DONE) {
52925292
rx_mon_stats->status_ppdu_done++;
52935293
pmon->mon_ppdu_status = DP_PPDU_STATUS_DONE;
5294-
ath11k_dp_rx_mon_dest_process(ar, mac_id, budget, napi);
5295-
pmon->mon_ppdu_status = DP_PPDU_STATUS_START;
5294+
if (!ab->hw_params.full_monitor_mode) {
5295+
ath11k_dp_rx_mon_dest_process(ar, mac_id,
5296+
budget, napi);
5297+
pmon->mon_ppdu_status = DP_PPDU_STATUS_START;
5298+
}
52965299
}
52975300

52985301
if (ppdu_info->peer_id == HAL_INVALID_PEERID ||

drivers/net/wireless/ath/wil6210/txrx.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ static void wil_rx_add_radiotap_header(struct wil6210_priv *wil,
306306
struct sk_buff *skb)
307307
{
308308
struct wil6210_rtap {
309-
struct ieee80211_radiotap_header rthdr;
309+
struct ieee80211_radiotap_header_fixed rthdr;
310310
/* fields should be in the order of bits in rthdr.it_present */
311311
/* flags */
312312
u8 flags;

drivers/net/wireless/broadcom/brcm80211/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ source "drivers/net/wireless/broadcom/brcm80211/brcmfmac/Kconfig"
2727
config BRCM_TRACING
2828
bool "Broadcom device tracing"
2929
depends on BRCMSMAC || BRCMFMAC
30+
depends on TRACING
3031
help
3132
If you say Y here, the Broadcom wireless drivers will register
3233
with ftrace to dump event information into the trace ringbuffer.

drivers/net/wireless/intel/ipw2x00/ipw2100.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2518,7 +2518,7 @@ static void isr_rx_monitor(struct ipw2100_priv *priv, int i,
25182518
* to build this manually element by element, we can write it much
25192519
* more efficiently than we can parse it. ORDER MATTERS HERE */
25202520
struct ipw_rt_hdr {
2521-
struct ieee80211_radiotap_header rt_hdr;
2521+
struct ieee80211_radiotap_header_fixed rt_hdr;
25222522
s8 rt_dbmsignal; /* signal in dbM, kluged to signed */
25232523
} *ipw_rt;
25242524

drivers/net/wireless/intel/ipw2x00/ipw2200.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1143,7 +1143,7 @@ struct ipw_prom_priv {
11431143
* structure is provided regardless of any bits unset.
11441144
*/
11451145
struct ipw_rt_hdr {
1146-
struct ieee80211_radiotap_header rt_hdr;
1146+
struct ieee80211_radiotap_header_fixed rt_hdr;
11471147
u64 rt_tsf; /* TSF */ /* XXX */
11481148
u8 rt_flags; /* radiotap packet flags */
11491149
u8 rt_rate; /* rate in 500kb/s */

drivers/net/wireless/intel/iwlegacy/common.c

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3122,6 +3122,7 @@ il_enqueue_hcmd(struct il_priv *il, struct il_host_cmd *cmd)
31223122
struct il_cmd_meta *out_meta;
31233123
dma_addr_t phys_addr;
31243124
unsigned long flags;
3125+
u8 *out_payload;
31253126
u32 idx;
31263127
u16 fix_size;
31273128

@@ -3157,6 +3158,16 @@ il_enqueue_hcmd(struct il_priv *il, struct il_host_cmd *cmd)
31573158
out_cmd = txq->cmd[idx];
31583159
out_meta = &txq->meta[idx];
31593160

3161+
/* The payload is in the same place in regular and huge
3162+
* command buffers, but we need to let the compiler know when
3163+
* we're using a larger payload buffer to avoid "field-
3164+
* spanning write" warnings at run-time for huge commands.
3165+
*/
3166+
if (cmd->flags & CMD_SIZE_HUGE)
3167+
out_payload = ((struct il_device_cmd_huge *)out_cmd)->cmd.payload;
3168+
else
3169+
out_payload = out_cmd->cmd.payload;
3170+
31603171
if (WARN_ON(out_meta->flags & CMD_MAPPED)) {
31613172
spin_unlock_irqrestore(&il->hcmd_lock, flags);
31623173
return -ENOSPC;
@@ -3170,7 +3181,7 @@ il_enqueue_hcmd(struct il_priv *il, struct il_host_cmd *cmd)
31703181
out_meta->callback = cmd->callback;
31713182

31723183
out_cmd->hdr.cmd = cmd->id;
3173-
memcpy(&out_cmd->cmd.payload, cmd->data, cmd->len);
3184+
memcpy(out_payload, cmd->data, cmd->len);
31743185

31753186
/* At this point, the out_cmd now has all of the incoming cmd
31763187
* information */
@@ -4962,6 +4973,8 @@ il_pci_resume(struct device *device)
49624973
*/
49634974
pci_write_config_byte(pdev, PCI_CFG_RETRY_TIMEOUT, 0x00);
49644975

4976+
_il_wr(il, CSR_INT, 0xffffffff);
4977+
_il_wr(il, CSR_FH_INT_STATUS, 0xffffffff);
49654978
il_enable_interrupts(il);
49664979

49674980
if (!(_il_rd(il, CSR_GP_CNTRL) & CSR_GP_CNTRL_REG_FLAG_HW_RF_KILL_SW))

drivers/net/wireless/intel/iwlegacy/common.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,18 @@ struct il_device_cmd {
560560

561561
#define TFD_MAX_PAYLOAD_SIZE (sizeof(struct il_device_cmd))
562562

563+
/**
564+
* struct il_device_cmd_huge
565+
*
566+
* For use when sending huge commands.
567+
*/
568+
struct il_device_cmd_huge {
569+
struct il_cmd_header hdr; /* uCode API */
570+
union {
571+
u8 payload[IL_MAX_CMD_SIZE - sizeof(struct il_cmd_header)];
572+
} __packed cmd;
573+
} __packed;
574+
563575
struct il_host_cmd {
564576
const void *data;
565577
unsigned long reply_page;

drivers/net/wireless/marvell/libertas/radiotap.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#include <net/ieee80211_radiotap.h>
33

44
struct tx_radiotap_hdr {
5-
struct ieee80211_radiotap_header hdr;
5+
struct ieee80211_radiotap_header_fixed hdr;
66
u8 rate;
77
u8 txpower;
88
u8 rts_retries;
@@ -31,7 +31,7 @@ struct tx_radiotap_hdr {
3131
#define IEEE80211_FC_DSTODS 0x0300
3232

3333
struct rx_radiotap_hdr {
34-
struct ieee80211_radiotap_header hdr;
34+
struct ieee80211_radiotap_header_fixed hdr;
3535
u8 flags;
3636
u8 rate;
3737
u8 antsignal;

0 commit comments

Comments
 (0)