staging: r819xU_phy: Remove some local variables from the stack
authorLee Jones <lee.jones@linaro.org>
Wed, 14 Apr 2021 18:10:37 +0000 (19:10 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 10 May 2021 09:19:23 +0000 (11:19 +0200)
Fixes the following W=1 kernel build warning(s):

 drivers/staging/rtl8192u/r819xU_phy.c: In function ‘rtl8192_phy_SwChnlStepByStep’:
 drivers/staging/rtl8192u/r819xU_phy.c:1328:1: warning: the frame size of 1096 bytes is larger than 1024 bytes [-Wframe-larger-than=]

Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Michael Straube <straube.linux@gmail.com>
Cc: linux-staging@lists.linux.dev
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Link: https://lore.kernel.org/r/20210414181129.1628598-6-lee.jones@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8192u/r819xU_phy.c

index eef751d..37b8255 100644 (file)
@@ -1185,14 +1185,32 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel,
                                       u8 *stage, u8 *step, u32 *delay)
 {
        struct r8192_priv *priv = ieee80211_priv(dev);
-       struct sw_chnl_cmd   PreCommonCmd[MAX_PRECMD_CNT];
+       struct sw_chnl_cmd   *PreCommonCmd;
        u32                PreCommonCmdCnt;
-       struct sw_chnl_cmd   PostCommonCmd[MAX_POSTCMD_CNT];
+       struct sw_chnl_cmd   *PostCommonCmd;
        u32                PostCommonCmdCnt;
-       struct sw_chnl_cmd   RfDependCmd[MAX_RFDEPENDCMD_CNT];
+       struct sw_chnl_cmd   *RfDependCmd;
        u32                RfDependCmdCnt;
        struct sw_chnl_cmd  *CurrentCmd = NULL;
        u8                 e_rfpath;
+       bool               ret;
+
+       PreCommonCmd = kzalloc(sizeof(*PreCommonCmd) * MAX_PRECMD_CNT, GFP_KERNEL);
+       if (!PreCommonCmd)
+               return false;
+
+       PostCommonCmd = kzalloc(sizeof(*PostCommonCmd) * MAX_POSTCMD_CNT, GFP_KERNEL);
+       if (!PostCommonCmd) {
+               kfree(PreCommonCmd);
+               return false;
+       }
+
+       RfDependCmd = kzalloc(sizeof(*RfDependCmd) * MAX_RFDEPENDCMD_CNT, GFP_KERNEL);
+       if (!RfDependCmd) {
+               kfree(PreCommonCmd);
+               kfree(PostCommonCmd);
+               return false;
+       }
 
        RT_TRACE(COMP_CH, "%s() stage: %d, step: %d, channel: %d\n",
                 __func__, *stage, *step, channel);
@@ -1201,7 +1219,8 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel,
                /* return true to tell upper caller function this channel
                 * setting is finished! Or it will in while loop.
                 */
-               return true;
+               ret = true;
+               goto out;
        }
        /* FIXME: need to check whether channel is legal or not here */
 
@@ -1227,7 +1246,8 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel,
                        RT_TRACE(COMP_ERR,
                                 "illegal channel for Zebra 8225: %d\n",
                                 channel);
-                       return true;
+                       ret = true;
+                       goto out;
                }
                rtl8192_phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++,
                                              MAX_RFDEPENDCMD_CNT,
@@ -1246,7 +1266,8 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel,
                        RT_TRACE(COMP_ERR,
                                 "illegal channel for Zebra 8256: %d\n",
                                 channel);
-                       return true;
+                       ret = true;
+                       goto out;
                }
                rtl8192_phy_SetSwChnlCmdArray(RfDependCmd, RfDependCmdCnt++,
                                              MAX_RFDEPENDCMD_CNT,
@@ -1262,7 +1283,8 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel,
 
        default:
                RT_TRACE(COMP_ERR, "Unknown RFChipID: %d\n", priv->rf_chip);
-               return true;
+               ret = true;
+               goto out;
        }
 
        do {
@@ -1281,7 +1303,8 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel,
                if (CurrentCmd->cmd_id == CMD_ID_END) {
                        if ((*stage) == 2) {
                                (*delay) = CurrentCmd->ms_delay;
-                               return true;
+                               ret = true;
+                               goto out;
                        }
                        (*stage)++;
                        (*step) = 0;
@@ -1324,7 +1347,14 @@ static u8 rtl8192_phy_SwChnlStepByStep(struct net_device *dev, u8 channel,
 
        (*delay) = CurrentCmd->ms_delay;
        (*step)++;
-       return false;
+       ret = false;
+
+out:
+       kfree(PreCommonCmd);
+       kfree(PostCommonCmd);
+       kfree(RfDependCmd);
+
+       return ret;
 }
 
 /******************************************************************************