From 60c2c9836e5379bcc85eed28664962943070a78b Mon Sep 17 00:00:00 2001 From: tfyu Date: Fri, 9 Jun 2017 15:50:03 +0800 Subject: [PATCH] qcacmn: Fix the TX packet drop after doing the TX bundle qcacld-2.0 to qcacmn propagation The driver will drop the TX packet if remaining depth of the sending queue is less than 2. This will casue the memory leak, credits missing and TCP stall issue when running the iperf test. The fix is to add back current packet before return, which just be dequeued. Change-Id: I9e0c69c16e9562afd627d0fc222a9fbd475c468c CRs-Fixed: 2056195 --- htc/htc_send.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/htc/htc_send.c b/htc/htc_send.c index 172a5c2a4d04..9294dddb8aca 100644 --- a/htc/htc_send.c +++ b/htc/htc_send.c @@ -501,8 +501,12 @@ static void htc_issue_packets_bundle(HTC_TARGET *target, htc_send_bundled_netbuf(target, pEndpoint, pBundleBuffer - last_credit_pad, pPacketTx); - if (HTC_PACKET_QUEUE_DEPTH(pPktQueue) < + /* One packet has been dequeued from sending queue when enter + * this loop, so need to add 1 back for this checking. + */ + if ((HTC_PACKET_QUEUE_DEPTH(pPktQueue) + 1) < HTC_MIN_MSG_PER_BUNDLE) { + HTC_PACKET_ENQUEUE_TO_HEAD(pPktQueue, pPacket); return; } bundlesSpaceRemaining = @@ -510,6 +514,7 @@ static void htc_issue_packets_bundle(HTC_TARGET *target, pEndpoint->TxCreditSize; pPacketTx = allocate_htc_bundle_packet(target); if (!pPacketTx) { + HTC_PACKET_ENQUEUE_TO_HEAD(pPktQueue, pPacket); /* good time to panic */ AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("allocate_htc_bundle_packet failed\n"));