[lvc-project] [PATCH 1/3] wifi: brcmfmac: handle possible WOWL configuration error
Dmitry Antipov
dmantipov at yandex.ru
Wed Jun 7 19:16:08 MSK 2023
Convert 'brcmf_configure_wowl()' to return 's32' which may be
an error raised by 'brcmf_fil_iovar_data_set()', pass the
value to 'brcmf_cfg80211_suspend()' and adjust related code.
Found by Linux Verification Center (linuxtesting.org) with SVACE.
Signed-off-by: Dmitry Antipov <dmantipov at yandex.ru>
---
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 32 +++++++++++--------
1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index de8a2e27f49c..5a0b32322b4f 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -4175,12 +4175,13 @@ static s32 brcmf_cfg80211_resume(struct wiphy *wiphy)
return 0;
}
-static void brcmf_configure_wowl(struct brcmf_cfg80211_info *cfg,
- struct brcmf_if *ifp,
- struct cfg80211_wowlan *wowl)
+static s32 brcmf_configure_wowl(struct brcmf_cfg80211_info *cfg,
+ struct brcmf_if *ifp,
+ struct cfg80211_wowlan *wowl)
{
u32 wowl_config;
struct brcmf_wowl_wakeind_le wowl_wakeind;
+ s32 err = 0;
u32 i;
brcmf_dbg(TRACE, "Suspend, wowl config.\n");
@@ -4223,12 +4224,15 @@ static void brcmf_configure_wowl(struct brcmf_cfg80211_info *cfg,
wowl_config |= BRCMF_WOWL_UNASSOC;
memcpy(&wowl_wakeind, "clear", 6);
- brcmf_fil_iovar_data_set(ifp, "wowl_wakeind", &wowl_wakeind,
- sizeof(wowl_wakeind));
- brcmf_fil_iovar_int_set(ifp, "wowl", wowl_config);
- brcmf_fil_iovar_int_set(ifp, "wowl_activate", 1);
- brcmf_bus_wowl_config(cfg->pub->bus_if, true);
- cfg->wowl.active = true;
+ err = brcmf_fil_iovar_data_set(ifp, "wowl_wakeind", &wowl_wakeind,
+ sizeof(wowl_wakeind));
+ if (err == 0) {
+ brcmf_fil_iovar_int_set(ifp, "wowl", wowl_config);
+ brcmf_fil_iovar_int_set(ifp, "wowl_activate", 1);
+ brcmf_bus_wowl_config(cfg->pub->bus_if, true);
+ cfg->wowl.active = true;
+ }
+ return err;
}
static int brcmf_keepalive_start(struct brcmf_if *ifp, unsigned int interval)
@@ -4256,6 +4260,7 @@ static s32 brcmf_cfg80211_suspend(struct wiphy *wiphy,
struct net_device *ndev = cfg_to_ndev(cfg);
struct brcmf_if *ifp = netdev_priv(ndev);
struct brcmf_cfg80211_vif *vif;
+ s32 err = 0;
brcmf_dbg(TRACE, "Enter\n");
@@ -4293,18 +4298,19 @@ static s32 brcmf_cfg80211_suspend(struct wiphy *wiphy,
brcmf_set_mpc(ifp, 1);
} else {
- /* Configure WOWL paramaters */
- brcmf_configure_wowl(cfg, ifp, wowl);
+ /* Configure WOWL parameters */
+ err = brcmf_configure_wowl(cfg, ifp, wowl);
/* Prevent disassociation due to inactivity with keep-alive */
- brcmf_keepalive_start(ifp, 30);
+ if (err == 0)
+ brcmf_keepalive_start(ifp, 30);
}
exit:
brcmf_dbg(TRACE, "Exit\n");
/* clear any scanning activity */
cfg->scan_status = 0;
- return 0;
+ return err;
}
static s32
--
2.40.1
More information about the lvc-project
mailing list