aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com>2012-04-26 10:56:14 -0400
committerKalle Valo <kvalo@qca.qualcomm.com>2012-04-30 03:56:24 -0400
commit93b42cae16d7af185ebdee0f4e85feccfd40d986 (patch)
tree20b67b7fee184c8ab027e7793a218bb789a2a19b
parent1881ced5963520154aebb616ad7b2ff9c2c7f012 (diff)
ath6kl: Complete failed tx packet in ath6kl_htc_tx_from_queue()
Return status of ath6kl_htc_tx_issue() is ignored in ath6kl_htc_tx_from_queue(), but failed tx packet is is not cleaned up. To fix memory leak in this case, call completion with error. Also, throw an error debug message when tx fails in ath6kl_sdio_write_async() due to shortage in bus request buffer. kvalo: change the error message to WARN_ON_ONCE() Signed-off-by: Vasanthakumar Thiagarajan <vthiagar@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
-rw-r--r--drivers/net/wireless/ath/ath6kl/htc_mbox.c8
-rw-r--r--drivers/net/wireless/ath/ath6kl/sdio.c2
2 files changed, 8 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/htc_mbox.c b/drivers/net/wireless/ath/ath6kl/htc_mbox.c
index 89eccadd5386..2798624d3a9d 100644
--- a/drivers/net/wireless/ath/ath6kl/htc_mbox.c
+++ b/drivers/net/wireless/ath/ath6kl/htc_mbox.c
@@ -854,6 +854,7 @@ static void ath6kl_htc_tx_from_queue(struct htc_target *target,
854 int bundle_sent; 854 int bundle_sent;
855 int n_pkts_bundle; 855 int n_pkts_bundle;
856 u8 ac = WMM_NUM_AC; 856 u8 ac = WMM_NUM_AC;
857 int status;
857 858
858 spin_lock_bh(&target->tx_lock); 859 spin_lock_bh(&target->tx_lock);
859 860
@@ -915,7 +916,12 @@ static void ath6kl_htc_tx_from_queue(struct htc_target *target,
915 916
916 ath6kl_htc_tx_prep_pkt(packet, packet->info.tx.flags, 917 ath6kl_htc_tx_prep_pkt(packet, packet->info.tx.flags,
917 0, packet->info.tx.seqno); 918 0, packet->info.tx.seqno);
918 ath6kl_htc_tx_issue(target, packet); 919 status = ath6kl_htc_tx_issue(target, packet);
920
921 if (status) {
922 packet->status = status;
923 packet->completion(packet->context, packet);
924 }
919 } 925 }
920 926
921 spin_lock_bh(&target->tx_lock); 927 spin_lock_bh(&target->tx_lock);
diff --git a/drivers/net/wireless/ath/ath6kl/sdio.c b/drivers/net/wireless/ath/ath6kl/sdio.c
index 0384a0fb654f..05b95405f7b5 100644
--- a/drivers/net/wireless/ath/ath6kl/sdio.c
+++ b/drivers/net/wireless/ath/ath6kl/sdio.c
@@ -552,7 +552,7 @@ static int ath6kl_sdio_write_async(struct ath6kl *ar, u32 address, u8 *buffer,
552 552
553 bus_req = ath6kl_sdio_alloc_busreq(ar_sdio); 553 bus_req = ath6kl_sdio_alloc_busreq(ar_sdio);
554 554
555 if (!bus_req) 555 if (WARN_ON_ONCE(!bus_req))
556 return -ENOMEM; 556 return -ENOMEM;
557 557
558 bus_req->address = address; 558 bus_req->address = address;