diff options
author | Yixuan Jiang <yixuanjiang@google.com> | 2021-12-01 03:30:33 +0000 |
---|---|---|
committer | Yixuan Jiang <yixuanjiang@google.com> | 2021-12-01 03:39:02 +0000 |
commit | 57e638a2ed2b7e4c90d2031ae5864f3e76ee5d86 (patch) | |
tree | 879e0df68e61e57d5221fc115a5491b6cd764c6c | |
parent | 115d998232e9d8846b2a45ddf2c2c95ac6e1fd15 (diff) | |
download | aoc-57e638a2ed2b7e4c90d2031ae5864f3e76ee5d86.tar.gz |
Revert "aoc: fix aoc process crash issue when aoc service off"
This reverts commit 115d998232e9d8846b2a45ddf2c2c95ac6e1fd15.
Reason for revert: regression issue b/208505107
Bug: 207988396
Change-Id: Iea8a765a6410670eaf752e1d0f24de85908df153
-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); @@ -527,8 +523,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; @@ -2222,20 +2217,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++) { @@ -2256,8 +2246,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, @@ -2345,8 +2333,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; @@ -3115,8 +3102,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(); |