]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: ath11k: fix the stack frame size warning in ath11k_vif_wow_set_wakeups
authorMiaoqing Pan <quic_miaoqing@quicinc.com>
Thu, 29 Aug 2024 07:52:53 +0000 (15:52 +0800)
committerKalle Valo <quic_kvalo@quicinc.com>
Sat, 28 Sep 2024 09:16:29 +0000 (12:16 +0300)
Fix the following W=1 kernel build warning:

drivers/net/wireless/ath/ath11k/wow.c: In function ‘ath11k_vif_wow_set_wakeups’:
drivers/net/wireless/ath/ath11k/wow.c:461:1: warning: the frame size of 1352 bytes is larger than 1024 bytes [-Wframe-larger-than=]

Remove the nonessential variable 'struct cfg80211_pkt_pattern
old_pattern' by relocating bitmask to bytemask conversion into
ath11k_wow_convert_8023_to_80211().

Tested-on: WCN6855 hw2.1 PCI WLAN.HSP.1.1-04358-QCAHSPSWPL_V1_V2_SILICONZ_LITE-1

Signed-off-by: Miaoqing Pan <quic_miaoqing@quicinc.com>
Acked-by: Jeff Johnson <quic_jjohnson@quicinc.com>
Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
Link: https://patch.msgid.link/20240829075253.657667-1-quic_miaoqing@quicinc.com
drivers/net/wireless/ath/ath11k/wow.c

index 99d8ba45a75ba680d0b9a140599d4240a2eec3ea..827085a926b27a1cadfd736a9ee9fd5e294c4b55 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: BSD-3-Clause-Clear
 /*
  * Copyright (c) 2020 The Linux Foundation. All rights reserved.
- * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 
 #include <linux/delay.h>
@@ -155,6 +155,7 @@ static void ath11k_wow_convert_8023_to_80211(struct cfg80211_pkt_pattern *new,
        u8 hdr_8023_bit_mask[ETH_HLEN] = {};
        u8 hdr_80211_pattern[WOW_HDR_LEN] = {};
        u8 hdr_80211_bit_mask[WOW_HDR_LEN] = {};
+       u8 bytemask[WOW_MAX_PATTERN_SIZE] = {};
 
        int total_len = old->pkt_offset + old->pattern_len;
        int hdr_80211_end_offset;
@@ -172,11 +173,17 @@ static void ath11k_wow_convert_8023_to_80211(struct cfg80211_pkt_pattern *new,
        struct rfc1042_hdr *new_rfc_mask =
                (struct rfc1042_hdr *)(hdr_80211_bit_mask + hdr_len);
        int rfc_len = sizeof(*new_rfc_pattern);
+       int i;
+
+       /* convert bitmask to bytemask */
+       for (i = 0; i < old->pattern_len; i++)
+               if (old->mask[i / 8] & BIT(i % 8))
+                       bytemask[i] = 0xff;
 
        memcpy(hdr_8023_pattern + old->pkt_offset,
               old->pattern, ETH_HLEN - old->pkt_offset);
        memcpy(hdr_8023_bit_mask + old->pkt_offset,
-              old->mask, ETH_HLEN - old->pkt_offset);
+              bytemask, ETH_HLEN - old->pkt_offset);
 
        /* Copy destination address */
        memcpy(new_hdr_pattern->addr1, old_hdr_pattern->h_dest, ETH_ALEN);
@@ -232,7 +239,7 @@ static void ath11k_wow_convert_8023_to_80211(struct cfg80211_pkt_pattern *new,
                       (void *)old->pattern + ETH_HLEN - old->pkt_offset,
                       total_len - ETH_HLEN);
                memcpy((u8 *)new->mask + new->pattern_len,
-                      (void *)old->mask + ETH_HLEN - old->pkt_offset,
+                      bytemask + ETH_HLEN - old->pkt_offset,
                       total_len - ETH_HLEN);
 
                new->pattern_len += total_len - ETH_HLEN;
@@ -393,35 +400,31 @@ static int ath11k_vif_wow_set_wakeups(struct ath11k_vif *arvif,
        }
 
        for (i = 0; i < wowlan->n_patterns; i++) {
-               u8 bitmask[WOW_MAX_PATTERN_SIZE] = {};
                u8 ath_pattern[WOW_MAX_PATTERN_SIZE] = {};
                u8 ath_bitmask[WOW_MAX_PATTERN_SIZE] = {};
                struct cfg80211_pkt_pattern new_pattern = {};
-               struct cfg80211_pkt_pattern old_pattern = patterns[i];
-               int j;
 
                new_pattern.pattern = ath_pattern;
                new_pattern.mask = ath_bitmask;
                if (patterns[i].pattern_len > WOW_MAX_PATTERN_SIZE)
                        continue;
-               /* convert bytemask to bitmask */
-               for (j = 0; j < patterns[i].pattern_len; j++)
-                       if (patterns[i].mask[j / 8] & BIT(j % 8))
-                               bitmask[j] = 0xff;
-               old_pattern.mask = bitmask;
 
                if (ar->wmi->wmi_ab->wlan_resource_config.rx_decap_mode ==
                    ATH11K_HW_TXRX_NATIVE_WIFI) {
                        if (patterns[i].pkt_offset < ETH_HLEN) {
-                               u8 pattern_ext[WOW_MAX_PATTERN_SIZE] = {};
-
-                               memcpy(pattern_ext, old_pattern.pattern,
-                                      old_pattern.pattern_len);
-                               old_pattern.pattern = pattern_ext;
                                ath11k_wow_convert_8023_to_80211(&new_pattern,
-                                                                &old_pattern);
+                                                                &patterns[i]);
                        } else {
-                               new_pattern = old_pattern;
+                               int j;
+
+                               new_pattern = patterns[i];
+                               new_pattern.mask = ath_bitmask;
+
+                               /* convert bitmask to bytemask */
+                               for (j = 0; j < patterns[i].pattern_len; j++)
+                                       if (patterns[i].mask[j / 8] & BIT(j % 8))
+                                               ath_bitmask[j] = 0xff;
+
                                new_pattern.pkt_offset += WOW_HDR_LEN - ETH_HLEN;
                        }
                }