Johannes Berg says: ==================== Couple of fixes: - ath12k performance regression from -rc1 - cfg80211 counted_by() removal for scan request as it doesn't match usage and keeps complaining - iwlwifi crash with certain older devices - iwlwifi missing an error path unlock - iwlwifi compatibility with certain BIOS updates * tag 'wireless-2025-07-17' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless: wifi: iwlwifi: Fix botched indexing conversion wifi: cfg80211: remove scan request n_channels counted_by wifi: ath12k: Fix packets received in WBM error ring with REO LUT enabled wifi: iwlwifi: mask reserved bits in chan_state_active_bitmap wifi: iwlwifi: pcie: fix locking on invalid TOP reset ====================
Unified · Split
| @@ -1060,7 +1060,6 @@ int ath12k_dp_rx_peer_tid_setup(struct ath12k *ar, const u8 *peer_mac, int vdev_ · 1059 unmodified lines | |||
| 1060 | } | 1060 | } |
| 1061 | 1061 | ||
| 1062 | rx_tid = &peer->rx_tid[tid]; | 1062 | rx_tid = &peer->rx_tid[tid]; |
| 1063 | paddr_aligned = rx_tid->qbuf.paddr_aligned; | ||
| 1064 | /* Update the tid queue if it is already setup */ | 1063 | /* Update the tid queue if it is already setup */ |
| 1065 | if (rx_tid->active) { | 1064 | if (rx_tid->active) { |
| 1066 | ret = ath12k_peer_rx_tid_reo_update(ar, peer, rx_tid, | 1065 | ret = ath12k_peer_rx_tid_reo_update(ar, peer, rx_tid, |
| @@ -1072,6 +1071,7 @@ int ath12k_dp_rx_peer_tid_setup(struct ath12k *ar, const u8 *peer_mac, int vdev_ · 5 unmodified lines | |||
| 1072 | } | 1071 | } |
| 1073 | 1072 | ||
| 1074 | if (!ab->hw_params->reoq_lut_support) { | 1073 | if (!ab->hw_params->reoq_lut_support) { |
| 1074 | paddr_aligned = rx_tid->qbuf.paddr_aligned; | ||
| 1075 | ret = ath12k_wmi_peer_rx_reorder_queue_setup(ar, vdev_id, | 1075 | ret = ath12k_wmi_peer_rx_reorder_queue_setup(ar, vdev_id, |
| 1076 | peer_mac, | 1076 | peer_mac, |
| 1077 | paddr_aligned, tid, | 1077 | paddr_aligned, tid, |
| @@ -1098,6 +1098,7 @@ int ath12k_dp_rx_peer_tid_setup(struct ath12k *ar, const u8 *peer_mac, int vdev_ · 20 unmodified lines | |||
| 1098 | return ret; | 1098 | return ret; |
| 1099 | } | 1099 | } |
| 1100 | 1100 | ||
| 1101 | paddr_aligned = rx_tid->qbuf.paddr_aligned; | ||
| 1101 | if (ab->hw_params->reoq_lut_support) { | 1102 | if (ab->hw_params->reoq_lut_support) { |
| 1102 | /* Update the REO queue LUT at the corresponding peer id | 1103 | /* Update the REO queue LUT at the corresponding peer id |
| 1103 | * and tid with qaddr. | 1104 | * and tid with qaddr. |
| @@ -1,6 +1,6 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ | 1 | /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (C) 2012-2014, 2018-2024 Intel Corporation | 3 | * Copyright (C) 2012-2014, 2018-2025 Intel Corporation |
| 4 | * Copyright (C) 2013-2015 Intel Mobile Communications GmbH | 4 | * Copyright (C) 2013-2015 Intel Mobile Communications GmbH |
| 5 | * Copyright (C) 2016-2017 Intel Deutschland GmbH | 5 | * Copyright (C) 2016-2017 Intel Deutschland GmbH |
| 6 | */ | 6 | */ |
| @@ -754,7 +754,7 @@ struct iwl_lari_config_change_cmd_v10 { · 747 unmodified lines | |||
| 754 | * according to the BIOS definitions. | 754 | * according to the BIOS definitions. |
| 755 | * For LARI cmd version 11 - bits 0:4 are supported. | 755 | * For LARI cmd version 11 - bits 0:4 are supported. |
| 756 | * For LARI cmd version 12 - bits 0:6 are supported and bits 7:31 are | 756 | * For LARI cmd version 12 - bits 0:6 are supported and bits 7:31 are |
| 757 | * reserved. No need to mask out the reserved bits. | 757 | * reserved. |
| 758 | * @force_disable_channels_bitmap: Bitmap of disabled bands/channels. | 758 | * @force_disable_channels_bitmap: Bitmap of disabled bands/channels. |
| 759 | * Each bit represents a set of channels in a specific band that should be | 759 | * Each bit represents a set of channels in a specific band that should be |
| 760 | * disabled | 760 | * disabled |
| @@ -787,6 +787,7 @@ struct iwl_lari_config_change_cmd { · 26 unmodified lines | |||
| 787 | /* Activate UNII-1 (5.2GHz) for World Wide */ | 787 | /* Activate UNII-1 (5.2GHz) for World Wide */ |
| 788 | #define ACTIVATE_5G2_IN_WW_MASK BIT(4) | 788 | #define ACTIVATE_5G2_IN_WW_MASK BIT(4) |
| 789 | #define CHAN_STATE_ACTIVE_BITMAP_CMD_V11 0x1F | 789 | #define CHAN_STATE_ACTIVE_BITMAP_CMD_V11 0x1F |
| 790 | #define CHAN_STATE_ACTIVE_BITMAP_CMD_V12 0x7F | ||
| 790 | 791 | ||
| 791 | /** | 792 | /** |
| 792 | * struct iwl_pnvm_init_complete_ntfy - PNVM initialization complete | 793 | * struct iwl_pnvm_init_complete_ntfy - PNVM initialization complete |
| @@ -614,6 +614,7 @@ int iwl_fill_lari_config(struct iwl_fw_runtime *fwrt, · 613 unmodified lines | |||
| 614 | 614 | ||
| 615 | ret = iwl_bios_get_dsm(fwrt, DSM_FUNC_ACTIVATE_CHANNEL, &value); | 615 | ret = iwl_bios_get_dsm(fwrt, DSM_FUNC_ACTIVATE_CHANNEL, &value); |
| 616 | if (!ret) { | 616 | if (!ret) { |
| 617 | value &= CHAN_STATE_ACTIVE_BITMAP_CMD_V12; | ||
| 617 | if (cmd_ver < 8) | 618 | if (cmd_ver < 8) |
| 618 | value &= ~ACTIVATE_5G2_IN_WW_MASK; | 619 | value &= ~ACTIVATE_5G2_IN_WW_MASK; |
| 619 | 620 | ||
| @@ -251,8 +251,10 @@ void iwl_mld_configure_lari(struct iwl_mld *mld) · 250 unmodified lines | |||
| 251 | cpu_to_le32(value &= DSM_UNII4_ALLOW_BITMAP); | 251 | cpu_to_le32(value &= DSM_UNII4_ALLOW_BITMAP); |
| 252 | 252 | ||
| 253 | ret = iwl_bios_get_dsm(fwrt, DSM_FUNC_ACTIVATE_CHANNEL, &value); | 253 | ret = iwl_bios_get_dsm(fwrt, DSM_FUNC_ACTIVATE_CHANNEL, &value); |
| 254 | if (!ret) | 254 | if (!ret) { |
| 255 | value &= CHAN_STATE_ACTIVE_BITMAP_CMD_V12; | ||
| 255 | cmd.chan_state_active_bitmap = cpu_to_le32(value); | 256 | cmd.chan_state_active_bitmap = cpu_to_le32(value); |
| 257 | } | ||
| 256 | 258 | ||
| 257 | ret = iwl_bios_get_dsm(fwrt, DSM_FUNC_ENABLE_6E, &value); | 259 | ret = iwl_bios_get_dsm(fwrt, DSM_FUNC_ENABLE_6E, &value); |
| 258 | if (!ret) | 260 | if (!ret) |
| @@ -546,8 +546,10 @@ again: · 545 unmodified lines | |||
| 546 | } | 546 | } |
| 547 | 547 | ||
| 548 | if (WARN_ON(trans->do_top_reset && | 548 | if (WARN_ON(trans->do_top_reset && |
| 549 | trans->mac_cfg->device_family < IWL_DEVICE_FAMILY_SC)) | 549 | trans->mac_cfg->device_family < IWL_DEVICE_FAMILY_SC)) { |
| 550 | return -EINVAL; | 550 | ret = -EINVAL; |
| 551 | goto out; | ||
| 552 | } | ||
| 551 | 553 | ||
| 552 | /* we need to wait later - set state */ | 554 | /* we need to wait later - set state */ |
| 553 | if (trans->do_top_reset) | 555 | if (trans->do_top_reset) |
| @@ -2101,10 +2101,10 @@ static void iwl_txq_gen1_update_byte_cnt_tbl(struct iwl_trans *trans, · 2100 unmodified lines | |||
| 2101 | 2101 | ||
| 2102 | bc_ent = cpu_to_le16(len | (sta_id << 12)); | 2102 | bc_ent = cpu_to_le16(len | (sta_id << 12)); |
| 2103 | 2103 | ||
| 2104 | scd_bc_tbl[txq_id * BC_TABLE_SIZE + write_ptr].tfd_offset = bc_ent; | 2104 | scd_bc_tbl[txq_id * TFD_QUEUE_BC_SIZE + write_ptr].tfd_offset = bc_ent; |
| 2105 | 2105 | ||
| 2106 | if (write_ptr < TFD_QUEUE_SIZE_BC_DUP) | 2106 | if (write_ptr < TFD_QUEUE_SIZE_BC_DUP) |
| 2107 | scd_bc_tbl[txq_id * BC_TABLE_SIZE + TFD_QUEUE_SIZE_MAX + write_ptr].tfd_offset = | 2107 | scd_bc_tbl[txq_id * TFD_QUEUE_BC_SIZE + TFD_QUEUE_SIZE_MAX + write_ptr].tfd_offset = |
| 2108 | bc_ent; | 2108 | bc_ent; |
| 2109 | } | 2109 | } |
| 2110 | 2110 | ||
| @@ -2328,10 +2328,10 @@ static void iwl_txq_gen1_inval_byte_cnt_tbl(struct iwl_trans *trans, · 217 unmodified lines | |||
| 2328 | 2328 | ||
| 2329 | bc_ent = cpu_to_le16(1 | (sta_id << 12)); | 2329 | bc_ent = cpu_to_le16(1 | (sta_id << 12)); |
| 2330 | 2330 | ||
| 2331 | scd_bc_tbl[txq_id * BC_TABLE_SIZE + read_ptr].tfd_offset = bc_ent; | 2331 | scd_bc_tbl[txq_id * TFD_QUEUE_BC_SIZE + read_ptr].tfd_offset = bc_ent; |
| 2332 | 2332 | ||
| 2333 | if (read_ptr < TFD_QUEUE_SIZE_BC_DUP) | 2333 | if (read_ptr < TFD_QUEUE_SIZE_BC_DUP) |
| 2334 | scd_bc_tbl[txq_id * BC_TABLE_SIZE + TFD_QUEUE_SIZE_MAX + read_ptr].tfd_offset = | 2334 | scd_bc_tbl[txq_id * TFD_QUEUE_BC_SIZE + TFD_QUEUE_SIZE_MAX + read_ptr].tfd_offset = |
| 2335 | bc_ent; | 2335 | bc_ent; |
| 2336 | } | 2336 | } |
| 2337 | 2337 | ||
| @@ -2690,7 +2690,7 @@ struct cfg80211_scan_request { · 2689 unmodified lines | |||
| 2690 | s8 tsf_report_link_id; | 2690 | s8 tsf_report_link_id; |
| 2691 | 2691 | ||
| 2692 | /* keep last */ | 2692 | /* keep last */ |
| 2693 | struct ieee80211_channel *channels[] __counted_by(n_channels); | 2693 | struct ieee80211_channel *channels[]; |
| 2694 | }; | 2694 | }; |
| 2695 | 2695 | ||
| 2696 | static inline void get_random_mask_addr(u8 *buf, const u8 *addr, const u8 *mask) | 2696 | static inline void get_random_mask_addr(u8 *buf, const u8 *addr, const u8 *mask) |