diff --git a/htc/htc_send.c b/htc/htc_send.c index c7034a24baee..9450efb64648 100644 --- a/htc/htc_send.c +++ b/htc/htc_send.c @@ -1063,12 +1063,6 @@ static void get_htc_send_packets_credit_based(HTC_TARGET *target, /* loop until we can grab as many packets out of the queue as we can */ while (true) { - sendFlags = 0; - /* get packet at head, but don't remove it */ - pPacket = htc_get_pkt_at_head(tx_queue); - if (!pPacket) - break; - if (do_pm_get) { rtpm_dbgid = htc_send_pkts_rtpm_dbgid_get( @@ -1077,12 +1071,27 @@ static void get_htc_send_packets_credit_based(HTC_TARGET *target, rtpm_dbgid); if (ret) { /* bus suspended, runtime resume issued */ - if (ret == -EAGAIN) + QDF_ASSERT(HTC_PACKET_QUEUE_DEPTH(pQueue) == 0); + if (ret == -EAGAIN) { + pPacket = htc_get_pkt_at_head(tx_queue); + if (!pPacket) + break; log_packet_info(target, pPacket); + } break; } } + sendFlags = 0; + /* get packet at head, but don't remove it */ + pPacket = htc_get_pkt_at_head(tx_queue); + if (!pPacket) { + if (do_pm_get) + hif_pm_runtime_put(target->hif_dev, + rtpm_dbgid); + break; + } + AR_DEBUG_PRINTF(ATH_DEBUG_SEND, (" Got head packet:%pK , Queue Depth: %d\n", pPacket, @@ -1183,7 +1192,7 @@ static void get_htc_send_packets(HTC_TARGET *target, HTC_PACKET_QUEUE *tx_queue; HTC_PACKET_QUEUE pm_queue; bool do_pm_get = false; - wlan_rtpm_dbgid rtpm_dbgid; + wlan_rtpm_dbgid rtpm_dbgid = 0; int ret; /*** NOTE : the TX lock is held when this function is called ***/ @@ -1203,10 +1212,6 @@ static void get_htc_send_packets(HTC_TARGET *target, while (Resources > 0) { int num_frags; - pPacket = htc_packet_dequeue(tx_queue); - if (!pPacket) - break; - if (do_pm_get) { rtpm_dbgid = htc_send_pkts_rtpm_dbgid_get( @@ -1215,11 +1220,23 @@ static void get_htc_send_packets(HTC_TARGET *target, rtpm_dbgid); if (ret) { /* bus suspended, runtime resume issued */ - if (ret == -EAGAIN) + QDF_ASSERT(HTC_PACKET_QUEUE_DEPTH(pQueue) == 0); + if (ret == -EAGAIN) { + pPacket = htc_get_pkt_at_head(tx_queue); + if (!pPacket) + break; log_packet_info(target, pPacket); + } break; } } + + pPacket = htc_packet_dequeue(tx_queue); + if (!pPacket) { + if (do_pm_get) + hif_pm_runtime_put(target->hif_dev, rtpm_dbgid); + break; + } AR_DEBUG_PRINTF(ATH_DEBUG_SEND, (" Got packet:%pK , New Queue Depth: %d\n", pPacket,