diff options
author | Tomas Winkler <tomas.winkler@intel.com> | 2012-08-16 19:39:43 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-08-16 09:51:02 -0700 |
commit | c216fdeb2e7371554c56ba457c374cce9c77f91a (patch) | |
tree | 9d88b3170a5470844e61ac90a30fd923d50df14b /drivers/misc/mei/interrupt.c | |
parent | 248ffdf7c95726a8dae76e25fdb037899c5b77fa (diff) | |
download | op-kernel-dev-c216fdeb2e7371554c56ba457c374cce9c77f91a.zip op-kernel-dev-c216fdeb2e7371554c56ba457c374cce9c77f91a.tar.gz |
mei: wd: decouple and revamp watchdog state machine
Before ME watchdog was exported through standard watchdog interface
it was closed and started together with the mei device.
The major issue is that closing ME watchdog disabled also MEI device,
to fix this the watchdog state machine has to be independent from MEI
state machine.
Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/misc/mei/interrupt.c')
-rw-r--r-- | drivers/misc/mei/interrupt.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/misc/mei/interrupt.c b/drivers/misc/mei/interrupt.c index 0f25cee..0900a71 100644 --- a/drivers/misc/mei/interrupt.c +++ b/drivers/misc/mei/interrupt.c @@ -1224,10 +1224,9 @@ static int mei_irq_thread_write_handler(struct mei_io_list *cmpl_list, } } - if (dev->stop && !dev->wd_pending) { - dev->wd_stopped = true; + if (dev->wd_state == MEI_WD_STOPPING) { + dev->wd_state = MEI_WD_IDLE; wake_up_interruptible(&dev->wait_stop_wd); - return 0; } if (dev->extra_write_index) { @@ -1250,14 +1249,12 @@ static int mei_irq_thread_write_handler(struct mei_io_list *cmpl_list, dev->wd_pending = false; - if (dev->wd_timeout) + if (dev->wd_state == MEI_WD_RUNNING) *slots -= mei_data2slots(MEI_WD_START_MSG_SIZE); else *slots -= mei_data2slots(MEI_WD_STOP_MSG_SIZE); } } - if (dev->stop) - return -ENODEV; /* complete control write list CB */ dev_dbg(&dev->pdev->dev, "complete control write list cb.\n"); |