mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
84 lines
3.6 KiB
Diff
84 lines
3.6 KiB
Diff
From 34963d006498b5150e690a05127b2046edf2d02a Mon Sep 17 00:00:00 2001
|
|
From: Wataru Gohda <wataru.gohda@cypress.com>
|
|
Date: Fri, 19 Jun 2020 01:49:53 -0500
|
|
Subject: [PATCH 053/179] brcmfmac: Fix to add skb free for TIM update info
|
|
when tx is completed
|
|
|
|
The skb will be allocated to send TIM update info in brcmf_fws_tim_update.
|
|
Currently the skb will be freed when tx is failed but it will not be freed
|
|
when tx is completed successfully. The fix is to free the skb when tx is
|
|
completed always.
|
|
|
|
Signed-off-by: Wataru Gohda <wataru.gohda@cypress.com>
|
|
Signed-off-by: Chi-hsien Lin <chi-hsien.lin@cypress.com>
|
|
---
|
|
.../wireless/broadcom/brcm80211/brcmfmac/bcdc.c | 3 +--
|
|
.../broadcom/brcm80211/brcmfmac/fwsignal.c | 15 +++++++++------
|
|
.../broadcom/brcm80211/brcmfmac/fwsignal.h | 3 ++-
|
|
3 files changed, 12 insertions(+), 9 deletions(-)
|
|
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
|
index a04c29016d4b..4fefd8587e5c 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcdc.c
|
|
@@ -370,8 +370,7 @@ brcmf_proto_bcdc_txcomplete(struct device *dev, struct sk_buff *txp,
|
|
|
|
/* await txstatus signal for firmware if active */
|
|
if (brcmf_fws_fc_active(bcdc->fws)) {
|
|
- if (!success)
|
|
- brcmf_fws_bustxfail(bcdc->fws, txp);
|
|
+ brcmf_fws_bustxcomplete(bcdc->fws, txp, success);
|
|
} else {
|
|
if (brcmf_proto_bcdc_hdrpull(bus_if->drvr, false, txp, &ifp))
|
|
brcmu_pkt_buf_free_skb(txp);
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
|
index 4a9d8fbac44c..526cbd9248fb 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.c
|
|
@@ -2521,7 +2521,8 @@ bool brcmf_fws_fc_active(struct brcmf_fws_info *fws)
|
|
return fws->fcmode != BRCMF_FWS_FCMODE_NONE;
|
|
}
|
|
|
|
-void brcmf_fws_bustxfail(struct brcmf_fws_info *fws, struct sk_buff *skb)
|
|
+void brcmf_fws_bustxcomplete(struct brcmf_fws_info *fws, struct sk_buff *skb,
|
|
+ bool success)
|
|
{
|
|
u32 hslot;
|
|
|
|
@@ -2529,11 +2530,13 @@ void brcmf_fws_bustxfail(struct brcmf_fws_info *fws, struct sk_buff *skb)
|
|
brcmu_pkt_buf_free_skb(skb);
|
|
return;
|
|
}
|
|
- brcmf_fws_lock(fws);
|
|
- hslot = brcmf_skb_htod_tag_get_field(skb, HSLOT);
|
|
- brcmf_fws_txs_process(fws, BRCMF_FWS_TXSTATUS_HOST_TOSSED, hslot, 0, 0,
|
|
- 1);
|
|
- brcmf_fws_unlock(fws);
|
|
+ if (!success) {
|
|
+ brcmf_fws_lock(fws);
|
|
+ hslot = brcmf_skb_htod_tag_get_field(skb, HSLOT);
|
|
+ brcmf_fws_txs_process(fws, BRCMF_FWS_TXSTATUS_HOST_TOSSED,
|
|
+ hslot, 0, 0, 1);
|
|
+ brcmf_fws_unlock(fws);
|
|
+ }
|
|
}
|
|
|
|
void brcmf_fws_bus_blocked(struct brcmf_pub *drvr, bool flow_blocked)
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
|
index 50e424b5880d..c3b2d3691c43 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fwsignal.h
|
|
@@ -40,7 +40,8 @@ int brcmf_fws_process_skb(struct brcmf_if *ifp, struct sk_buff *skb);
|
|
void brcmf_fws_reset_interface(struct brcmf_if *ifp);
|
|
void brcmf_fws_add_interface(struct brcmf_if *ifp);
|
|
void brcmf_fws_del_interface(struct brcmf_if *ifp);
|
|
-void brcmf_fws_bustxfail(struct brcmf_fws_info *fws, struct sk_buff *skb);
|
|
+void brcmf_fws_bustxcomplete(struct brcmf_fws_info *fws, struct sk_buff *skb,
|
|
+ bool success);
|
|
void brcmf_fws_bus_blocked(struct brcmf_pub *drvr, bool flow_blocked);
|
|
void brcmf_fws_rxreorder(struct brcmf_if *ifp, struct sk_buff *skb, bool inirq);
|
|
|
|
--
|
|
2.17.1
|
|
|