diff options
author | Yixuan Jiang <yixuanjiang@google.com> | 2021-12-01 03:28:11 +0000 |
---|---|---|
committer | TreeHugger Robot <treehugger-gerrit@google.com> | 2021-12-01 04:00:45 +0000 |
commit | 8305a211745685bd891b43acad36c65dac6bf530 (patch) | |
tree | caa8cb8d401614ed8ab23d24ddf66dc83a08be4c | |
parent | 570ea9354a753bf41c4fb5c1198537c79f0c1d9f (diff) | |
download | aoc-8305a211745685bd891b43acad36c65dac6bf530.tar.gz |
Revert "aoc: fix aoc process crash issue when aoc service off"
This reverts commit 4fa575068991f45bbe0eb24f3693bd1e2bbd2e7c.
Reason for revert: regression on b/208500586
Change-Id: I6ee8ef57744d2e06f5bb34a196c823714ce5c88b
-rw-r--r-- | aoc.c | 25 |
1 files changed, 5 insertions, 20 deletions
@@ -111,10 +111,6 @@ struct aoc_prvdata { struct aoc_service_dev **services; struct work_struct online_work; - - struct work_struct process_work; - int process_offset; - struct resource dram_resource; aoc_map_handler map_handler; void *map_handler_ctx; @@ -251,7 +247,7 @@ static void aoc_take_offline(struct aoc_prvdata *prvdata); static void signal_aoc(struct mbox_chan *channel); static void reset_sensor_power(struct aoc_prvdata *prvdata, bool is_init); -static void aoc_process_services(struct work_struct *work); +static void aoc_process_services(struct aoc_prvdata *prvdata, int offset); static irqreturn_t watchdog_int_handler(int irq, void *dev); static void aoc_watchdog(struct work_struct *work); @@ -526,8 +522,7 @@ static void aoc_mbox_rx_callback(struct mbox_client *cl, void *mssg) } break; case AOC_STATE_ONLINE: - prvdata->process_offset = slot->index; - schedule_work(&prvdata->process_work); + aoc_process_services(prvdata, slot->index); break; default: break; @@ -2221,20 +2216,15 @@ static void aoc_take_offline(struct aoc_prvdata *prvdata) dev_err(prvdata->dev, "GSA unload firmware failed: %d\n", rc); } -static void aoc_process_services(struct work_struct *work) +static void aoc_process_services(struct aoc_prvdata *prvdata, int offset) { - struct aoc_prvdata *prvdata = - container_of(work, struct aoc_prvdata, process_work); - struct aoc_service_dev *service_dev; - int offset = prvdata->process_offset; aoc_service *service; int services; int i; - mutex_lock(&aoc_service_lock); if (aoc_state != AOC_STATE_ONLINE) - goto exit; + return; services = aoc_num_services(); for (i = 0; i < services; i++) { @@ -2255,8 +2245,6 @@ static void aoc_process_services(struct work_struct *work) wake_up(&service_dev->write_queue); } } -exit: - mutex_unlock(&aoc_service_lock); } void aoc_set_map_handler(struct aoc_service_dev *dev, aoc_map_handler handler, @@ -2344,8 +2332,7 @@ static irqreturn_t aoc_int_handler(int irq, void *dev) schedule_work(&aoc_online_work); } } else if (aoc_state == AOC_STATE_ONLINE) { - prvdata->process_offset = 0; - schedule_work(&prvdata->process_work); + aoc_process_services(dev_get_drvdata(dev), 0); } return IRQ_HANDLED; @@ -3114,8 +3101,6 @@ static int aoc_platform_probe(struct platform_device *pdev) INIT_WORK(&prvdata->online_work, aoc_did_become_online); - INIT_WORK(&prvdata->process_work, aoc_process_services); - INIT_DELAYED_WORK(&prvdata->monitor_work, aoc_monitor_online); aoc_configure_interrupt(); |