| From 8508d5d656975f774bbad1975efeddd5698e9ecd Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 27 Sep 2018 14:59:44 +0000 |
| Subject: brcmfmac: reduce timeout for action frame scan |
| |
| From: Chung-Hsien Hsu <stanley.hsu@cypress.com> |
| |
| [ Upstream commit edb6d6885bef82d1eac432dbeca9fbf4ec349d7e ] |
| |
| Finding a common channel to send an action frame out is required for |
| some action types. Since a loop with several scan retry is used to find |
| the channel, a short wait time could be considered for each attempt. |
| This patch reduces the wait time from 1500 to 450 msec for each action |
| frame scan. |
| |
| This patch fixes the WFA p2p certification 5.1.20 failure caused by the |
| long action frame send time. |
| |
| Signed-off-by: Chung-Hsien Hsu <stanley.hsu@cypress.com> |
| Signed-off-by: Chi-Hsien Lin <chi-hsien.lin@cypress.com> |
| Signed-off-by: Kalle Valo <kvalo@codeaurora.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 9 ++++----- |
| 1 file changed, 4 insertions(+), 5 deletions(-) |
| |
| diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c |
| index f78d91b692871..c91f5ef0be7c3 100644 |
| --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c |
| +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c |
| @@ -74,7 +74,7 @@ |
| #define P2P_AF_MAX_WAIT_TIME msecs_to_jiffies(2000) |
| #define P2P_INVALID_CHANNEL -1 |
| #define P2P_CHANNEL_SYNC_RETRY 5 |
| -#define P2P_AF_FRM_SCAN_MAX_WAIT msecs_to_jiffies(1500) |
| +#define P2P_AF_FRM_SCAN_MAX_WAIT msecs_to_jiffies(450) |
| #define P2P_DEFAULT_SLEEP_TIME_VSDB 200 |
| |
| /* WiFi P2P Public Action Frame OUI Subtypes */ |
| @@ -1139,7 +1139,6 @@ static s32 brcmf_p2p_af_searching_channel(struct brcmf_p2p_info *p2p) |
| { |
| struct afx_hdl *afx_hdl = &p2p->afx_hdl; |
| struct brcmf_cfg80211_vif *pri_vif; |
| - unsigned long duration; |
| s32 retry; |
| |
| brcmf_dbg(TRACE, "Enter\n"); |
| @@ -1155,7 +1154,6 @@ static s32 brcmf_p2p_af_searching_channel(struct brcmf_p2p_info *p2p) |
| * pending action frame tx is cancelled. |
| */ |
| retry = 0; |
| - duration = msecs_to_jiffies(P2P_AF_FRM_SCAN_MAX_WAIT); |
| while ((retry < P2P_CHANNEL_SYNC_RETRY) && |
| (afx_hdl->peer_chan == P2P_INVALID_CHANNEL)) { |
| afx_hdl->is_listen = false; |
| @@ -1163,7 +1161,8 @@ static s32 brcmf_p2p_af_searching_channel(struct brcmf_p2p_info *p2p) |
| retry); |
| /* search peer on peer's listen channel */ |
| schedule_work(&afx_hdl->afx_work); |
| - wait_for_completion_timeout(&afx_hdl->act_frm_scan, duration); |
| + wait_for_completion_timeout(&afx_hdl->act_frm_scan, |
| + P2P_AF_FRM_SCAN_MAX_WAIT); |
| if ((afx_hdl->peer_chan != P2P_INVALID_CHANNEL) || |
| (!test_bit(BRCMF_P2P_STATUS_FINDING_COMMON_CHANNEL, |
| &p2p->status))) |
| @@ -1176,7 +1175,7 @@ static s32 brcmf_p2p_af_searching_channel(struct brcmf_p2p_info *p2p) |
| afx_hdl->is_listen = true; |
| schedule_work(&afx_hdl->afx_work); |
| wait_for_completion_timeout(&afx_hdl->act_frm_scan, |
| - duration); |
| + P2P_AF_FRM_SCAN_MAX_WAIT); |
| } |
| if ((afx_hdl->peer_chan != P2P_INVALID_CHANNEL) || |
| (!test_bit(BRCMF_P2P_STATUS_FINDING_COMMON_CHANNEL, |
| -- |
| 2.20.1 |
| |