|
|
|
|
@@ -2,104 +2,6 @@ https://patchwork.kernel.org/project/linux-arm-msm/cover/20240622-qcom-pd-mapper
|
|
|
|
|
|
|
|
|
|
accepted upstream, expected mainline in 6.11
|
|
|
|
|
|
|
|
|
|
From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
|
|
|
|
|
Date: Sat, 22 Jun 2024 01:03:40 +0300
|
|
|
|
|
Subject: [PATCH v9 1/5] soc: qcom: pdr: protect locator_addr with the main
|
|
|
|
|
mutex
|
|
|
|
|
|
|
|
|
|
If the service locator server is restarted fast enough, the PDR can
|
|
|
|
|
rewrite locator_addr fields concurrently. Protect them by placing
|
|
|
|
|
modification of those fields under the main pdr->lock.
|
|
|
|
|
|
|
|
|
|
Fixes: fbe639b44a82 ("soc: qcom: Introduce Protection Domain Restart helpers")
|
|
|
|
|
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD
|
|
|
|
|
Tested-by: Steev Klimaszewski <steev@kali.org>
|
|
|
|
|
Tested-by: Alexey Minnekhanov <alexeymin@postmarketos.org>
|
|
|
|
|
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
|
|
|
|
|
Reviewed-by: Chris Lew <quic_clew@quicinc.com>
|
|
|
|
|
---
|
|
|
|
|
drivers/soc/qcom/pdr_interface.c | 6 ++++--
|
|
|
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
|
|
|
|
|
|
diff --git a/drivers/soc/qcom/pdr_interface.c b/drivers/soc/qcom/pdr_interface.c
|
|
|
|
|
index a1b6a4081dea..76a62c2ecc58 100644
|
|
|
|
|
--- a/drivers/soc/qcom/pdr_interface.c
|
|
|
|
|
+++ b/drivers/soc/qcom/pdr_interface.c
|
|
|
|
|
@@ -76,12 +76,12 @@ static int pdr_locator_new_server(struct qmi_handle *qmi,
|
|
|
|
|
locator_hdl);
|
|
|
|
|
struct pdr_service *pds;
|
|
|
|
|
|
|
|
|
|
+ mutex_lock(&pdr->lock);
|
|
|
|
|
/* Create a local client port for QMI communication */
|
|
|
|
|
pdr->locator_addr.sq_family = AF_QIPCRTR;
|
|
|
|
|
pdr->locator_addr.sq_node = svc->node;
|
|
|
|
|
pdr->locator_addr.sq_port = svc->port;
|
|
|
|
|
|
|
|
|
|
- mutex_lock(&pdr->lock);
|
|
|
|
|
pdr->locator_init_complete = true;
|
|
|
|
|
mutex_unlock(&pdr->lock);
|
|
|
|
|
|
|
|
|
|
@@ -104,10 +104,10 @@ static void pdr_locator_del_server(struct qmi_handle *qmi,
|
|
|
|
|
|
|
|
|
|
mutex_lock(&pdr->lock);
|
|
|
|
|
pdr->locator_init_complete = false;
|
|
|
|
|
- mutex_unlock(&pdr->lock);
|
|
|
|
|
|
|
|
|
|
pdr->locator_addr.sq_node = 0;
|
|
|
|
|
pdr->locator_addr.sq_port = 0;
|
|
|
|
|
+ mutex_unlock(&pdr->lock);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static const struct qmi_ops pdr_locator_ops = {
|
|
|
|
|
@@ -365,12 +365,14 @@ static int pdr_get_domain_list(struct servreg_get_domain_list_req *req,
|
|
|
|
|
if (ret < 0)
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
+ mutex_lock(&pdr->lock);
|
|
|
|
|
ret = qmi_send_request(&pdr->locator_hdl,
|
|
|
|
|
&pdr->locator_addr,
|
|
|
|
|
&txn, SERVREG_GET_DOMAIN_LIST_REQ,
|
|
|
|
|
SERVREG_GET_DOMAIN_LIST_REQ_MAX_LEN,
|
|
|
|
|
servreg_get_domain_list_req_ei,
|
|
|
|
|
req);
|
|
|
|
|
+ mutex_unlock(&pdr->lock);
|
|
|
|
|
if (ret < 0) {
|
|
|
|
|
qmi_txn_cancel(&txn);
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
|
|
|
|
|
Date: Sat, 22 Jun 2024 01:03:41 +0300
|
|
|
|
|
Subject: [PATCH v9 2/5] soc: qcom: pdr: fix parsing of domains lists
|
|
|
|
|
|
|
|
|
|
While parsing the domains list, start offsets from 0 rather than from
|
|
|
|
|
domains_read. The domains_read is equal to the total count of the
|
|
|
|
|
domains we have seen, while the domains list in the message starts from
|
|
|
|
|
offset 0.
|
|
|
|
|
|
|
|
|
|
Fixes: fbe639b44a82 ("soc: qcom: Introduce Protection Domain Restart helpers")
|
|
|
|
|
Tested-by: Steev Klimaszewski <steev@kali.org>
|
|
|
|
|
Tested-by: Alexey Minnekhanov <alexeymin@postmarketos.org>
|
|
|
|
|
Reviewed-by: Chris Lew <quic_clew@quicinc.com>
|
|
|
|
|
Tested-by: Neil Armstrong <neil.armstrong@linaro.org> # on SM8550-QRD
|
|
|
|
|
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
|
|
|
|
|
---
|
|
|
|
|
drivers/soc/qcom/pdr_interface.c | 2 +-
|
|
|
|
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
|
|
|
|
|
|
|
diff --git a/drivers/soc/qcom/pdr_interface.c b/drivers/soc/qcom/pdr_interface.c
|
|
|
|
|
index 76a62c2ecc58..216166e98fae 100644
|
|
|
|
|
--- a/drivers/soc/qcom/pdr_interface.c
|
|
|
|
|
+++ b/drivers/soc/qcom/pdr_interface.c
|
|
|
|
|
@@ -417,7 +417,7 @@ static int pdr_locate_service(struct pdr_handle *pdr, struct pdr_service *pds)
|
|
|
|
|
if (ret < 0)
|
|
|
|
|
goto out;
|
|
|
|
|
|
|
|
|
|
- for (i = domains_read; i < resp->domain_list_len; i++) {
|
|
|
|
|
+ for (i = 0; i < resp->domain_list_len; i++) {
|
|
|
|
|
entry = &resp->domain_list[i];
|
|
|
|
|
|
|
|
|
|
if (strnlen(entry->name, sizeof(entry->name)) == sizeof(entry->name))
|
|
|
|
|
|
|
|
|
|
From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
|
|
|
|
|
Date: Sat, 22 Jun 2024 01:03:42 +0300
|
|
|
|
|
Subject: [PATCH v9 3/5] soc: qcom: pdr: extract PDR message marshalling
|
|
|
|
|
|