summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorAndrey Markovytch <andreym@codeaurora.org>2016-06-09 13:22:13 +0300
committerKyle Yan <kyan@codeaurora.org>2016-06-09 15:11:59 -0700
commita15fd37785f482227381630477fba07522e60fc2 (patch)
treeeba37cbf545a7689c64ad4c9e8d34bb18b3cd46b /drivers
parenta7425ea0ed87b7829ecd4add8aa99ca0eda84751 (diff)
qseecom: added small sleep between busy-wait calls to TZ
In case of time penalty coming from TZ side when the wrong password is entered too many times, there should be sleep between the scm calls to give other HLOS tasks opportunity to run. Otherwise starvation may occur. Change-Id: I345a9b6c82fb5e591d8bdcf48afed48ccaafddc3 Signed-off-by: Andrey Markovytch <andreym@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/misc/qseecom.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c
index 2455e0b06a51..1aec5e559dd5 100644
--- a/drivers/misc/qseecom.c
+++ b/drivers/misc/qseecom.c
@@ -46,6 +46,7 @@
#include "qseecom_legacy.h"
#include "qseecom_kernel.h"
#include <crypto/ice.h>
+#include <linux/delay.h>
#include <linux/compat.h>
#include "compat_qseecom.h"
@@ -5222,6 +5223,13 @@ static int qseecom_create_key(struct qseecom_dev_handle *data,
ret = __qseecom_set_clear_ce_key(data,
create_key_req.usage,
&set_key_ireq);
+ /*
+ * wait a little before calling scm again to let other
+ * processes run
+ */
+ if (ret == QSEOS_RESULT_FAIL_PENDING_OPERATION)
+ msleep(50);
+
} while (ret == QSEOS_RESULT_FAIL_PENDING_OPERATION);
qseecom_disable_ice_setup(create_key_req.usage);
@@ -5393,6 +5401,13 @@ static int qseecom_update_key_user_info(struct qseecom_dev_handle *data,
ret = __qseecom_update_current_key_user_info(data,
update_key_req.usage,
&ireq);
+ /*
+ * wait a little before calling scm again to let other
+ * processes run
+ */
+ if (ret == QSEOS_RESULT_FAIL_PENDING_OPERATION)
+ msleep(50);
+
} while (ret == QSEOS_RESULT_FAIL_PENDING_OPERATION);
if (ret) {
pr_err("Failed to update key info: %d\n", ret);