From df159d60d80289cd92d26cbe77421760f61c1fe4 Mon Sep 17 00:00:00 2001 From: Dhoat Harpal Date: Wed, 25 May 2016 21:21:47 +0530 Subject: [PATCH] soc: qcom: glink_smd_xprt: Fix smd close ack for legacy channel smd_data_ch_close sets local_legacy to false even when close_ack is not called, this even doesn't allow process_reopen_event to call close_ack. smd_data_ch_close set local_legacy to false only when it sends close_ack, otherwise it will be set to false by process_reopen_event on sending close_ack. CRs-Fixed: 1020947 Change-Id: I1353f3a8e625803e6317bc543b7125ce52daa49c Signed-off-by: Dhoat Harpal --- drivers/soc/qcom/glink_smd_xprt.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/soc/qcom/glink_smd_xprt.c b/drivers/soc/qcom/glink_smd_xprt.c index 52eedb507709..a378c6767ca0 100644 --- a/drivers/soc/qcom/glink_smd_xprt.c +++ b/drivers/soc/qcom/glink_smd_xprt.c @@ -731,6 +731,7 @@ static void process_reopen_event(struct work_struct *work) mutex_unlock(&einfo->rx_cmd_lock); } if (ch->local_legacy) { + ch->local_legacy = false; mutex_lock(&einfo->rx_cmd_lock); einfo->xprt_if.glink_core_if_ptr->rx_cmd_ch_close_ack( &einfo->xprt_if, @@ -944,6 +945,7 @@ static void smd_data_ch_close(struct channel *ch) ch->smd_ch = NULL; } else if (ch->local_legacy) { ch_work = kzalloc(sizeof(*ch_work), GFP_KERNEL); + ch->local_legacy = false; if (ch_work) { ch_work->ch = ch; INIT_WORK(&ch_work->work, deferred_close_ack); @@ -952,7 +954,6 @@ static void smd_data_ch_close(struct channel *ch) } mutex_unlock(&ch->ch_probe_lock); - ch->local_legacy = false; spin_lock_irqsave(&ch->intents_lock, flags); while (!list_empty(&ch->intents)) {