diff options
author | Arun Murthy <arun.murthy@stericsson.com> | 2011-11-23 16:05:33 +0530 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-05-22 11:07:20 +0200 |
commit | 0ac258cfc8e78e8c1eeeaa182e0307d74b70543e (patch) | |
tree | 22bd90abca4cd2fd6f31c27643b9d9c822cec80c /drivers/modem | |
parent | 66494ce129180419c8a7921e41ce570070b1ec16 (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>
Diffstat (limited to 'drivers/modem')
-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: |