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

Commit b9e1e326 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "qseecom: set listener id before sending registration scm_call"

parents 7073bd89 2da35260
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -1334,9 +1334,10 @@ static int qseecom_register_listener(struct qseecom_dev_handle *data,
			rcvd_lstnr.sb_size))
		return -EFAULT;

	data->listener.id = 0;
	data->listener.id = rcvd_lstnr.listener_id;
	if (!__qseecom_is_svc_unique(data, &rcvd_lstnr)) {
		pr_err("Service is not unique and is already registered\n");
		pr_err("Service %d is not unique and failed to register\n",
				rcvd_lstnr.listener_id);
		data->released = true;
		return -EBUSY;
	}
@@ -1351,12 +1352,12 @@ static int qseecom_register_listener(struct qseecom_dev_handle *data,
	new_entry->sb_length = rcvd_lstnr.sb_size;
	new_entry->user_virt_sb_base = rcvd_lstnr.virt_sb_base;
	if (__qseecom_set_sb_memory(new_entry, data, &rcvd_lstnr)) {
		pr_err("qseecom_set_sb_memoryfailed\n");
		pr_err("qseecom_set_sb_memory failed for listener %d, size %d\n",
				rcvd_lstnr.listener_id, rcvd_lstnr.sb_size);
		kzfree(new_entry);
		return -ENOMEM;
	}

	data->listener.id = rcvd_lstnr.listener_id;
	init_waitqueue_head(&new_entry->rcv_req_wq);
	init_waitqueue_head(&new_entry->listener_block_app_wq);
	new_entry->send_resp_flag = 0;
@@ -1365,6 +1366,7 @@ static int qseecom_register_listener(struct qseecom_dev_handle *data,
	list_add_tail(&new_entry->list, &qseecom.registered_listener_list_head);
	spin_unlock_irqrestore(&qseecom.registered_listener_list_lock, flags);

	pr_warn("Service %d is registered\n", rcvd_lstnr.listener_id);
	return ret;
}

@@ -1407,13 +1409,14 @@ static int qseecom_unregister_listener(struct qseecom_dev_handle *data)
	if (ret) {
		pr_err("scm_call() failed with err: %d (lstnr id=%d)\n",
				ret, data->listener.id);
		return ret;
		goto exit;
	}

	if (resp.result != QSEOS_RESULT_SUCCESS) {
		pr_err("Failed resp.result=%d,(lstnr id=%d)\n",
				resp.result, data->listener.id);
		return -EPERM;
		ret = -EPERM;
		goto exit;
	}

	data->abort = 1;
@@ -1425,10 +1428,10 @@ static int qseecom_unregister_listener(struct qseecom_dev_handle *data)
				atomic_read(&data->ioctl_count) <= 1)) {
			pr_err("Interrupted from abort\n");
			ret = -ERESTARTSYS;
			return ret;
		}
	}

exit:
	if (ptr_svc->dmabuf)
		qseecom_vaddr_unmap(ptr_svc->sb_virt,
			ptr_svc->sgt, ptr_svc->attach, ptr_svc->dmabuf);
@@ -1437,6 +1440,7 @@ static int qseecom_unregister_listener(struct qseecom_dev_handle *data)
	kzfree(ptr_svc);

	data->released = true;
	pr_warn("Service %d is unregistered\n", data->listener.id);
	return ret;
}