From c0b30d82beb5d34e62a2fabf9ad7f31cc38fe483 Mon Sep 17 00:00:00 2001 From: Sivakanth Vaka Date: Tue, 17 Aug 2021 21:10:15 +0530 Subject: [PATCH] msm: ipa3: Change spin lock in release_gsi_channel Changed the spin_lock in ipa3_release_gsi_channel to spin_lock_irqsave to avoid getting interrupted while stop channel is command is executed. Signed-off-by: Sivakanth Vaka --- drivers/platform/msm/ipa/ipa_v3/ipa_client.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c index 9c92fd487e6e..8ca62014e5cf 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c @@ -1609,6 +1609,7 @@ int ipa3_release_gsi_channel(u32 clnt_hdl) struct ipa3_ep_context *ep; int result = -EFAULT; enum gsi_status gsi_res; + unsigned long flags; IPADBG("entry\n"); if (clnt_hdl >= ipa3_ctx->ipa_num_pipes || @@ -1623,10 +1624,9 @@ int ipa3_release_gsi_channel(u32 clnt_hdl) IPA_ACTIVE_CLIENTS_INC_EP(ipa3_get_client_mapping(clnt_hdl)); /* Set the disconnect in progress flag to avoid calling cb.*/ - spin_lock(&ipa3_ctx->disconnect_lock); + spin_lock_irqsave(&ipa3_ctx->disconnect_lock, flags); atomic_set(&ep->disconnect_in_progress, 1); - spin_unlock(&ipa3_ctx->disconnect_lock); - + spin_unlock_irqrestore(&ipa3_ctx->disconnect_lock, flags); gsi_res = gsi_dealloc_channel(ep->gsi_chan_hdl); if (gsi_res != GSI_STATUS_SUCCESS) { @@ -1646,9 +1646,9 @@ int ipa3_release_gsi_channel(u32 clnt_hdl) if (!ep->keep_ipa_awake) IPA_ACTIVE_CLIENTS_DEC_EP(ipa3_get_client_mapping(clnt_hdl)); - spin_lock(&ipa3_ctx->disconnect_lock); + spin_lock_irqsave(&ipa3_ctx->disconnect_lock, flags); memset(&ipa3_ctx->ep[clnt_hdl], 0, sizeof(struct ipa3_ep_context)); - spin_unlock(&ipa3_ctx->disconnect_lock); + spin_unlock_irqrestore(&ipa3_ctx->disconnect_lock, flags); IPADBG("exit\n"); return 0;