summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryixuanjiang <yixuanjiang@google.com>2021-11-19 17:08:50 +0800
committerBart Van Assche <bvanassche@google.com>2022-03-17 09:20:57 -0700
commitb151ca1e770d9b215350210c7cd3aacb9e8e387a (patch)
treeab243971bd6a8cd16af948e3978f0d0eee940053
parent32b45e2e08bcb3b6306ec9796d1f50ef44d0d514 (diff)
downloadaoc-b151ca1e770d9b215350210c7cd3aacb9e8e387a.tar.gz
cancel_delayed_work_sync might sleep but IRQ handle must not sleep. Modify the aoc monitor cancel flow to prevent it. Bug: 204814582 Signed-off-by: yixuanjiang <yixuanjiang@google.com> Change-Id: I12f8c8d268e9fa0e209e73afb54a60cf7cc53bdd
-rw-r--r--aoc.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/aoc.c b/aoc.c
index be9532e..5d3f79f 100644
--- a/aoc.c
+++ b/aoc.c
@@ -519,7 +519,6 @@ static void aoc_mbox_rx_callback(struct mbox_client *cl, void *mssg)
case AOC_STATE_FIRMWARE_LOADED:
if (aoc_fw_ready()) {
aoc_state = AOC_STATE_STARTING;
- cancel_delayed_work_sync(&prvdata->monitor_work);
schedule_work(&prvdata->online_work);
}
break;
@@ -2055,6 +2054,8 @@ static void aoc_did_become_online(struct work_struct *work)
struct device *dev = prvdata->dev;
int i, s;
+ cancel_delayed_work_sync(&prvdata->monitor_work);
+
mutex_lock(&aoc_service_lock);
s = aoc_num_services();