summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoussef Youssef <yyoussef@codeaurora.org>2018-11-28 18:25:34 +0200
committerGerrit - the friendly Code Review server <code-review@localhost>2018-12-05 01:09:36 -0800
commit010a0cd6a6ba382bcd4e36d3b6bd28184baf379b (patch)
tree4a6d61c8090eb0d5a690a6f743e9eafca017e2c5
parent9e66b661ec6ac6836d4b2c98422038f9fd5d174d (diff)
scm_qcpe: validate hab_recv() return value for retry
habmm_socket_recv() can return -EINTR which indicate that the operation must be restarted. Change-Id: I0860a9593303c7bf1fea5e0349595c4b2fb085eb Signed-off-by: Youssef Youssef <yyoussef@codeaurora.org>
-rw-r--r--drivers/soc/qcom/scm_qcpe.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/soc/qcom/scm_qcpe.c b/drivers/soc/qcom/scm_qcpe.c
index f9a593ceefc7..f8ad3503370b 100644
--- a/drivers/soc/qcom/scm_qcpe.c
+++ b/drivers/soc/qcom/scm_qcpe.c
@@ -473,11 +473,15 @@ static int scm_call_qcpe(u32 fn_id, struct scm_desc *desc)
goto err_ret;
}
- size_bytes = sizeof(smc_params);
+
memset(&smc_params, 0x0, sizeof(smc_params));
- ret = habmm_socket_recv(handle, &smc_params, &size_bytes, 0,
+ do {
+ size_bytes = sizeof(smc_params);
+ ret = habmm_socket_recv(handle, &smc_params, &size_bytes, 0,
HABMM_SOCKET_RECV_FLAGS_UNINTERRUPTIBLE);
+ } while (-EINTR == ret);
+
if (ret) {
pr_err("habmm_socket_recv failed, ret= 0x%x\n", ret);
goto err_ret;