* Re: [PATCH ath-next] wifi: ath12k: Reduce RX SRNG interrupt timer threshold to 200us
From: Jeff Johnson @ 2026-07-14 18:07 UTC (permalink / raw)
To: ath12k, Thiraviyam Mariyappan; +Cc: linux-wireless
In-Reply-To: <20260622062324.758533-1-thiraviyam.mariyappan@oss.qualcomm.com>
On Mon, 22 Jun 2026 11:53:24 +0530, Thiraviyam Mariyappan wrote:
> Currently when RX traffic is low or intermittent, the RX SRNG interrupt
> mitigation logic defers packet processing for up to 500us via
> HAL_SRNG_INT_TIMER_THRESHOLD_RX.
>
> This causes excessive RX servicing delay, leading to increased end-to-end
> latency and degraded TCP performance in low-concurrency scenarios.
>
> [...]
Applied, thanks!
[1/1] wifi: ath12k: Reduce RX SRNG interrupt timer threshold to 200us
commit: 6b31c3451b12cfc5e86a41898014cb62d2a377b1
Best regards,
--
Jeff Johnson <jeff.johnson@oss.qualcomm.com>
^ permalink raw reply
* Re: [PATCH ath-next] wifi: ath12k: fix rx_mpdu_start layout for QCC2072
From: Jeff Johnson @ 2026-07-14 18:07 UTC (permalink / raw)
To: Wei Zhang; +Cc: ath12k, linux-wireless, linux-kernel
In-Reply-To: <20260629061529.1993932-1-wei.zhang@oss.qualcomm.com>
On Sun, 28 Jun 2026 23:15:28 -0700, Wei Zhang wrote:
> QCC2072's rx_mpdu_start TLV has a different field layout from QCN9274.
> Reusing struct rx_mpdu_start_qcn9274 in hal_rx_desc_qcc2072 causes the
> RX datapath to read the wrong offsets for info2, info4, pn[] and
> phy_ppdu_id, producing corrupted sequence number, PN, ppdu_id and
> mpdu-info flags (encrypted, fragment, addr2/addr4 valid).
>
> Add a dedicated struct rx_mpdu_start_qcc2072 that matches the actual
> hardware descriptor layout, and use it in hal_rx_desc_qcc2072.
>
> [...]
Applied, thanks!
[1/1] wifi: ath12k: fix rx_mpdu_start layout for QCC2072
commit: 9eb29fd47595e8128775f8ac57ca671238cb798a
Best regards,
--
Jeff Johnson <jeff.johnson@oss.qualcomm.com>
^ permalink raw reply
* Re: [PATCH ath-next v4] wifi: ath12k: add QMI capability negotiation for dynamic memory mode
From: Jeff Johnson @ 2026-07-14 18:07 UTC (permalink / raw)
To: ath12k, Aaradhana Sahu
Cc: linux-wireless, Rameshkumar Sundaram, Baochen Qiang
In-Reply-To: <20260701041611.3077185-1-aaradhana.sahu@oss.qualcomm.com>
On Wed, 01 Jul 2026 09:46:11 +0530, Aaradhana Sahu wrote:
> On AHB platforms, firmware operates in two modes: fixed-memory mode where
> firmware uses hardcoded addresses for memory regions such as BDF and does
> not request HOST_DDR memory from the host, and dynamic-memory mode where
> firmware expects the host to provide memory addresses including HOST_DDR
> after the Q6 read-only region and relies on host allocation for all memory
> types.
>
> [...]
Applied, thanks!
[1/1] wifi: ath12k: add QMI capability negotiation for dynamic memory mode
commit: b93c1dc446847165fd4cafc3d4d1c67ee6c6e987
Best regards,
--
Jeff Johnson <jeff.johnson@oss.qualcomm.com>
^ permalink raw reply
* Re: [PATCH ath-next] wifi: ath11k: cap out-of-range rx MCS instead of leaving bogus rate
From: Jeff Johnson @ 2026-07-14 18:07 UTC (permalink / raw)
To: Jeff Johnson, Baochen Qiang; +Cc: linux-wireless, ath11k
In-Reply-To: <20260701-ath11k-invalid-he-mcs-v1-1-7d963080c079@oss.qualcomm.com>
On Wed, 01 Jul 2026 09:49:13 +0800, Baochen Qiang wrote:
> ath11k can receive HT/VHT/HE frames whose reported MCS is above the
> maximum that can be expressed in the corresponding mac80211 rate space
> (e.g. an HE frame reported with MCS 12, while HE tops out at MCS 11).
>
> The frame itself is valid and decodes correctly, but for such a frame
> ath11k_dp_rx_h_rate() leaves rx_status->rate_idx set to the out-of-range
> value and never assigns rx_status->encoding, so it stays RX_ENC_LEGACY
> from the ath11k_dp_rx_h_ppdu() initialization. Once that frame reaches
> mac80211 it trips the rate sanity check and the frame is dropped with a
> splat:
>
> [...]
Applied, thanks!
[1/1] wifi: ath11k: cap out-of-range rx MCS instead of leaving bogus rate
commit: 12b09e478aa7459b7893a695ef77682202f2da83
Best regards,
--
Jeff Johnson <jeff.johnson@oss.qualcomm.com>
^ permalink raw reply
* Re: [PATCH ath-next v2] wifi: ath12k: Set IEEE80211_OFFLOAD_ENCAP_4ADDR after tx_encap_type vdev param
From: Jeff Johnson @ 2026-07-14 18:07 UTC (permalink / raw)
To: ath12k, Tamizh Chelvam Raja; +Cc: linux-wireless
In-Reply-To: <20260701182428.906441-1-tamizh.raja@oss.qualcomm.com>
On Wed, 01 Jul 2026 23:54:28 +0530, Tamizh Chelvam Raja wrote:
> Currently, IEEE80211_OFFLOAD_ENCAP_4ADDR is set when
> IEEE80211_OFFLOAD_ENCAP_ENABLED is present in vif->offload_flags
> at the beginning of ath12k_mac_update_vif_offload().
>
> However, if the WMI vdev set_param for tx_encap_type fails,
> IEEE80211_OFFLOAD_ENCAP_ENABLED is cleared but
> IEEE80211_OFFLOAD_ENCAP_4ADDR remains set, leaving the flags in
> an inconsistent state.
>
> [...]
Applied, thanks!
[1/1] wifi: ath12k: Set IEEE80211_OFFLOAD_ENCAP_4ADDR after tx_encap_type vdev param
commit: fde37c064641a4bad26d1583de25f6d491a7a9bd
Best regards,
--
Jeff Johnson <jeff.johnson@oss.qualcomm.com>
^ permalink raw reply
* Re: [ath-next] wifi: ath10k: trigger hardware recovery upon rx failures
From: Jeff Johnson @ 2026-07-14 18:08 UTC (permalink / raw)
To: ath10k, Manikanta Pubbisetty; +Cc: linux-wireless
In-Reply-To: <20260710060406.3323260-1-manikanta.pubbisetty@oss.qualcomm.com>
On Fri, 10 Jul 2026 11:34:06 +0530, Manikanta Pubbisetty wrote:
> When an error occurs during RX packet processing (e.g., MSDU done
> failure), the driver sets rx_confused and drops all subsequent RX
> packets until a Wi-Fi ON/OFF cycle clears the flag. This can leave
> the device in a bad state where it cannot process RX data traffic.
>
> Instead of leaving the device in such a state, trigger hardware
> recovery so that such an error state can be reset and the device
> can function again normally.
>
> [...]
Applied, thanks!
[1/1] wifi: ath10k: trigger hardware recovery upon rx failures
commit: da5d73e12af2bc517d5972186a87e7d297d6d0c1
Best regards,
--
Jeff Johnson <jeff.johnson@oss.qualcomm.com>
^ permalink raw reply
* Re: [PATCH] wifi: ath11k: validate regulatory capability phy_id
From: Jeff Johnson @ 2026-07-14 18:08 UTC (permalink / raw)
To: Jeff Johnson, Pengpeng Hou; +Cc: linux-wireless, ath11k, linux-kernel
In-Reply-To: <20260704011040.26233-1-pengpeng@iscas.ac.cn>
On Sat, 04 Jul 2026 09:10:40 +0800, Pengpeng Hou wrote:
> ath11k_wmi_tlv_ext_hal_reg_caps() copies firmware regulatory
> capability records into soc->hal_reg_cap[] using reg_cap.phy_id as
> the destination index. The loop count is bounded by num_phy, but the
> phy_id embedded in each record is not checked against the fixed
> MAX_RADIOS-sized destination array.
>
> Reject firmware records whose phy_id does not fit soc->hal_reg_cap[]
> before copying the parsed capability.
>
> [...]
Applied, thanks!
[1/1] wifi: ath11k: validate regulatory capability phy_id
commit: de4685d422a69a61f67e2e2ffdb5747d73d51308
Best regards,
--
Jeff Johnson <jeff.johnson@oss.qualcomm.com>
^ permalink raw reply
* Re: [PATCH ath-next] wifi: ath12k: fix ML-STA authentication timeout on QCC2072
From: Jeff Johnson @ 2026-07-14 18:08 UTC (permalink / raw)
To: jjohnson, Miaoqing Pan; +Cc: ath12k, linux-wireless, linux-kernel
In-Reply-To: <20260704073000.3300099-1-miaoqing.pan@oss.qualcomm.com>
On Sat, 04 Jul 2026 15:30:00 +0800, Miaoqing Pan wrote:
> QCC2072 firmware interprets the MLO_LINK_ADD and MLO_START_AS_ACTIVE
> flags to control the link state during MLO vdev start. MLO_LINK_ADD
> indicates that a link is being added, while MLO_START_AS_ACTIVE specifies
> that the link should become active during the start.
>
> When an association link is added without setting MLO_START_AS_ACTIVE,
> the firmware may transition the link into a suspended state. In this
> case, authentication frames transmitted by the host can be dropped,
> leading to repeated authentication retries and eventual timeout,
> for example:
> wlp1s0: send auth to <AP> (try 1/3)
> wlp1s0: send auth to <AP> (try 2/3)
> wlp1s0: send auth to <AP> (try 3/3)
> wlp1s0: authentication with <AP> timed out
>
> [...]
Applied, thanks!
[1/1] wifi: ath12k: fix ML-STA authentication timeout on QCC2072
commit: 3567d90721a8a51f051bcea3937febddc973e14c
Best regards,
--
Jeff Johnson <jeff.johnson@oss.qualcomm.com>
^ permalink raw reply
* Re: [PATCH ath-next] wifi: ath12k: update IPQ5332 BDF address offset
From: Jeff Johnson @ 2026-07-14 18:08 UTC (permalink / raw)
To: ath12k, Aaradhana Sahu; +Cc: linux-wireless
In-Reply-To: <20260710053534.879233-1-aaradhana.sahu@oss.qualcomm.com>
On Fri, 10 Jul 2026 11:05:34 +0530, Aaradhana Sahu wrote:
> In the ath12k driver, the BDF_MEM_REGION_TYPE address is derived by
> adding a fixed bdf_addr_offset to the WCSS Q6 region base address.
>
> The current offset (0xC00000) works only when the Q6 region contains
> the IPQ5332 ucode alone. On some IPQ5332 platform variants, additional
> devices share the same WCSS Q6 processor and place their firmware
> ucode in the same Q6 region. This results in multiple ucode sections
> within the region, and the existing offset can cause the BDF memory
> region to overlap with firmware read-only sections, which can lead to
> firmware crash and driver boot failure.
>
> [...]
Applied, thanks!
[1/1] wifi: ath12k: update IPQ5332 BDF address offset
commit: 7bbce23531417dfbf9a2c1a38f31010a1afdfc91
Best regards,
--
Jeff Johnson <jeff.johnson@oss.qualcomm.com>
^ permalink raw reply
* Re: [PATCH] wifi: ath10k: Drop redundant NULL check on devm_clk_get()
From: Jeff Johnson @ 2026-07-14 18:08 UTC (permalink / raw)
To: Jeff Johnson, linux-wireless, ath10k, linux-kernel,
Krzysztof Kozlowski
In-Reply-To: <20260705172405.119084-2-krzysztof.kozlowski@oss.qualcomm.com>
On Sun, 05 Jul 2026 19:24:06 +0200, Krzysztof Kozlowski wrote:
> devm_clk_get() does not return NULL (only valid clock or ERR pointer),
> so simplify the code to drop redundant IS_ERR_OR_NULL().
>
>
Applied, thanks!
[1/1] wifi: ath10k: Drop redundant NULL check on devm_clk_get()
commit: 298b337bb1d450793ed5248cc0345694f73f057c
Best regards,
--
Jeff Johnson <jeff.johnson@oss.qualcomm.com>
^ permalink raw reply
* Re: [PATCH ath-current v2] wifi: ath6kl: avoid buffer overreads in WMI event handlers
From: Jeff Johnson @ 2026-07-14 18:08 UTC (permalink / raw)
To: linux-wireless, Jeff Johnson; +Cc: linux-kernel
In-Reply-To: <20260711-ath6kl_wmi_scan_complete_rx-v2-1-22dc0f7f45e7@oss.qualcomm.com>
On Sat, 11 Jul 2026 11:04:43 -0700, Jeff Johnson wrote:
> The following WMI event handlers currently read from the event buffer
> without first verifying that the message was large enough to hold the
> expected event:
> ath6kl_wmi_scan_complete_rx()
> ath6kl_wmi_addba_req_event_rx()
> ath6kl_wmi_delba_req_event_rx()
>
> [...]
Applied, thanks!
[1/1] wifi: ath6kl: avoid buffer overreads in WMI event handlers
commit: f78703024c71ac60033139b42d040981efe083bb
Best regards,
--
Jeff Johnson <jeff.johnson@oss.qualcomm.com>
^ permalink raw reply
* RE: [PATCH] wifi: iwlwifi: validate UEFI reduced-power SKU TLV length
From: Korenblit, Miriam Rachel @ 2026-07-14 18:08 UTC (permalink / raw)
To: Pengpeng Hou; +Cc: open list:INTEL WIRELESS WIFI LINK iwlwifi, open list
In-Reply-To: <2026063008051412.5-ccfa108-0020-wifi-iwlwifi-validate-UEFI--pengpeng@iscas.ac.cn>
> -----Original Message-----
> From: Pengpeng Hou <pengpeng@iscas.ac.cn>
> Sent: Tuesday, June 30, 2026 10:23 AM
> To: Korenblit, Miriam Rachel <miriam.rachel.korenblit@intel.com>
> Cc: open list:INTEL WIRELESS WIFI LINK iwlwifi <linux-
> wireless@vger.kernel.org>; open list <linux-kernel@vger.kernel.org>; Pengpeng
> Hou <pengpeng@iscas.ac.cn>
> Subject: [PATCH] wifi: iwlwifi: validate UEFI reduced-power SKU TLV length
>
> iwl_uefi_reduce_power_parse() reads three SKU words from
> IWL_UCODE_TLV_PNVM_SKU TLVs after only checking the generic TLV length.
>
> Add the same type-specific minimum payload length check before reading the
> SKU words.
>
> Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
> ---
> drivers/net/wireless/intel/iwlwifi/fw/uefi.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/drivers/net/wireless/intel/iwlwifi/fw/uefi.c
> b/drivers/net/wireless/intel/iwlwifi/fw/uefi.c
> index 2ef0a7a..747df65 100644
> --- a/drivers/net/wireless/intel/iwlwifi/fw/uefi.c
> +++ b/drivers/net/wireless/intel/iwlwifi/fw/uefi.c
> @@ -248,6 +248,12 @@ int iwl_uefi_reduce_power_parse(struct iwl_trans
> *trans,
> IWL_DEBUG_FW(trans,
> "Got IWL_UCODE_TLV_PNVM_SKU len
> %d\n",
> tlv_len);
> + if (tlv_len < 3 * sizeof(__le32)) {
Please use sizeof(*tlv_sku_id)
> + IWL_ERR(trans, "invalid PNVM SKU TLV len:
> %u\n",
> + tlv_len);
> + return -EINVAL;
> + }
> +
> IWL_DEBUG_FW(trans, "sku_id 0x%0x 0x%0x 0x%0x\n",
> le32_to_cpu(tlv_sku_id->data[0]),
> le32_to_cpu(tlv_sku_id->data[1]),
^ permalink raw reply
* RE: [PATCH] wifi: iwlwifi: validate PNVM SKU TLV length
From: Korenblit, Miriam Rachel @ 2026-07-14 18:10 UTC (permalink / raw)
To: Pengpeng Hou; +Cc: open list:INTEL WIRELESS WIFI LINK iwlwifi, open list
In-Reply-To: <2026063008044943.4-ccfa108-0019-wifi-iwlwifi-validate-PNVM--pengpeng@iscas.ac.cn>
> -----Original Message-----
> From: Pengpeng Hou <pengpeng@iscas.ac.cn>
> Sent: Tuesday, June 30, 2026 10:22 AM
> To: Korenblit, Miriam Rachel <miriam.rachel.korenblit@intel.com>
> Cc: open list:INTEL WIRELESS WIFI LINK iwlwifi <linux-
> wireless@vger.kernel.org>; open list <linux-kernel@vger.kernel.org>; Pengpeng
> Hou <pengpeng@iscas.ac.cn>
> Subject: [PATCH] wifi: iwlwifi: validate PNVM SKU TLV length
>
> iwl_pnvm_parse() reads three SKU words from IWL_UCODE_TLV_PNVM_SKU
> TLVs after only checking the generic TLV length.
>
> Add a type-specific minimum payload length check before reading the SKU words.
>
> Signed-off-by: Pengpeng Hou <pengpeng@iscas.ac.cn>
> ---
> drivers/net/wireless/intel/iwlwifi/fw/pnvm.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/drivers/net/wireless/intel/iwlwifi/fw/pnvm.c
> b/drivers/net/wireless/intel/iwlwifi/fw/pnvm.c
> index afff8d5..f61e69b 100644
> --- a/drivers/net/wireless/intel/iwlwifi/fw/pnvm.c
> +++ b/drivers/net/wireless/intel/iwlwifi/fw/pnvm.c
> @@ -198,6 +198,12 @@ static int iwl_pnvm_parse(struct iwl_trans *trans, const
> u8 *data,
> IWL_DEBUG_FW(trans,
> "Got IWL_UCODE_TLV_PNVM_SKU len
> %d\n",
> tlv_len);
> + if (tlv_len < 3 * sizeof(__le32)) {
Sizeof(*tlv_sku_id)
> + IWL_ERR(trans, "invalid PNVM SKU TLV len:
> %u\n",
> + tlv_len);
> + return -EINVAL;
> + }
> +
> IWL_DEBUG_FW(trans, "sku_id 0x%0x 0x%0x 0x%0x\n",
> le32_to_cpu(tlv_sku_id->data[0]),
> le32_to_cpu(tlv_sku_id->data[1]),
^ permalink raw reply
* RE: [PATCH] wifi: iwlwifi: use unique thermal zone type
From: Korenblit, Miriam Rachel @ 2026-07-14 18:58 UTC (permalink / raw)
To: Jiajia Liu, Berg, Benjamin, Berg, Johannes,
linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org
In-Reply-To: <20260312014043.13361-1-liujiajia@kylinos.cn>
> -----Original Message-----
> From: Jiajia Liu <liujiajia@kylinos.cn>
> Sent: Thursday, March 12, 2026 3:41 AM
> To: Korenblit, Miriam Rachel <miriam.rachel.korenblit@intel.com>; Berg,
> Benjamin <benjamin.berg@intel.com>; Berg, Johannes
> <johannes.berg@intel.com>; linux-wireless@vger.kernel.org; linux-
> kernel@vger.kernel.org
> Cc: Jiajia Liu <liujiajia@kylinos.cn>
> Subject: [PATCH] wifi: iwlwifi: use unique thermal zone type
>
> Unloading iwlmld or iwlmvm can trigger hung task when two devices using
> iwlmvm and iwlmld respectively on one setup. Their thermal zones have the
> same type and share the same hwmon device created by the first zone. The
> second zone indirectly holds the first zone through hwmon and prevents the first
> zone from unregistering.
> Tested with AX211 (8086:7af0) and BE200 (8086:272b).
>
> INFO: task modprobe:5295 blocked for more than 120 seconds.
> Not tainted 7.0.0-rc2-up1 #2
> Call Trace:
> __schedule+0x4df/0xfd0
> schedule+0x27/0xd0
> schedule_timeout+0xbd/0x100
> __wait_for_common+0x97/0x1b0
> ? __pfx_schedule_timeout+0x10/0x10
> thermal_zone_device_unregister+0x173/0x1c0
> iwl_mld_thermal_exit+0xbb/0xd0 [iwlmld]
> iwl_op_mode_mld_stop+0x37/0x120 [iwlmld]
> iwl_opmode_deregister+0xc0/0x160 [iwlwifi]
> __do_sys_delete_module+0x1b5/0x320
>
> Signed-off-by: Jiajia Liu <liujiajia@kylinos.cn>
> ---
> drivers/net/wireless/intel/iwlwifi/iwl-utils.c | 10 ++++++++++
> drivers/net/wireless/intel/iwlwifi/iwl-utils.h | 4 ++++
> drivers/net/wireless/intel/iwlwifi/mld/thermal.c | 4 ++--
> drivers/net/wireless/intel/iwlwifi/mvm/tt.c | 6 ++++--
> 4 files changed, 20 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-utils.c
> b/drivers/net/wireless/intel/iwlwifi/iwl-utils.c
> index d503544fda40..fe5fa5e59664 100644
> --- a/drivers/net/wireless/intel/iwlwifi/iwl-utils.c
> +++ b/drivers/net/wireless/intel/iwlwifi/iwl-utils.c
> @@ -193,3 +193,13 @@ s8 iwl_average_neg_dbm(const u8 *neg_dbm_values,
> u8 len)
> return clamp(average_magnitude - i, -128, 0); }
> IWL_EXPORT_SYMBOL(iwl_average_neg_dbm);
> +
> +#ifdef CONFIG_THERMAL
> +u8 iwl_thermal_zone_get_id(void)
> +{
> + static atomic_t counter = ATOMIC_INIT(0);
> +
> + return atomic_inc_return(&counter) & 0xFF; }
> +IWL_EXPORT_SYMBOL(iwl_thermal_zone_get_id);
> +#endif
> diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-utils.h
> b/drivers/net/wireless/intel/iwlwifi/iwl-utils.h
> index 5172035e4d26..84a4543fd290 100644
> --- a/drivers/net/wireless/intel/iwlwifi/iwl-utils.h
> +++ b/drivers/net/wireless/intel/iwlwifi/iwl-utils.h
> @@ -55,4 +55,8 @@ u32 iwl_find_ie_offset(u8 *beacon, u8 eid, u32 frame_size)
>
> s8 iwl_average_neg_dbm(const u8 *neg_dbm_values, u8 len);
>
> +#ifdef CONFIG_THERMAL
> +u8 iwl_thermal_zone_get_id(void);
> +#endif
> +
> #endif /* __iwl_utils_h__ */
> diff --git a/drivers/net/wireless/intel/iwlwifi/mld/thermal.c
> b/drivers/net/wireless/intel/iwlwifi/mld/thermal.c
> index f8a8c35066be..500028a4dbd3 100644
> --- a/drivers/net/wireless/intel/iwlwifi/mld/thermal.c
> +++ b/drivers/net/wireless/intel/iwlwifi/mld/thermal.c
> @@ -5,6 +5,7 @@
> #ifdef CONFIG_THERMAL
> #include <linux/sort.h>
> #include <linux/thermal.h>
> +#include "iwl-utils.h"
> #endif
>
> #include "fw/api/phy.h"
> @@ -243,7 +244,6 @@ static void iwl_mld_thermal_zone_register(struct
> iwl_mld *mld) {
> int ret;
> char name[16];
> - static atomic_t counter = ATOMIC_INIT(0);
> struct thermal_trip trips[IWL_MAX_DTS_TRIPS] = {
> [0 ... IWL_MAX_DTS_TRIPS - 1] = {
> .temperature = THERMAL_TEMP_INVALID, @@ -254,7
> +254,7 @@ static void iwl_mld_thermal_zone_register(struct iwl_mld *mld)
>
> BUILD_BUG_ON(ARRAY_SIZE(name) >= THERMAL_NAME_LENGTH);
>
> - sprintf(name, "iwlwifi_%u", atomic_inc_return(&counter) & 0xFF);
Any reason not to have iwlmld (and iwlmvm in mvm) instead of a shared counter?
> + sprintf(name, "iwlwifi_%u", iwl_thermal_zone_get_id());
> mld->tzone =
> thermal_zone_device_register_with_trips(name, trips,
> IWL_MAX_DTS_TRIPS,
> diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> index 53bab21ebae2..ea8e616174db 100644
> --- a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> @@ -7,6 +7,9 @@
> #include <linux/sort.h>
>
> #include "mvm.h"
> +#ifdef CONFIG_THERMAL
> +#include "iwl-utils.h"
> +#endif
>
> #define IWL_MVM_NUM_CTDP_STEPS 20
> #define IWL_MVM_MIN_CTDP_BUDGET_MW 150
> @@ -652,7 +655,6 @@ static void iwl_mvm_thermal_zone_register(struct
> iwl_mvm *mvm) {
> int i, ret;
> char name[16];
> - static atomic_t counter = ATOMIC_INIT(0);
>
> if (!iwl_mvm_is_tt_in_fw(mvm)) {
> mvm->tz_device.tzone = NULL;
> @@ -662,7 +664,7 @@ static void iwl_mvm_thermal_zone_register(struct
> iwl_mvm *mvm)
>
> BUILD_BUG_ON(ARRAY_SIZE(name) >= THERMAL_NAME_LENGTH);
>
> - sprintf(name, "iwlwifi_%u", atomic_inc_return(&counter) & 0xFF);
> + sprintf(name, "iwlwifi_%u", iwl_thermal_zone_get_id());
> /*
> * 0 is a valid temperature,
> * so initialize the array with S16_MIN which invalid temperature
> --
> 2.53.0
^ permalink raw reply
* Re: [PATCH v2 0/3] MIPS: BCM47XX: convert buttons to software nodes
From: Waldemar Brodkorb @ 2026-07-14 22:49 UTC (permalink / raw)
To: Arnd Bergmann
Cc: Dmitry Torokhov, Rafał Miłecki, Michael Büsch,
Hauke Mehrtens, Thomas Bogendoerfer, Waldemar Brodkorb,
Bartosz Golaszewski, linux-wireless, linux-kernel, linux-mips,
Bartosz Golaszewski
In-Reply-To: <4a8d64e1-5f8c-4ac0-afb0-2d68c3f53ada@app.fastmail.com>
[-- Attachment #1: Type: text/plain, Size: 1765 bytes --]
Hi,
Arnd Bergmann wrote,
> On Mon, Jul 13, 2026, at 23:58, Dmitry Torokhov wrote:
> > This series converts the legacy gpio-keys platform device on BCM47XX
> > boards to use software nodes and static properties.
> >
> > To do this properly without relying on legacy name-based matching
> > (which is being removed from gpiolib), we introduce and register
> > software nodes for the underlying GPIO controllers (BCMA and SSB)
> > and reference them in the button properties.
> >
> > The first two patches add the software nodes to bcma-gpio and
> > ssb-gpio respectively. The third patch performs the conversion
> > for the BCM47XX buttons.
> >
> > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> > ---
> > As Johannes mentioned on v1 this best should go through MIPS tree.
>
> Adding Waldemar to Cc. He has recently done some work to
> get this platform working again in FreeWRT and should
> be able to test your patches on hardware.
I normally use LTS kernel on the hardware (Linksys WRT54GS v1.0).
But for testing I updated to 7.1.3. Attached is the dmesg without
Dmitry's patches. Button works, I can go into failsafe mode after
pressing the reset button on bootup.
With Dmitry's three patches applied I directly getting into failsafe
mode without pressing any button. Dmesg looks similar, but I get
following kernel message:
platform gpio-keys.0: deferred probe pending: gpio-keys: failed to get gpio
Looking at /dev I see no /dev/input/event0 device node anymore.
Attached is the small failsafe script I use on bootup.
Hope this helps.
Do I need to change my failsafe script for the new stuff or is
something else broken now? Do I miss some new kernel config option?
Or is the patch only for latest Linus git repo.
best regards
Waldemar
[-- Attachment #2: dmesg.txt --]
[-- Type: text/plain, Size: 10303 bytes --]
Linux version 7.1.3 (wbx@macbook) (mipsel-freewrt-linux-uclibc-gcc (GCC) 16.1.0, GNU ld (GNU Binutils) 2.46.1) #1 Tue Jul 14 22:54:31 CEST 2026
printk: legacy bootconsole [early0] enabled
CPU0 revision is: 00029007 (Broadcom BMIPS3300)
bcm47xx: Using ssb bus
ssb: Found chip with id 0x4712, rev 0x01 and package 0x00
can not parse nvram name (null)ag0(null) with value 255 got -34
ssb: Sonics Silicon Backplane found at address 0x18000000
Primary instruction cache 8kB, VIPT, 2-way, linesize 16 bytes.
Primary data cache 4kB, 2-way, VIPT, no aliases, linesize 16 bytes
Zone ranges:
Normal [mem 0x0000000000000000-0x0000000001ffffff]
Movable zone start for each node
Early memory node ranges
node 0: [mem 0x0000000000000000-0x0000000001ffffff]
Initmem setup node 0 [mem 0x0000000000000000-0x0000000001ffffff]
pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
pcpu-alloc: [0] 0
Kernel command line: root=/dev/mtdblock4 rootfstype=squashfs init=/etc/preinit noinitrd console=ttyS0,115200
Unknown kernel command line parameters "noinitrd", will be passed to user space.
printk: log buffer data + meta data: 131072 + 409600 = 540672 bytes
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes, linear)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes, linear)
Built 1 zonelists, mobility grouping on. Total pages: 8192
mem auto-init: stack:all(zero), heap alloc:off, heap free:off
SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
NR_IRQS: 256
MIPS: machine is Linksys WRT54G/GS/GL
clocksource: MIPS: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604467 ns
sched_clock: 32 bits at 100MHz, resolution 10ns, wraps every 21474836475ns
Console: colour dummy device 80x25
Calibrating delay loop... 198.65 BogoMIPS (lpj=397312)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes, linear)
VFS: Finished mounting rootfs on nullfs
Memory: 25676K/32768K available (4010K kernel code, 555K rwdata, 956K rodata, 228K init, 268K bss, 6348K reserved, 0K cma-reserved)
devtmpfs: initialized
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
posixtimers hash table entries: 512 (order: 0, 2048 bytes, linear)
futex hash table entries: 256 (4096 bytes on 1 NUMA nodes, total 4 KiB, linear).
NET: Registered PF_NETLINK/PF_ROUTE protocol family
clocksource: Switched to clocksource MIPS
PCI host bridge to bus 0000:00
pci_bus 0000:00: root bus resource [mem 0x40000000-0x7fffffff]
pci_bus 0000:00: root bus resource [io 0x0100-0x07ff]
pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
pci 0000:00:00.0: PCI: Fixing up bridge 0000:00:00.0
pci 0000:00:00.0: PCI: Fixing up device 0000:00:00.0
pci 0000:00:00.0: PCI: Fixing latency timer of device 0000:00:00.0 to 168
pci 0000:00:00.0: ssb_pcicore_fixup_pcibridge+0x0/0xf8 took 17926 usecs
pci 0000:00:00.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:00.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:00.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:01.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:01.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:01.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:02.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:02.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:02.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:03.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:03.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:03.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:04.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:04.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:04.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:05.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:05.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:05.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:06.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:06.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:06.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:07.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:07.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:07.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:08.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:08.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:08.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:09.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:09.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:09.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:0a.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:0a.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:0a.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:0b.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:0b.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:0b.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:0c.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:0c.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:0c.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:0d.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:0d.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:0d.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:0e.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:0e.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:0e.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci 0000:00:0f.0: [14e4:4712] type 00 class 0x060000 conventional PCI endpoint
pci 0000:00:0f.0: BAR 0 [mem 0x00000000-0x00001fff]
pci 0000:00:0f.0: BAR 1 [mem 0x00000000-0x07ffffff pref]
pci_bus 0000:00: busn_res: [bus 00-ff] end is updated to 00
gpio gpiochip0: Static allocation of GPIO base is deprecated, use dynamic allocation.
NET: Registered PF_INET protocol family
IP idents hash table entries: 2048 (order: 2, 16384 bytes, linear)
tcp_listen_portaddr_hash hash table entries: 1024 (order: 0, 4096 bytes, linear)
Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
TCP established hash table entries: 1024 (order: 0, 4096 bytes, linear)
TCP bind hash table entries: 1024 (order: 1, 8192 bytes, linear)
TCP: Hash tables configured (established 1024 bind 1024)
UDP hash table entries: 256 (order: 1, 8192 bytes, linear)
NET: Registered PF_UNIX/PF_LOCAL protocol family
PCI: CLS 0 bytes, default 16
Initialise system trusted keyrings
workingset: timestamp_bits=30 (anon: 26) max_order=13 bucket_order=0 (anon: 0)
squashfs: version 4.0 (2009/01/31) Phillip Lougher
Key type asymmetric registered
Asymmetric key parser 'x509' registered
io scheduler mq-deadline registered
Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
printk: legacy console [ttyS0] disabled
serial8250.0: ttyS0 at MMIO 0xb8000300 (irq = 3, base_baud = 3125000) is a 16550A
printk: legacy console [ttyS0] enabled
printk: legacy bootconsole [early0] disabled
serial8250.0: ttyS1 at MMIO 0xb8000400 (irq = 3, base_baud = 3125000) is a 16550A
physmap-flash physmap-flash.0: physmap platform flash device: [mem 0x1c000000-0x1e000000]
physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank. Manufacturer ID 0x000089 Chip ID 0x000017
physmap-flash.0: Found an alias at 0x800000 for the chip at 0x0
physmap-flash.0: Found an alias at 0x1000000 for the chip at 0x0
physmap-flash.0: Found an alias at 0x1800000 for the chip at 0x0
Intel/Sharp Extended Query Table at 0x0031
Intel/Sharp Extended Query Table at 0x0031
Using buffer write method
cfi_cmdset_0001: Erase suspend on write enabled
erase region 0: offset=0x0,size=0x20000,blocks=64
4 bcm47xxpart partitions found on MTD device physmap-flash.0
Creating 4 MTD partitions on "physmap-flash.0":
0x000000000000-0x000000040000 : "boot"
0x000000040000-0x0000007c0000 : "firmware"
failed to parse "brcm,trx-magic" DT attribute, using default: -89
3 trx partitions found on MTD device firmware
Creating 3 MTD partitions on "firmware":
0x00000000001c-0x000000000938 : "loader"
mtd: partition "loader" doesn't start on an erase/write block boundary -- force read-only
0x000000000938-0x0000001c0800 : "linux"
mtd: partition "linux" doesn't start on an erase/write block boundary -- force read-only
0x0000001c0800-0x000000780000 : "rootfs"
mtd: partition "rootfs" doesn't start on an erase/write block boundary -- force read-only
0x0000007c0000-0x0000007e0000 : "fwcf"
0x0000007e0000-0x000000800000 : "nvram"
b44 ssb0:1: could not find PHY at 30, use fixed one
Generic PHY fixed-0:00: attached PHY driver (mii_bus:phy_addr=fixed-0:00, irq=POLL)
b44 ssb0:1 eth0: Broadcom 44xx/47xx 10/100 PCI ethernet driver 00:0f:66:c8:74:47
NET: Registered PF_PACKET protocol family
8021q: 802.1Q VLAN Support v1.8
Loading compiled-in X.509 certificates
input: gpio-keys as /devices/platform/gpio-keys.0/input/input0
VFS: Mounted root (squashfs filesystem) readonly on device 31:4.
devtmpfs: mounted
VFS: Pivoted into new rootfs
Freeing unused kernel image (initmem) memory: 228K
This architecture does not have kernel memory protection.
Run /etc/preinit as init process
with arguments:
/etc/preinit
noinitrd
with environment:
HOME=/
TERM=linux
random: crng init done
b44 ssb0:1 eth0: Link is up at 100 Mbps, half duplex
b44 ssb0:1 eth0: Flow control is off for TX and off for RX
b44 ssb0:1 eth0: Link is Up - 100Mbps/Full - flow control off
cfg80211: Loading compiled-in X.509 certificates for regulatory database
Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
Loaded X.509 cert 'wens: 61c038651aabdcf94bd0ac7ff06c7248db18c600'
faux_driver regulatory: Direct firmware load for regulatory.db failed with error -2
cfg80211: failed to load regulatory.db
adm6996: adm6996_gpio: ADM6996L model PHY found.
b43-phy0: Broadcom 4712 WLAN found (core revision 7)
b43-phy0: Found PHY: Analog 2, Type 2 (G), Revision 2
b43-phy0: Found Radio: Manuf 0x17F, ID 0x2050, Revision 2, Version 0
Broadcom 43xx driver loaded [ Features: PL ]
ieee80211 phy0: Selected rate control algorithm 'minstrel_ht'
[-- Attachment #3: failsafe --]
[-- Type: text/plain, Size: 1318 bytes --]
#!/bin/sh
# detect router
id=$(nvram get productid)
case "$id" in
WL500*)
LED_PATH="/sys/class/leds/bcm47xx:unk:power"
;;
*)
LED_PATH="/sys/class/leds/bcm47xx:green:dmz"
;;
esac
# CONFIGURE
EVENT_DEV="/dev/input/event0" # change if your reset button is on a different event device
KEY_CODE="KEY_RESTART" # as reported by evtest
FAILSAFE_IP="192.168.1.1"
FAILSAFE_BCAST="192.168.1.255"
# Bring up LAN
ip link set up dev eth0
ip addr add ${FAILSAFE_IP}/24 broadcast ${FAILSAFE_BCAST} dev eth0
# Warn the user
netmsg ${FAILSAFE_BCAST} "Press reset now, to enter Failsafe!"
echo "Press reset now to enter Failsafe!"
sleep 2 &
# Check for reset press during the 2s window
# We'll read the event stream for KEY_RESTART with value 1 (press)
pressed=0
timeout 2 sh -c "
evtest ${EVENT_DEV} 2>/dev/null | \
grep -m1 '${KEY_CODE}.*value 1' && exit 0 || exit 1
"
if [ $? -eq 0 ]; then
pressed=1
fi
if [ "$pressed" -eq 1 ]; then
# Blink LED in background
(
while :; do
echo 1 > ${LED_PATH}/brightness
sleep 0.5
echo 0 > ${LED_PATH}/brightness
sleep 0.5
done
) &
netmsg ${FAILSAFE_BCAST} "Entering Failsafe!"
telnetd -l /bin/sh
exit 1
else
ip addr flush dev eth0
killall evtest
fi
^ permalink raw reply
* Re: [stable backport request] wifi: mt76: mt7921/mt7925: fix NULL dereference in CSA beacon
From: Sasha Levin @ 2026-07-15 0:12 UTC (permalink / raw)
To: stable
Cc: Sasha Levin, Felix Fietkau, Lorenzo Bianconi, linux-wireless,
linux-mediatek, Ismail Tarim
In-Reply-To: <20260713180433.52394-1-ismailtarim7@gmail.com>
> Please consider backporting the following mainline commit to the stable
> trees:
>
> commit 351dd7d2c80d ("wifi: mt76: mt7921/mt7925: fix NULL dereference in CSA beacon")
Queued for 7.1, thanks.
--
Thanks,
Sasha
^ permalink raw reply
* Re: [PATCH] wifi: iwlwifi: use unique thermal zone type
From: Jiajia Liu @ 2026-07-15 1:31 UTC (permalink / raw)
To: Korenblit, Miriam Rachel
Cc: Berg, Benjamin, Berg, Johannes, linux-wireless@vger.kernel.org,
linux-kernel@vger.kernel.org
In-Reply-To: <DS0PR11MB7880D6838D23BBE2A821FF1BA3F92@DS0PR11MB7880.namprd11.prod.outlook.com>
On Tue, Jul 14, 2026 at 06:58:40PM +0000, Korenblit, Miriam Rachel wrote:
>
>
> > -----Original Message-----
> > From: Jiajia Liu <liujiajia@kylinos.cn>
> > Sent: Thursday, March 12, 2026 3:41 AM
> > To: Korenblit, Miriam Rachel <miriam.rachel.korenblit@intel.com>; Berg,
> > Benjamin <benjamin.berg@intel.com>; Berg, Johannes
> > <johannes.berg@intel.com>; linux-wireless@vger.kernel.org; linux-
> > kernel@vger.kernel.org
> > Cc: Jiajia Liu <liujiajia@kylinos.cn>
> > Subject: [PATCH] wifi: iwlwifi: use unique thermal zone type
> >
> > Unloading iwlmld or iwlmvm can trigger hung task when two devices using
> > iwlmvm and iwlmld respectively on one setup. Their thermal zones have the
> > same type and share the same hwmon device created by the first zone. The
> > second zone indirectly holds the first zone through hwmon and prevents the first
> > zone from unregistering.
> > Tested with AX211 (8086:7af0) and BE200 (8086:272b).
> >
> > INFO: task modprobe:5295 blocked for more than 120 seconds.
> > Not tainted 7.0.0-rc2-up1 #2
> > Call Trace:
> > __schedule+0x4df/0xfd0
> > schedule+0x27/0xd0
> > schedule_timeout+0xbd/0x100
> > __wait_for_common+0x97/0x1b0
> > ? __pfx_schedule_timeout+0x10/0x10
> > thermal_zone_device_unregister+0x173/0x1c0
> > iwl_mld_thermal_exit+0xbb/0xd0 [iwlmld]
> > iwl_op_mode_mld_stop+0x37/0x120 [iwlmld]
> > iwl_opmode_deregister+0xc0/0x160 [iwlwifi]
> > __do_sys_delete_module+0x1b5/0x320
> >
> > Signed-off-by: Jiajia Liu <liujiajia@kylinos.cn>
> > ---
> > drivers/net/wireless/intel/iwlwifi/iwl-utils.c | 10 ++++++++++
> > drivers/net/wireless/intel/iwlwifi/iwl-utils.h | 4 ++++
> > drivers/net/wireless/intel/iwlwifi/mld/thermal.c | 4 ++--
> > drivers/net/wireless/intel/iwlwifi/mvm/tt.c | 6 ++++--
> > 4 files changed, 20 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-utils.c
> > b/drivers/net/wireless/intel/iwlwifi/iwl-utils.c
> > index d503544fda40..fe5fa5e59664 100644
> > --- a/drivers/net/wireless/intel/iwlwifi/iwl-utils.c
> > +++ b/drivers/net/wireless/intel/iwlwifi/iwl-utils.c
> > @@ -193,3 +193,13 @@ s8 iwl_average_neg_dbm(const u8 *neg_dbm_values,
> > u8 len)
> > return clamp(average_magnitude - i, -128, 0); }
> > IWL_EXPORT_SYMBOL(iwl_average_neg_dbm);
> > +
> > +#ifdef CONFIG_THERMAL
> > +u8 iwl_thermal_zone_get_id(void)
> > +{
> > + static atomic_t counter = ATOMIC_INIT(0);
> > +
> > + return atomic_inc_return(&counter) & 0xFF; }
> > +IWL_EXPORT_SYMBOL(iwl_thermal_zone_get_id);
> > +#endif
> > diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-utils.h
> > b/drivers/net/wireless/intel/iwlwifi/iwl-utils.h
> > index 5172035e4d26..84a4543fd290 100644
> > --- a/drivers/net/wireless/intel/iwlwifi/iwl-utils.h
> > +++ b/drivers/net/wireless/intel/iwlwifi/iwl-utils.h
> > @@ -55,4 +55,8 @@ u32 iwl_find_ie_offset(u8 *beacon, u8 eid, u32 frame_size)
> >
> > s8 iwl_average_neg_dbm(const u8 *neg_dbm_values, u8 len);
> >
> > +#ifdef CONFIG_THERMAL
> > +u8 iwl_thermal_zone_get_id(void);
> > +#endif
> > +
> > #endif /* __iwl_utils_h__ */
> > diff --git a/drivers/net/wireless/intel/iwlwifi/mld/thermal.c
> > b/drivers/net/wireless/intel/iwlwifi/mld/thermal.c
> > index f8a8c35066be..500028a4dbd3 100644
> > --- a/drivers/net/wireless/intel/iwlwifi/mld/thermal.c
> > +++ b/drivers/net/wireless/intel/iwlwifi/mld/thermal.c
> > @@ -5,6 +5,7 @@
> > #ifdef CONFIG_THERMAL
> > #include <linux/sort.h>
> > #include <linux/thermal.h>
> > +#include "iwl-utils.h"
> > #endif
> >
> > #include "fw/api/phy.h"
> > @@ -243,7 +244,6 @@ static void iwl_mld_thermal_zone_register(struct
> > iwl_mld *mld) {
> > int ret;
> > char name[16];
> > - static atomic_t counter = ATOMIC_INIT(0);
> > struct thermal_trip trips[IWL_MAX_DTS_TRIPS] = {
> > [0 ... IWL_MAX_DTS_TRIPS - 1] = {
> > .temperature = THERMAL_TEMP_INVALID, @@ -254,7
> > +254,7 @@ static void iwl_mld_thermal_zone_register(struct iwl_mld *mld)
> >
> > BUILD_BUG_ON(ARRAY_SIZE(name) >= THERMAL_NAME_LENGTH);
> >
> > - sprintf(name, "iwlwifi_%u", atomic_inc_return(&counter) & 0xFF);
> Any reason not to have iwlmld (and iwlmvm in mvm) instead of a shared counter?
I was not sure if it would break user space.
This issue is fixed by thermal hwmon at
https://lore.kernel.org/linux-pm/6017595.DvuYhMxLoT@rafael.j.wysocki/
with commit d6323469bcfb ("thermal: hwmon: Register a hwmon device for each thermal zone") in v7.2-rc1.
>
> > + sprintf(name, "iwlwifi_%u", iwl_thermal_zone_get_id());
> > mld->tzone =
> > thermal_zone_device_register_with_trips(name, trips,
> > IWL_MAX_DTS_TRIPS,
> > diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> > b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> > index 53bab21ebae2..ea8e616174db 100644
> > --- a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> > +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> > @@ -7,6 +7,9 @@
> > #include <linux/sort.h>
> >
> > #include "mvm.h"
> > +#ifdef CONFIG_THERMAL
> > +#include "iwl-utils.h"
> > +#endif
> >
> > #define IWL_MVM_NUM_CTDP_STEPS 20
> > #define IWL_MVM_MIN_CTDP_BUDGET_MW 150
> > @@ -652,7 +655,6 @@ static void iwl_mvm_thermal_zone_register(struct
> > iwl_mvm *mvm) {
> > int i, ret;
> > char name[16];
> > - static atomic_t counter = ATOMIC_INIT(0);
> >
> > if (!iwl_mvm_is_tt_in_fw(mvm)) {
> > mvm->tz_device.tzone = NULL;
> > @@ -662,7 +664,7 @@ static void iwl_mvm_thermal_zone_register(struct
> > iwl_mvm *mvm)
> >
> > BUILD_BUG_ON(ARRAY_SIZE(name) >= THERMAL_NAME_LENGTH);
> >
> > - sprintf(name, "iwlwifi_%u", atomic_inc_return(&counter) & 0xFF);
> > + sprintf(name, "iwlwifi_%u", iwl_thermal_zone_get_id());
> > /*
> > * 0 is a valid temperature,
> > * so initialize the array with S16_MIN which invalid temperature
> > --
> > 2.53.0
>
^ permalink raw reply
* [PATCH wireless] mac80211: stop tpt LED trigger timer before freeing trigger
From: Rosen Penev @ 2026-07-15 1:47 UTC (permalink / raw)
To: linux-wireless; +Cc: Johannes Berg, John W. Linville, open list
The throughput (tpt) LED trigger timer is only stopped in
ieee80211_stop_tpt_led_trig(), which is reached via ieee80211_stop_device()
when the interface is brought down. On a hot unplug, the device is torn down
through ieee80211_unregister_hw() without ever going through
ieee80211_do_stop(), so the timer is never stopped.
ieee80211_led_exit() then frees local->tpt_led_trigger (which embeds the
timer) without cancelling it. The still-armed timer keeps firing and
dereferences the freed tpt_trig, walking local->tpt_led's LED list in
led_trigger_blink() -> led_blink_set_nosleep() on the freed wifi LED class
device, causing a use-after-free page fault in interrupt context.
Call ieee80211_stop_tpt_led_trig() in ieee80211_led_exit(), before
unregistering the trigger and freeing the struct, so the timer is always
stopped and can never run after the trigger/LEDs are torn down.
Fixes: e1e540685437 ("mac80211: add throughput based LED blink trigger")
Assisted-by: opencode:hy3-free
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
net/mac80211/led.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/net/mac80211/led.c b/net/mac80211/led.c
index b5600d223452..5a7747dfbfb1 100644
--- a/net/mac80211/led.c
+++ b/net/mac80211/led.c
@@ -9,6 +9,8 @@
#include <linux/export.h>
#include "led.h"
+static void ieee80211_stop_tpt_led_trig(struct ieee80211_local *local);
+
void ieee80211_led_assoc(struct ieee80211_local *local, bool associated)
{
if (!atomic_read(&local->assoc_led_active))
@@ -206,6 +208,7 @@ void ieee80211_led_exit(struct ieee80211_local *local)
led_trigger_unregister(&local->rx_led);
if (local->tpt_led_trigger) {
+ ieee80211_stop_tpt_led_trig(local);
led_trigger_unregister(&local->tpt_led);
kfree(local->tpt_led_trigger);
}
--
2.55.0
^ permalink raw reply related
* Re: [PATCH ath-next] wifi: ath12k: Set congestion control max MSDU count
From: Baochen Qiang @ 2026-07-15 1:54 UTC (permalink / raw)
To: Thiraviyam Mariyappan, ath12k; +Cc: linux-wireless
In-Reply-To: <20260622062614.760166-1-thiraviyam.mariyappan@oss.qualcomm.com>
On 6/22/2026 2:26 PM, Thiraviyam Mariyappan wrote:
> Currently when running 128 clients UDP DL test in 5 GHz HE80 (NSS 2x2),
> firmware uses the default max MSDU count (16K MSDUs). This lower limit
> causes the firmware to compute a smaller TQM drop threshold, aggregate
> packets at a reduced rate, and results in increased packet drops with
> TQM drop threshold as the completion reason.
>
> To fix this issue, set WMI_PDEV_PARAM_SET_CONG_CTRL_MAX_MSDUS to the TX
> descriptor count using ath12k_wmi_pdev_set_param(). This increases the
> TQM drop threshold, reduces drop events, and improves throughput from
> ~722 Mbps to ~1060 Mbps with 1200 Mbps ingress.
>
> Add a new HW capability flag (supports_cong_ctrl_max_msdus) and enable
> the WMI parameter only on supported platforms.
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.6-01181-QCAHKSWPL_SILICONZ-1
>
> Signed-off-by: Thiraviyam Mariyappan <thiraviyam.mariyappan@oss.qualcomm.com>
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
^ permalink raw reply
* Re: [PATCH v2] wifi: ath12k: Constify struct ath12k_dp_arch_ops
From: Baochen Qiang @ 2026-07-15 2:03 UTC (permalink / raw)
To: Christophe JAILLET, Jeff Johnson
Cc: linux-kernel, kernel-janitors, linux-wireless, ath12k
In-Reply-To: <969d732e2c6f169e1aa5e89c7e01743a1adb55df.1784010931.git.christophe.jaillet@wanadoo.fr>
On 7/14/2026 4:39 PM, Christophe JAILLET wrote:
> 'struct ath12k_dp_arch_ops' is not modified in this driver.
>
> Constifying this structure moves some data to a read-only section, so
> increases overall security, especially when the structure holds some
> function pointers.
>
> On a x86_64, with allmodconfig, as an example:
> Before:
> ======
> text data bss dec hex filename
> 6318 3384 0 9702 25e6 drivers/net/wireless/ath/ath12k/wifi7/dp.o
>
> After:
> =====
> text data bss dec hex filename
> 6478 3224 0 9702 25e6 drivers/net/wireless/ath/ath12k/wifi7/dp.o
>
> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: Baochen Qiang <baochen.qiang@oss.qualcomm.com>
^ permalink raw reply
* [PATCH wireless] wifi: mt76: mt7925: ensure tx headroom in usb_sdio_tx_prepare_skb
From: Devin Wittmayer @ 2026-07-15 2:33 UTC (permalink / raw)
To: Felix Fietkau
Cc: Lorenzo Bianconi, Ryder Lee, Shayne Chen, Sean Wang, Deren Wu,
Ming Yen Hsieh, Quan Zhou, linux-wireless, stable,
Devin Wittmayer
mt7925_usb_sdio_tx_prepare_skb() pushes a TX descriptor and a USB
header onto every skb and assumes the headroom for them is already
there. That holds for locally generated traffic, where mac80211
reserves hw->extra_tx_headroom, but forwarded frames are sent through
ieee80211_8023_xmit(), which does not reserve it. Bridge a wired
interface to an mt7925u AP and the first forwarded frame that arrives
short panics the kernel:
skbuff: skb_under_panic: len:415 put:4 tail:0x19b end:0x640 dev:wlan1
kernel BUG at net/core/skbuff.c:212!
Call trace:
skb_panic+0x58/0x60 (P)
skb_push+0x58/0x60
mt7925_usb_sdio_tx_prepare_skb+0xf8/0x1b8 [mt7925_common]
mt76u_tx_queue_skb+0xa0/0x1f8 [mt76_usb]
__mt76_tx_queue_skb+0x54/0xe8 [mt76]
mt76_txq_schedule.part.0+0x204/0x478 [mt76]
mt76_txq_schedule_all+0x50/0x80 [mt76]
mt792x_tx_worker+0x68/0x100 [mt792x_lib]
__mt76_worker_fn+0x84/0x150 [mt76]
Whether a given setup hits it depends on how much headroom the ingress
netdev leaves in its rx skbs. Reproduced on a Raspberry Pi 5 bridging
onboard ethernet to a Netgear A9000; originally reported on an MT7986
router running OpenWrt. Nick Morrow's testing on a Pi 4 (bcmgenet),
which leaves more headroom, helped narrow the trigger to the ingress
path.
The same bug was fixed on mt7921 by commit 98c4d0abf5c4 ("mt76:
mt7921: don't assume adequate headroom for SDIO headers"), but mt7925
was copied from mt7921 without the fix. Add the same guard here.
Fixes: c948b5da6bbe ("wifi: mt76: mt7925: add Mediatek Wi-Fi7 driver for mt7925 chips")
Cc: stable@vger.kernel.org
Link: https://github.com/morrownr/mt76/issues/52
Signed-off-by: Devin Wittmayer <lucid_duck@justthetip.ca>
---
drivers/net/wireless/mediatek/mt76/mt7925/mac.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/wireless/mediatek/mt76/mt7925/mac.c b/drivers/net/wireless/mediatek/mt76/mt7925/mac.c
index 0641a7131d7c..a515147a6ccf 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7925/mac.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7925/mac.c
@@ -1427,6 +1427,10 @@ int mt7925_usb_sdio_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,
if (!wcid)
wcid = &dev->mt76.global_wcid;
+ err = skb_cow_head(skb, MT_SDIO_TXD_SIZE + MT_SDIO_HDR_SIZE);
+ if (err)
+ return err;
+
if (sta) {
struct mt792x_sta *msta = (struct mt792x_sta *)sta->drv_priv;
--
2.55.0
^ permalink raw reply related
* Re: [PATCH v2] wifi: ath11k: fix resource leak on error in ext IRQ setup
From: Baochen Qiang @ 2026-07-15 3:15 UTC (permalink / raw)
To: ZhaoJinming, Jeff Johnson; +Cc: linux-wireless, ath11k, linux-kernel
In-Reply-To: <20260713105912.20095-1-zhaojinming@uniontech.com>
On 7/13/2026 6:59 PM, ZhaoJinming wrote:
> In ath11k_ahb_config_irq(), when a CE request_irq() fails, the function
> returns the error immediately without freeing the CE IRQs that were
> successfully registered in previous loop iterations. The probe error
> path does not call ath11k_ahb_free_irq() either, so the previously
> registered CE IRQ handlers remain attached to the interrupt lines and
> are never released.
>
> In ath11k_ahb_config_ext_irq(), when an external request_irq() fails,
> the error is only logged and the loop continues. The function then
> returns 0 indicating success, leaving the device in a partially
> configured state where some external IRQs are not registered. This
> causes enable_irq()/disable_irq()/free_irq() to be called on
> unregistered IRQs during runtime and remove/shutdown, triggering
> WARN_ON(!desc->action), and missing interrupt handlers lead to data
> loss.
>
> Additionally, if alloc_netdev_dummy() fails for a later IRQ group, the
> function returns -ENOMEM without freeing the ext IRQs and napi_ndev
> that were successfully set up for earlier groups.
>
> Fix all three issues: propagate the error up to the caller and unwind
> all successfully registered IRQs and allocated resources on failure.
>
> Signed-off-by: ZhaoJinming <zhaojinming@uniontech.com>
> ---
>
> Changes in v2:
> - Move `irq_grp` declaration from for-loop body to function scope to fix
> compile error in err_request_irq error path.
> - Set ret = -ENOMEM before goto err_request_irq on alloc_netdev_dummy()
> failure to avoid returning uninitialized value.
> - When ath11k_ahb_config_ext_irq() fails, unwind the already-registered
> CE IRQs via a shared err_ce_irq cleanup path to avoid leaking them.
>
> drivers/net/wireless/ath/ath11k/ahb.c | 48 ++++++++++++++++++++++++++--
> 1 file changed, 44 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath11k/ahb.c b/drivers/net/wireless/ath/ath11k/ahb.c
> index f566d699d074..11bafbd94aff 100644
> --- a/drivers/net/wireless/ath/ath11k/ahb.c
> +++ b/drivers/net/wireless/ath/ath11k/ahb.c
> @@ -524,20 +524,24 @@ static irqreturn_t ath11k_ahb_ext_interrupt_handler(int irq, void *arg)
> static int ath11k_ahb_config_ext_irq(struct ath11k_base *ab)
> {
> struct ath11k_hw_params *hw = &ab->hw_params;
> + struct ath11k_ext_irq_grp *irq_grp;
> int i, j;
> int irq;
> int ret;
>
> for (i = 0; i < ATH11K_EXT_IRQ_GRP_NUM_MAX; i++) {
> - struct ath11k_ext_irq_grp *irq_grp = &ab->ext_irq_grp[i];
> + irq_grp = &ab->ext_irq_grp[i];
> u32 num_irq = 0;
declaration after statement. better to have num_irq declaration at the beginning of the
for loop.
>
> irq_grp->ab = ab;
> irq_grp->grp_id = i;
>
> irq_grp->napi_ndev = alloc_netdev_dummy(0);
> - if (!irq_grp->napi_ndev)
> - return -ENOMEM;
> + if (!irq_grp->napi_ndev) {
> + ret = -ENOMEM;
> + irq_grp->num_irq = 0;
the ath12k_base is allocated by kzalloc, so the ext_irq_grp array, as a member of
ath12k_base, is already zero'ed, hence this re-initialization is redundant. But I am OK
with it since it improves code readability.
> + goto err_request_irq;
> + }
>
> netif_napi_add(irq_grp->napi_ndev, &irq_grp->napi,
> ath11k_ahb_ext_grp_napi_poll);
> @@ -600,11 +604,25 @@ static int ath11k_ahb_config_ext_irq(struct ath11k_base *ab)
> if (ret) {
> ath11k_err(ab, "failed request_irq for %d\n",
> irq);
> + irq_grp->num_irq = j;
with this forcing to the number of successful irq request ...
> + goto err_request_irq;
> }
> }
> }
>
> return 0;
> +
> +err_request_irq:
> + for ( ; i >= 0; i--) {
then with the index starting from the failed loop ...
> + irq_grp = &ab->ext_irq_grp[i];
> + for (j = irq_grp->num_irq - 1; j >= 0; j--)
> + free_irq(ab->irq_num[irq_grp->irqs[j]], irq_grp);
> + if (irq_grp->napi_ndev) {
and with the guard ...
> + netif_napi_del(&irq_grp->napi);
> + free_netdev(irq_grp->napi_ndev);
> + }
> + }
at the cost of above three, the centralized err handling is working. Yeah this simplifies
the code, but makes it hard to understand.
what about:
1. refactor the existing ath11k_ahb_free_ext_irq():
ath11k_ahb_free_ext_irq_grp()
{
for (j = 0; j < irq_grp->num_irq; j++)
free_irq(ab->irq_num[irq_grp->irqs[j]], irq_grp);
netif_napi_del(&irq_grp->napi);
free_netdev(irq_grp->napi_ndev);
}
then we can have
ath11k_ahb_free_ext_irq()
{
for (i = 0; i < ATH11K_EXT_IRQ_GRP_NUM_MAX; i++)
ath11k_ahb_free_ext_irq_grp(irq_grp)
}
and the complete err handling of ext irq can be
ath11k_ahb_config_ext_irq()
{
for (i = 0; i < ATH11K_EXT_IRQ_GRP_NUM_MAX; i++) {
irq_grp->napi_ndev = alloc_netdev_dummy(0);
if (!irq_grp->napi_ndev) {
ret = -ENOMEM;
irq_grp->num_irq = 0;
goto err_request_irq;
}
...
for (j = 0; j < num_irq; j++) {
ret = request_irq();
if (ret) {
irq_grp->num_irq = j;
ath11k_ahb_free_ext_irq_grp(irq_grp);
goto err_request_irq;
}
}
irq_grp->num_irq = num_irq;
}
err_request_irq:
for ( i--; i >= 0; i--) {
irq_grp = &ab->ext_irq_grp[i];
ath11k_ahb_free_ext_irq_grp(irq_grp);
}
return ret;
}
> + return ret;
> }
>
> static int ath11k_ahb_config_irq(struct ath11k_base *ab)
> @@ -629,15 +647,30 @@ static int ath11k_ahb_config_irq(struct ath11k_base *ab)
> ret = request_irq(irq, ath11k_ahb_ce_interrupt_handler,
> IRQF_TRIGGER_RISING, irq_name[irq_idx],
> ce_pipe);
> - if (ret)
> - return ret;
> + if (ret) {
> + ath11k_err(ab, "failed request_irq for %d\n", irq);
> + goto err_ce_irq;
> + }
>
> ab->irq_num[irq_idx] = irq;
> }
>
> /* Configure external interrupts */
> ret = ath11k_ahb_config_ext_irq(ab);
> + if (ret) {
> + ath11k_err(ab, "failed to configure ext irq: %d\n", ret);
> + goto err_ce_irq;
> + }
> +
> + return 0;
>
> +err_ce_irq:
> + for (i--; i >= 0; i--) {
> + if (ath11k_ce_get_attr_flags(ab, i) & CE_ATTR_DIS_INTR)
> + continue;
> + free_irq(ab->irq_num[ATH11K_IRQ_CE0_OFFSET + i],
> + &ab->ce.ce_pipe[i]);
> + }
this is also a duplication of the CE part of ath11k_ahb_free_irq(), consider refactoring
the exsiting helper and reuse it.
> return ret;
> }
>
^ permalink raw reply
* [PATCH] wifi: mt76: pass LED define via ccflags-y in driver submodules
From: Mateus B. Cassiano @ 2026-07-15 4:44 UTC (permalink / raw)
To: nbd
Cc: lorenzo, ryder.lee, shayne.chen, sean.wang, linux-wireless,
linux-mediatek, Mateus B. Cassiano
Commit d2b01fbc329b ("mt76: pass LED define via ccflags-y")
converted the top-level Makefile from the deprecated EXTRA_CFLAGS
to ccflags-y so that -DCONFIG_MT76_LEDS keeps working now that
kbuild no longer honours EXTRA_CFLAGS.
However, ccflags-y (like EXTRA_CFLAGS before it) only applies to
the kbuild makefile it is set in and is not inherited by
subdirectories pulled in via obj-y/obj-m. The mt7603, mt7615 and
mt7915 driver subdirectories each set their own
"EXTRA_CFLAGS += ... -DCONFIG_MT76_LEDS", which is now a silent
no-op. As a result, CONFIG_MT76_LEDS is undefined when building
mt7603/init.c, mt7615/init.c, mt7615/pci_init.c and mt7915/init.c,
the IS_ENABLED(CONFIG_MT76_LEDS) blocks are compiled out, and the
mt76-* LED class devices are never registered for these drivers.
Convert these subdirectory Makefiles to ccflags-y as well.
mt7996/Makefile never carried the define at all, even though
mt7996/init.c has the same IS_ENABLED(CONFIG_MT76_LEDS) checks for
its LED callbacks and GPIO mux setup. Add ccflags-y there too so
mt7996 LED support is enabled consistently with the other drivers.
mt76x0, mt76x2, mt7921 and mt7925 contain no CONFIG_MT76_LEDS
references and are left untouched.
Fixes: d2b01fbc329b ("mt76: pass LED define via ccflags-y")
Link: https://github.com/openwrt/mt76/issues/1077
Signed-off-by: Mateus B. Cassiano <mbc07@live.com>
---
Notes for reviewers (not for the commit message):
Previously submitted as https://github.com/openwrt/mt76/pull/1090
before I noticed that PRs on the GitHub mirror don't seem to be
reviewed.
Tested on a D-Link DIR-882 A1 (dual MT7615 radios) by building
OpenWrt at commit e4c35c2eec66 with this change applied to the mt76
package: the mt76-* LED class devices appeared again under
/sys/class/leds. The same result was reported on different MT7615
hardware in
https://github.com/openwrt/mt76/issues/1077#issuecomment-4557037203
The mt7603 and mt7915 hunks are the same fix applied for consistency,
but I don't have that hardware to test.
mt7996 in particular enables IS_ENABLED(CONFIG_MT76_LEDS) code paths
that appear to have never been built with the define before, so it
would be good if someone with mt7996 hardware could confirm nothing
regresses. I'm happy to drop the mt7996 hunk and keep only the others
if preferred.
mt7603/Makefile | 2 +-
mt7615/Makefile | 2 +-
mt7915/Makefile | 2 +-
mt7996/Makefile | 1 +
4 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/mt7603/Makefile b/mt7603/Makefile
index 57d28591..5e7ab30f 100644
--- a/mt7603/Makefile
+++ b/mt7603/Makefile
@@ -1,5 +1,5 @@
# SPDX-License-Identifier: BSD-3-Clause-Clear
-EXTRA_CFLAGS += -Werror -DCONFIG_MT76_LEDS
+ccflags-y += -Werror -DCONFIG_MT76_LEDS
obj-m += mt7603e.o
mt7603e-y := \
diff --git a/mt7615/Makefile b/mt7615/Makefile
index 9274c006..8b8eff3f 100644
--- a/mt7615/Makefile
+++ b/mt7615/Makefile
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause-Clear
-EXTRA_CFLAGS += -DCONFIG_MT76_LEDS
+ccflags-y += -DCONFIG_MT76_LEDS
obj-$(CONFIG_MT7615_COMMON) += mt7615-common.o
obj-$(CONFIG_MT7615E) += mt7615e.o
obj-$(CONFIG_MT7663_USB_SDIO_COMMON) += mt7663-usb-sdio-common.o
diff --git a/mt7915/Makefile b/mt7915/Makefile
index 6b0058ca..7ea5b05c 100644
--- a/mt7915/Makefile
+++ b/mt7915/Makefile
@@ -1,6 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause-Clear
-EXTRA_CFLAGS += -DCONFIG_MT76_LEDS
+ccflags-y += -DCONFIG_MT76_LEDS
obj-$(CONFIG_MT7915E) += mt7915e.o
mt7915e-y := pci.o init.o dma.o eeprom.o main.o mcu.o mac.o \
diff --git a/mt7996/Makefile b/mt7996/Makefile
index 69d2d4bb..28ecee3c 100644
--- a/mt7996/Makefile
+++ b/mt7996/Makefile
@@ -1,5 +1,6 @@
# SPDX-License-Identifier: BSD-3-Clause-Clear
+ccflags-y += -DCONFIG_MT76_LEDS
obj-$(CONFIG_MT7996E) += mt7996e.o
mt7996e-y := pci.o init.o dma.o eeprom.o main.o mcu.o mac.o \
--
2.43.0
^ permalink raw reply related
* Re: [PATCH] wifi: ath10k: Drop redundant NULL check on devm_clk_get()
From: Krzysztof Kozlowski @ 2026-07-15 4:47 UTC (permalink / raw)
To: Jeff Johnson, Jeff Johnson, linux-wireless, ath10k, linux-kernel
In-Reply-To: <75ef4371-b66a-486a-8555-e3a3f6ee5d88@oss.qualcomm.com>
On 14/07/2026 00:31, Jeff Johnson wrote:
> On 7/5/2026 10:24 AM, Krzysztof Kozlowski wrote:
>> devm_clk_get() does not return NULL (only valid clock or ERR pointer),
>> so simplify the code to drop redundant IS_ERR_OR_NULL().
>
> FWIW my AI review agent says:
> Under !CONFIG_HAVE_CLK (x86 COMPILE_TEST), devm_clk_get() returns NULL;
> IS_ERR(NULL) is false so clock_init() returns 0 with NULL clocks stored
>
> Perhaps the stub function in include/linux/clk.h should be updated to return
> an ERR_PTR() instead of NULL?
>
Yes, that's on my todo list.
Best regards,
Krzysztof
^ permalink raw reply
* [PATCH] wifi: rtw89: wow: fix unsupported cipher debug messages
From: zhaoguohan @ 2026-07-15 6:08 UTC (permalink / raw)
To: Ping-Ke Shih, linux-wireless; +Cc: linux-kernel
From: GuoHan Zhao <zhaoguohan@kylinos.cn>
Correct two WoWLAN debug messages to say "unsupported cipher".
Signed-off-by: GuoHan Zhao <zhaoguohan@kylinos.cn>
---
drivers/net/wireless/realtek/rtw89/wow.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/wireless/realtek/rtw89/wow.c b/drivers/net/wireless/realtek/rtw89/wow.c
index 8dadd8df4fc6..a162a8431b6e 100644
--- a/drivers/net/wireless/realtek/rtw89/wow.c
+++ b/drivers/net/wireless/realtek/rtw89/wow.c
@@ -358,7 +358,7 @@ static void rtw89_wow_get_key_info_iter(struct ieee80211_hw *hw,
key_info->gtk_keyidx = key->keyidx;
break;
default:
- rtw89_debug(rtwdev, RTW89_DBG_WOW, "unsupport cipher %x\n",
+ rtw89_debug(rtwdev, RTW89_DBG_WOW, "unsupported cipher %x\n",
key->cipher);
goto err;
}
@@ -443,7 +443,7 @@ static void rtw89_wow_set_key_info_iter(struct ieee80211_hw *hw,
case WLAN_CIPHER_SUITE_WEP104:
break;
default:
- rtw89_debug(rtwdev, RTW89_DBG_WOW, "unsupport cipher %x\n",
+ rtw89_debug(rtwdev, RTW89_DBG_WOW, "unsupported cipher %x\n",
key->cipher);
goto err;
}
base-commit: 58717b2a1365d06c8c64b72aa948541b53fe31eb
--
2.43.0
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox