ソースを参照

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
tfyu 7 年 前
コミット
60c2c9836e
1 ファイル変更6 行追加1 行削除
  1. 6 1
      htc/htc_send.c

+ 6 - 1
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"));