From 0ac258cfc8e78e8c1eeeaa182e0307d74b70543e Mon Sep 17 00:00:00 2001 From: Arun Murthy Date: Wed, 23 Nov 2011 16:05:33 +0530 Subject: 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 Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/39434 Reviewed-by: Bibek BASU Tested-by: Bibek BASU Reviewed-by: Rabin VINCENT --- drivers/modem/shrm/shrm_protocol.c | 6 +++--- 1 file 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: -- cgit v1.2.3