summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHouston Hoffman <hhoffman@codeaurora.org>2016-12-13 22:48:59 -0800
committerqcabuildsw <qcabuildsw@localhost>2016-12-24 16:00:18 -0800
commit190ce643dcdded626a1b9a8b6393c28d2f7c7313 (patch)
treeb16c6b8406f6b1abc53033fb9131aef8cdbf98f1
parent90f6e4b82348a863d9cbfb18c9938d3efc657383 (diff)
qcacld-3.0: reduce spinlock time in htt_rx_hash_deinit
12ms is too long to hold a spinlock bh. Change-Id: Ie57c94c20f81dd060185728901b1d14119609825 CRs-Fixed: 1100552
-rw-r--r--core/dp/htt/htt_rx.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/core/dp/htt/htt_rx.c b/core/dp/htt/htt_rx.c
index 3d9ae783639c..7b4ffa665988 100644
--- a/core/dp/htt/htt_rx.c
+++ b/core/dp/htt/htt_rx.c
@@ -124,17 +124,21 @@ static void htt_rx_hash_deinit(struct htt_pdev_t *pdev)
uint32_t i;
struct htt_rx_hash_entry *hash_entry;
+ struct htt_rx_hash_bucket **hash_table;
struct htt_list_node *list_iter = NULL;
if (NULL == pdev->rx_ring.hash_table)
return;
qdf_spin_lock_bh(&(pdev->rx_ring.rx_hash_lock));
+ hash_table = pdev->rx_ring.hash_table;
+ pdev->rx_ring.hash_table = NULL;
+ qdf_spin_unlock_bh(&(pdev->rx_ring.rx_hash_lock));
for (i = 0; i < RX_NUM_HASH_BUCKETS; i++) {
/* Free the hash entries in hash bucket i */
- list_iter = pdev->rx_ring.hash_table[i]->listhead.next;
- while (list_iter != &pdev->rx_ring.hash_table[i]->listhead) {
+ list_iter = hash_table[i]->listhead.next;
+ while (list_iter != &hash_table[i]->listhead) {
hash_entry =
(struct htt_rx_hash_entry *)((char *)list_iter -
pdev->rx_ring.
@@ -156,13 +160,11 @@ static void htt_rx_hash_deinit(struct htt_pdev_t *pdev)
qdf_mem_free(hash_entry);
}
- qdf_mem_free(pdev->rx_ring.hash_table[i]);
+ qdf_mem_free(hash_table[i]);
}
- qdf_mem_free(pdev->rx_ring.hash_table);
- pdev->rx_ring.hash_table = NULL;
+ qdf_mem_free(hash_table);
- qdf_spin_unlock_bh(&(pdev->rx_ring.rx_hash_lock));
qdf_spinlock_destroy(&(pdev->rx_ring.rx_hash_lock));
}