From 72729b4dee7ef5fc1fb73dd59ad6d2d3ae49cb9a Mon Sep 17 00:00:00 2001 From: Zhen Kong Date: Wed, 11 Dec 2019 10:43:23 -0800 Subject: [PATCH] qseecom: improve operation when app unload returns EBUSY If unload app was failed due to EBUSY, qseecom will not free app list entry, but just restore app ref_cnt and return EBUSY to client. Change-Id: If7b20b52690a34ba9cf1b3c3e96f84583d221dec Signed-off-by: Zhen Kong --- drivers/misc/qseecom.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c index 2bbd36fa3897..604b2033ab4b 100644 --- a/drivers/misc/qseecom.c +++ b/drivers/misc/qseecom.c @@ -3133,6 +3133,16 @@ static int qseecom_unload_app(struct qseecom_dev_handle *data, if (!ptr_app->ref_cnt) { ret = __qseecom_unload_app(data, data->client.app_id); + if (ret == -EBUSY) { + /* + * If unload failed due to EBUSY, don't free mem + * just restore app ref_cnt and return -EBUSY + */ + pr_warn("unload ta %d(%s) EBUSY\n", + data->client.app_id, data->client.app_name); + ptr_app->ref_cnt++; + return ret; + } spin_lock_irqsave(&qseecom.registered_app_list_lock, flags); list_del(&ptr_app->list); spin_unlock_irqrestore(&qseecom.registered_app_list_lock, @@ -3151,7 +3161,6 @@ unload_exit: return ret; } - static int qseecom_prepare_unload_app(struct qseecom_dev_handle *data) { struct qseecom_unload_app_pending_list *entry = NULL;