Message ID | 1379442330-18249-1-git-send-email-zonque@gmail.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
Hi Daniel, > Queue main_work in case mwifiex_main_process() bails due to an already > processed transaction. This is particularly necessary because > mwifiex_main_process() is called from both the SDIO interrupt handler and > the workqueue. In case an interrupt occurs while the main process is > currently executed from the workqueue, the interrupt is lost, resulting in a > command timeout and consequently a card reset. > > I'm marking this for stable kernel in version 3.7+, because on our platform, > the issue appears since 601216e12c ("mwifiex: process RX packets in SDIO > IRQ thread directly") went in. > > Signed-off-by: Daniel Mack <zonque@gmail.com> > Reported-by: Sven Neumann <s.neumann@raumfeld.com> > Reported-by: Andreas Fenkart <afenkart@gmail.com> > Cc: Bing Zhao <bzhao@marvell.com> > Cc: <stable@vger.kernel.org> [v3.7+] Acked-by: Bing Zhao <bzhao@marvell.com> Thanks, Bing > --- > drivers/net/wireless/mwifiex/main.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/net/wireless/mwifiex/main.c > b/drivers/net/wireless/mwifiex/main.c > index ff4ed96..0700bc2 100644 > --- a/drivers/net/wireless/mwifiex/main.c > +++ b/drivers/net/wireless/mwifiex/main.c > @@ -235,6 +235,7 @@ int mwifiex_main_process(struct mwifiex_adapter > *adapter) > /* Check if already processing */ > if (adapter->mwifiex_processing) { > spin_unlock_irqrestore(&adapter->main_proc_lock, flags); > + queue_work(adapter->workqueue, &adapter->main_work); > goto exit_main_proc; > } else { > adapter->mwifiex_processing = true; > -- > 1.8.3.1 -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 17.09.2013 21:15, Bing Zhao wrote: >> Queue main_work in case mwifiex_main_process() bails due to an already >> processed transaction. This is particularly necessary because >> mwifiex_main_process() is called from both the SDIO interrupt handler and >> the workqueue. In case an interrupt occurs while the main process is >> currently executed from the workqueue, the interrupt is lost, resulting in a >> command timeout and consequently a card reset. >> >> I'm marking this for stable kernel in version 3.7+, because on our platform, >> the issue appears since 601216e12c ("mwifiex: process RX packets in SDIO >> IRQ thread directly") went in. >> >> Signed-off-by: Daniel Mack <zonque@gmail.com> >> Reported-by: Sven Neumann <s.neumann@raumfeld.com> >> Reported-by: Andreas Fenkart <afenkart@gmail.com> >> Cc: Bing Zhao <bzhao@marvell.com> >> Cc: <stable@vger.kernel.org> [v3.7+] > > Acked-by: Bing Zhao <bzhao@marvell.com> John, could you pick this one? Many thanks, Daniel > > Thanks, > Bing > >> --- >> drivers/net/wireless/mwifiex/main.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/drivers/net/wireless/mwifiex/main.c >> b/drivers/net/wireless/mwifiex/main.c >> index ff4ed96..0700bc2 100644 >> --- a/drivers/net/wireless/mwifiex/main.c >> +++ b/drivers/net/wireless/mwifiex/main.c >> @@ -235,6 +235,7 @@ int mwifiex_main_process(struct mwifiex_adapter >> *adapter) >> /* Check if already processing */ >> if (adapter->mwifiex_processing) { >> spin_unlock_irqrestore(&adapter->main_proc_lock, flags); >> + queue_work(adapter->workqueue, &adapter->main_work); >> goto exit_main_proc; >> } else { >> adapter->mwifiex_processing = true; >> -- >> 1.8.3.1 > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Daniel, > > Acked-by: Bing Zhao <bzhao@marvell.com> > > John, could you pick this one? We found that this patch causes CPU utilization issue on Chromebooks. Could you please try attached patch on your platform? Basically this patch reverts your change and add main_proc_lock protection for int_status and IS_CARD_RX_RCVD access to avoid the missing interrupt handling. Thanks, Bing
Hi Bing, On 25.09.2013 18:19, Bing Zhao wrote: >>> Acked-by: Bing Zhao <bzhao@marvell.com> >> >> John, could you pick this one? > > We found that this patch causes CPU utilization issue on > Chromebooks. Could you please try attached patch on your platform? > Basically this patch reverts your change and add main_proc_lock > protection for int_status and IS_CARD_RX_RCVD access to avoid the > missing interrupt handling. Ok, that seems to work fine for me as well. Thanks for the update :) Fell free to add my Tested-by: Daniel Mack <zonque@gmail.com> if you need it. Thanks, Daniel -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/wireless/mwifiex/main.c b/drivers/net/wireless/mwifiex/main.c index ff4ed96..0700bc2 100644 --- a/drivers/net/wireless/mwifiex/main.c +++ b/drivers/net/wireless/mwifiex/main.c @@ -235,6 +235,7 @@ int mwifiex_main_process(struct mwifiex_adapter *adapter) /* Check if already processing */ if (adapter->mwifiex_processing) { spin_unlock_irqrestore(&adapter->main_proc_lock, flags); + queue_work(adapter->workqueue, &adapter->main_work); goto exit_main_proc; } else { adapter->mwifiex_processing = true;
Queue main_work in case mwifiex_main_process() bails due to an already processed transaction. This is particularly necessary because mwifiex_main_process() is called from both the SDIO interrupt handler and the workqueue. In case an interrupt occurs while the main process is currently executed from the workqueue, the interrupt is lost, resulting in a command timeout and consequently a card reset. I'm marking this for stable kernel in version 3.7+, because on our platform, the issue appears since 601216e12c ("mwifiex: process RX packets in SDIO IRQ thread directly") went in. Signed-off-by: Daniel Mack <zonque@gmail.com> Reported-by: Sven Neumann <s.neumann@raumfeld.com> Reported-by: Andreas Fenkart <afenkart@gmail.com> Cc: Bing Zhao <bzhao@marvell.com> Cc: <stable@vger.kernel.org> [v3.7+] --- drivers/net/wireless/mwifiex/main.c | 1 + 1 file changed, 1 insertion(+)