| From f1544bc469bb03ca13a837971c97514eceaee565 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 2 Jul 2020 01:29:54 +0530 |
| Subject: soc: qcom: pdr: Reorder the PD state indication ack |
| |
| From: Sibi Sankar <sibis@codeaurora.org> |
| |
| [ Upstream commit 72fe996f9643043c8f84e32c0610975b01aa555b ] |
| |
| The Protection Domains (PD) have a mechanism to keep its resources |
| enabled until the PD down indication is acked. Reorder the PD state |
| indication ack so that clients get to release the relevant resources |
| before the PD goes down. |
| |
| Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org> |
| Reviewed-by: Rishabh Bhatnagar <rishabhb@codeaurora.org> |
| Fixes: fbe639b44a82 ("soc: qcom: Introduce Protection Domain Restart helpers") |
| Reported-by: Rishabh Bhatnagar <rishabhb@codeaurora.org> |
| Signed-off-by: Sibi Sankar <sibis@codeaurora.org> |
| Link: https://lore.kernel.org/r/20200701195954.9007-1-sibis@codeaurora.org |
| Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/soc/qcom/pdr_interface.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/soc/qcom/pdr_interface.c b/drivers/soc/qcom/pdr_interface.c |
| index 17ad3b8698e16..cd8828c857234 100644 |
| --- a/drivers/soc/qcom/pdr_interface.c |
| +++ b/drivers/soc/qcom/pdr_interface.c |
| @@ -282,13 +282,15 @@ static void pdr_indack_work(struct work_struct *work) |
| |
| list_for_each_entry_safe(ind, tmp, &pdr->indack_list, node) { |
| pds = ind->pds; |
| - pdr_send_indack_msg(pdr, pds, ind->transaction_id); |
| |
| mutex_lock(&pdr->status_lock); |
| pds->state = ind->curr_state; |
| pdr->status(pds->state, pds->service_path, pdr->priv); |
| mutex_unlock(&pdr->status_lock); |
| |
| + /* Ack the indication after clients release the PD resources */ |
| + pdr_send_indack_msg(pdr, pds, ind->transaction_id); |
| + |
| mutex_lock(&pdr->list_lock); |
| list_del(&ind->node); |
| mutex_unlock(&pdr->list_lock); |
| -- |
| 2.25.1 |
| |