Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit df27fe40 authored by Zhen Kong's avatar Zhen Kong Committed by Gerrit - the friendly Code Review server
Browse files

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: default avatarZhen Kong <zkong@codeaurora.org>
parent 4ebe74ea
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -1938,7 +1938,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;
@@ -1985,10 +1985,19 @@ 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);
		/* 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:
	return ret;
@@ -2004,7 +2013,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,
@@ -4782,6 +4791,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,