ath10k: fix memory leak in rx ring buffer allocation

The rx ring buffers are added to a hash table if firmare
support full rx reorder. If the full rx reorder support
flag is not set before allocating the rx ring buffers,
none of the buffers are added to the hash table. When we
unload the module, this hash table is checked for freeing
the allocated rx ring buffers. Since none of the rx ring buffers
were added to the hash table, this memory is leaked.

Set the rx full reorder support flag before we allocate
the rx ring buffer to avoid the memory leak.

CRs-Fixed: 2081334
Change-Id: I6b7cbe05b914cf9aedd8e1ad54ccc4738f8b01e8
Signed-off-by: Rakesh Pillai <pillair@codeaurora.org>
This commit is contained in:
Rakesh Pillai 2017-07-25 15:04:17 +05:30 committed by Gerrit - the friendly Code Review server
parent a37c10a168
commit 69a6025f67

View file

@ -1886,6 +1886,12 @@ int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode,
goto err_wmi_detach;
}
/* If firmware indicates Full Rx Reorder support it must be used in a
* slightly different manner. Let HTT code know.
*/
ar->htt.rx_ring.in_ord_rx = !!(test_bit(WMI_SERVICE_RX_FULL_REORDER,
ar->wmi.svc_map));
status = ath10k_htt_rx_alloc(&ar->htt);
if (status) {
ath10k_err(ar, "failed to alloc htt rx: %d\n", status);
@ -1997,12 +2003,6 @@ int ath10k_core_start(struct ath10k *ar, enum ath10k_firmware_mode mode,
}
}
/* If firmware indicates Full Rx Reorder support it must be used in a
* slightly different manner. Let HTT code know.
*/
ar->htt.rx_ring.in_ord_rx = !!(test_bit(WMI_SERVICE_RX_FULL_REORDER,
ar->wmi.svc_map));
status = ath10k_htt_rx_ring_refill(ar);
if (status) {
ath10k_err(ar, "failed to refill htt rx ring: %d\n", status);