From e3e12f52b214121840b44c91de5b3e5af5d3eb84 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 06 Nov 2023 03:04:41 +0000 Subject: [PATCH] rk3568 rt init --- kernel/drivers/tee/optee/supp.c | 22 +++++++++++++++++++++- 1 files changed, 21 insertions(+), 1 deletions(-) diff --git a/kernel/drivers/tee/optee/supp.c b/kernel/drivers/tee/optee/supp.c index 43626e1..3e644a1 100644 --- a/kernel/drivers/tee/optee/supp.c +++ b/kernel/drivers/tee/optee/supp.c @@ -91,6 +91,9 @@ struct optee_supp_req *req = kzalloc(sizeof(*req), GFP_KERNEL); bool interruptable; u32 ret; + unsigned long timeleft; + int id; + struct optee_supp_req *get_req; if (!req) return TEEC_ERROR_OUT_OF_MEMORY; @@ -115,8 +118,17 @@ * exclusive access again. */ while (wait_for_completion_interruptible(&req->c)) { + pr_err("Warning, Interrupting an RPC to supplicant!\n"); + timeleft = wait_for_completion_timeout(&req->c, msecs_to_jiffies(2000)); + if (timeleft) { + /* get completion, it means tee-supplicant is alive. */ + break; + } else { + /* timeout, it means tee-supplicant is dead, interrupting an RPC. */ + interruptable = true; + } + mutex_lock(&supp->mutex); - interruptable = !supp->ctx; if (interruptable) { /* * There's no supplicant available and since the @@ -135,6 +147,14 @@ list_del(&req->link); req->in_queue = false; } + + idr_for_each_entry(&supp->idr, get_req, id) { + if (get_req == req) { + idr_remove(&supp->idr, id); + supp->req_id = -1; + break; + } + } } mutex_unlock(&supp->mutex); -- Gitblit v1.6.2