summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Murthy <arun.murthy@stericsson.com>2011-11-23 16:05:33 +0530
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-06-05 10:40:14 +0200
commit78fd14a2dd158404265d338f90e2c0ab10a57649 (patch)
tree4909082ba0cbf11b82397fc2eb2ffdb41837c698
parentb6af1e7ec37bd16377bbc4ee4f03cf1e5d137ed3 (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.c6
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: