Merge "qseecom: resend continue blocked listener request"

This commit is contained in:
Linux Build Service Account 2017-12-19 02:33:30 -08:00 committed by Gerrit - the friendly Code Review server
commit 12c0bc48ce

View file

@ -1940,7 +1940,7 @@ exit:
} }
static int __qseecom_process_blocked_on_listener_smcinvoke( 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; struct qseecom_registered_listener_list *list_ptr;
int ret = 0; int ret = 0;
@ -1987,9 +1987,18 @@ static int __qseecom_process_blocked_on_listener_smcinvoke(
&ireq, sizeof(ireq), &ireq, sizeof(ireq),
&continue_resp, sizeof(continue_resp)); &continue_resp, sizeof(continue_resp));
if (ret) { if (ret) {
pr_err("scm_call for continue blocked req for session %d failed, ret %d\n", /* retry with legacy cmd */
session_id, ret); qseecom.smcinvoke_support = false;
goto exit; 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; resp->result = QSEOS_RESULT_INCOMPLETE;
exit: exit:
@ -2006,7 +2015,7 @@ static int __qseecom_process_reentrancy_blocked_on_listener(
resp, ptr_app, data); resp, ptr_app, data);
else else
return __qseecom_process_blocked_on_listener_smcinvoke( return __qseecom_process_blocked_on_listener_smcinvoke(
resp); resp, data->client.app_id);
} }
static int __qseecom_reentrancy_process_incomplete_cmd( static int __qseecom_reentrancy_process_incomplete_cmd(
struct qseecom_dev_handle *data, 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.resp_type = desc->ret[1]; /*incomplete:unused;blocked:session_id*/
resp.data = desc->ret[2]; /*listener_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); mutex_lock(&app_access_lock);
if (qseecom.qsee_reentrancy_support) if (qseecom.qsee_reentrancy_support)
ret = __qseecom_process_reentrancy(&resp, &dummy_app_entry, ret = __qseecom_process_reentrancy(&resp, &dummy_app_entry,