diff options
author | Arun Murthy <arun.murthy@stericsson.com> | 2011-11-23 16:05:33 +0530 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-06-05 10:40:14 +0200 |
commit | 78fd14a2dd158404265d338f90e2c0ab10a57649 (patch) | |
tree | 4909082ba0cbf11b82397fc2eb2ffdb41837c698 | |
parent | b6af1e7ec37bd16377bbc4ee4f03cf1e5d137ed3 (diff) |
u8500-shrm: Stop network queue on modem reset
On shrm receiving modem reset interrupt, it will disable interrupts and
schedule a tasklet for initiating MSR if enabled. The tasklet function
includes stopping the network queue. But as soon as ISR is served, if
phonet starts ending message, shrm will return with a -ve value. Hence
phonet retries sending the same message again. This will lead to a dedlock
and finally ends up with a watchdog timeout.
Hence stop the network queue on receiving modem reset interrupt in the
interrupt handler.
ST-Ericsson Linux next: NA
ST-Ericsson ID: 375164
ST-Ericsson FOSS-OUT ID: Trivial
Change-Id: Id608024590cea26e15f04afa7786e245825da2ed
Signed-off-by: Arun Murthy <arun.murthy@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/39434
Reviewed-by: Bibek BASU <bibek.basu@stericsson.com>
Tested-by: Bibek BASU <bibek.basu@stericsson.com>
Reviewed-by: Rabin VINCENT <rabin.vincent@stericsson.com>
-rw-r--r-- | drivers/modem/shrm/shrm_protocol.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/modem/shrm/shrm_protocol.c b/drivers/modem/shrm/shrm_protocol.c index c13f05d50e8..19644ca8742 100644 --- a/drivers/modem/shrm/shrm_protocol.c +++ b/drivers/modem/shrm/shrm_protocol.c @@ -499,9 +499,6 @@ static int shrm_modem_reset_sequence(void) queue_kthread_work(&shm_dev->shm_ac_wake_kw, &shm_dev->shm_ac_wake_req); - /* stop network queue */ - shrm_stop_netdev(shm_dev->ndev); - /* reset char device queues */ shrm_char_reset_queues(shm_dev); @@ -597,6 +594,9 @@ static irqreturn_t shrm_prcmu_irq_handler(int irq, void *data) disable_irq_nosync(IRQ_PRCMU_CA_WAKE); disable_irq_nosync(IRQ_PRCMU_CA_SLEEP); + /* stop network queue */ + shrm_stop_netdev(shm_dev->ndev); + tasklet_schedule(&shrm_sw_reset_callback); break; default: |