From 9d9ce2cb4782cf8352e42befcd9ea2ef8e705266 Mon Sep 17 00:00:00 2001 From: Tao Huang Date: Fri, 6 Jun 2025 16:45:25 +0800 Subject: [PATCH] Revert "tee: optee: interrupt an RPC depend on shutdown flag" This reverts commit b0b2892b93ae8223f3cbef733c497029a449cd50. Replaced by commit ec18520f5edc ("tee: optee: Fix supplicant wait loop"). Signed-off-by: Tao Huang --- drivers/tee/optee/optee_private.h | 1 - drivers/tee/optee/smc_abi.c | 6 ------ drivers/tee/optee/supp.c | 13 ++++++++----- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/drivers/tee/optee/optee_private.h b/drivers/tee/optee/optee_private.h index c2a9c987092c..04ae58892608 100644 --- a/drivers/tee/optee/optee_private.h +++ b/drivers/tee/optee/optee_private.h @@ -92,7 +92,6 @@ struct optee_supp { struct list_head reqs; struct idr idr; struct completion reqs_c; - bool shutdown; }; struct optee_smc { diff --git a/drivers/tee/optee/smc_abi.c b/drivers/tee/optee/smc_abi.c index fd082216f0eb..e6e0428f8e7b 100644 --- a/drivers/tee/optee/smc_abi.c +++ b/drivers/tee/optee/smc_abi.c @@ -7,7 +7,6 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include -#include #include #include #include @@ -1353,11 +1352,6 @@ static void optee_shutdown(struct platform_device *pdev) { struct optee *optee = platform_get_drvdata(pdev); - /* Tell requesting thread to interrupt an RPC */ - smp_store_mb(optee->supp.shutdown, true); - /* Wait requesting thread to release resources */ - mdelay(200); - if (!optee->rpc_param_count) optee_disable_shm_cache(optee); } diff --git a/drivers/tee/optee/supp.c b/drivers/tee/optee/supp.c index a8656a72d83a..2d556b79a67e 100644 --- a/drivers/tee/optee/supp.c +++ b/drivers/tee/optee/supp.c @@ -82,6 +82,7 @@ u32 optee_supp_thrd_req(struct tee_context *ctx, u32 func, size_t num_params, struct optee_supp_req *req; bool interruptable; u32 ret; + unsigned long timeleft; int id; struct optee_supp_req *get_req; @@ -116,12 +117,14 @@ u32 optee_supp_thrd_req(struct tee_context *ctx, u32 func, size_t num_params, * exclusive access again. */ while (wait_for_completion_interruptible(&req->c)) { - if (supp->shutdown) { - /* Reboot happen, tee-supplicant is dead, interrupt an RPC */ - interruptable = true; + 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 { - /* Deep sleep, tee-supplicant is freeze, wait tee-supplicant */ - continue; + /* timeout, it means tee-supplicant is dead, interrupting an RPC. */ + interruptable = true; } mutex_lock(&supp->mutex);