soc: qcom: pdr: Reorder the PD state indication ack
authorSibi Sankar <sibis@codeaurora.org>
Wed, 1 Jul 2020 19:59:54 +0000 (01:29 +0530)
committerBjorn Andersson <bjorn.andersson@linaro.org>
Tue, 28 Jul 2020 06:09:25 +0000 (23:09 -0700)
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>
drivers/soc/qcom/pdr_interface.c

index bdcf16f88a97fd2595d1add3b2a981da6b2d1bb9..4c9225f15c4e6282f7dd94e4b912a8ad94e8efe1 100644 (file)
@@ -278,13 +278,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);