From f34eede3cb2127afa8c350b5dd8cc515caa7c5fe Mon Sep 17 00:00:00 2001 From: Michael Adisumarta Date: Thu, 26 Aug 2021 11:46:30 -0700 Subject: [PATCH 1/2] msm: ipa: remove initing head again if dma mapping fails Remove Initializing rx_pkt link if dma mapping fails. Change-Id: I49d08555c875fc9039805ef8775be3b676f51d08 Signed-off-by: Michael Adisumarta --- drivers/platform/msm/ipa/ipa_v3/ipa_dp.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c index 5ba5c7c6fb81..25bc4cb2bc53 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c @@ -2611,7 +2611,6 @@ static void ipa3_replenish_rx_cache_recycle(struct ipa3_sys_context *sys) fail_dma_mapping: spin_lock_bh(&sys->spinlock); list_add_tail(&rx_pkt->link, &sys->rcycl_list); - INIT_LIST_HEAD(&rx_pkt->link); spin_unlock_bh(&sys->spinlock); fail_kmem_cache_alloc: if (rx_len_cached == 0) { From 676280f3558cead6391251a85aeaac68954d9d4c Mon Sep 17 00:00:00 2001 From: Michael Adisumarta Date: Wed, 22 Sep 2021 12:23:37 -0700 Subject: [PATCH 2/2] msm: ipa: add skb recycle if dma fails during replenish Add skb recycle when dma mapping fails during rx cache replenishing. Change-Id: I4ea2b1581f4d9a404248ce39bb916e58e368b7e4 Signed-off-by: Michael Adisumarta --- drivers/platform/msm/ipa/ipa_v3/ipa_dp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c index 5ba5c7c6fb81..31f687130598 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c @@ -2569,7 +2569,7 @@ static void ipa3_replenish_rx_cache_recycle(struct ipa3_sys_context *sys) spin_lock_bh(&sys->spinlock); rx_pkt = list_first_entry(&sys->rcycl_list, struct ipa3_rx_pkt_wrapper, link); - list_del(&rx_pkt->link); + list_del_init(&rx_pkt->link); spin_unlock_bh(&sys->spinlock); ptr = skb_put(rx_pkt->data.skb, sys->rx_buff_sz); rx_pkt->data.dma_addr = dma_map_single(ipa3_ctx->pdev, @@ -2610,6 +2610,7 @@ static void ipa3_replenish_rx_cache_recycle(struct ipa3_sys_context *sys) goto done; fail_dma_mapping: spin_lock_bh(&sys->spinlock); + ipa3_skb_recycle(rx_pkt->data.skb); list_add_tail(&rx_pkt->link, &sys->rcycl_list); INIT_LIST_HEAD(&rx_pkt->link); spin_unlock_bh(&sys->spinlock);