diff options
| author | Andrey Markovytch <andreym@codeaurora.org> | 2016-06-09 13:22:13 +0300 |
|---|---|---|
| committer | Kyle Yan <kyan@codeaurora.org> | 2016-06-09 15:11:59 -0700 |
| commit | a15fd37785f482227381630477fba07522e60fc2 (patch) | |
| tree | eba37cbf545a7689c64ad4c9e8d34bb18b3cd46b /drivers | |
| parent | a7425ea0ed87b7829ecd4add8aa99ca0eda84751 (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.c | 15 |
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); |
