From b1e7c45a8cf310a774d406f5bc99cbdedfcdb749 Mon Sep 17 00:00:00 2001 From: Ashok Vuyyuru Date: Wed, 28 Apr 2021 22:29:59 +0530 Subject: [PATCH] msm: ipa3: Changes to check disconnect in progress while sending data In SSR scenario while teardown the pipe there could be possibility to receive the UL data to avoid queuing the data checking for disconnect InProgress flag. Signed-off-by: Ashok Vuyyuru Change-Id: I73397e51e6e7affae71313d08356f809788db484 --- drivers/platform/msm/ipa/ipa_v3/ipa_dp.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c index b2b1903f7ac9..67269292536f 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c @@ -431,6 +431,12 @@ int ipa3_send(struct ipa3_sys_context *sys, spin_lock_bh(&sys->spinlock); + if (unlikely(atomic_read(&sys->ep->disconnect_in_progress))) { + IPAERR("Pipe disconnect in progress dropping the packet\n"); + spin_unlock_bh(&sys->spinlock); + return -EFAULT; + } + for (i = 0; i < num_desc; i++) { if (!list_empty(&sys->avail_tx_wrapper_list)) { tx_pkt = list_first_entry(&sys->avail_tx_wrapper_list, @@ -1445,6 +1451,7 @@ int ipa3_teardown_sys_pipe(u32 clnt_hdl) if (IPA_CLIENT_IS_PROD(ep->client)) { do { spin_lock_bh(&ep->sys->spinlock); + atomic_set(&ep->disconnect_in_progress, 1); empty = list_empty(&ep->sys->head_desc_list); spin_unlock_bh(&ep->sys->spinlock); if (!empty)