qseecom: resend continue blocked listener request
When new cmd with session_id is not supported by TZ, resend continue blocked listener request with legacy cmd using app_id. Also set dummy app_id in qseecom_process_listener_from_smcinvoke to support legacy cmd. Change-Id: Icafc77cece23daff0f2ceb89c10e82a822eb582a Signed-off-by: Zhen Kong <zkong@codeaurora.org>
This commit is contained in:
parent
c2e3a1a7e7
commit
0a2d725d48
1 changed files with 17 additions and 5 deletions
|
@ -1940,7 +1940,7 @@ exit:
|
|||
}
|
||||
|
||||
static int __qseecom_process_blocked_on_listener_smcinvoke(
|
||||
struct qseecom_command_scm_resp *resp)
|
||||
struct qseecom_command_scm_resp *resp, uint32_t app_id)
|
||||
{
|
||||
struct qseecom_registered_listener_list *list_ptr;
|
||||
int ret = 0;
|
||||
|
@ -1987,9 +1987,18 @@ static int __qseecom_process_blocked_on_listener_smcinvoke(
|
|||
&ireq, sizeof(ireq),
|
||||
&continue_resp, sizeof(continue_resp));
|
||||
if (ret) {
|
||||
pr_err("scm_call for continue blocked req for session %d failed, ret %d\n",
|
||||
session_id, ret);
|
||||
goto exit;
|
||||
/* retry with legacy cmd */
|
||||
qseecom.smcinvoke_support = false;
|
||||
ireq.app_or_session_id = app_id;
|
||||
ret = qseecom_scm_call(SCM_SVC_TZSCHEDULER, 1,
|
||||
&ireq, sizeof(ireq),
|
||||
&continue_resp, sizeof(continue_resp));
|
||||
qseecom.smcinvoke_support = true;
|
||||
if (ret) {
|
||||
pr_err("cont block req for app %d or session %d fail\n",
|
||||
app_id, session_id);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
resp->result = QSEOS_RESULT_INCOMPLETE;
|
||||
exit:
|
||||
|
@ -2006,7 +2015,7 @@ static int __qseecom_process_reentrancy_blocked_on_listener(
|
|||
resp, ptr_app, data);
|
||||
else
|
||||
return __qseecom_process_blocked_on_listener_smcinvoke(
|
||||
resp);
|
||||
resp, data->client.app_id);
|
||||
}
|
||||
static int __qseecom_reentrancy_process_incomplete_cmd(
|
||||
struct qseecom_dev_handle *data,
|
||||
|
@ -4786,6 +4795,9 @@ int qseecom_process_listener_from_smcinvoke(struct scm_desc *desc)
|
|||
resp.resp_type = desc->ret[1]; /*incomplete:unused;blocked:session_id*/
|
||||
resp.data = desc->ret[2]; /*listener_id*/
|
||||
|
||||
dummy_private_data.client.app_id = desc->ret[1];
|
||||
dummy_app_entry.app_id = desc->ret[1];
|
||||
|
||||
mutex_lock(&app_access_lock);
|
||||
if (qseecom.qsee_reentrancy_support)
|
||||
ret = __qseecom_process_reentrancy(&resp, &dummy_app_entry,
|
||||
|
|
Loading…
Add table
Reference in a new issue