Search Linux Wireless

RE: [PATCH v2 2/5] mwifiex: use spinlock for 'mwifiex_processing' in shutdown_drv

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: Dmitry Torokhov [mailto:dmitry.torokhov@xxxxxxxxx]
> Sent: 2016年11月4日 2:49
> To: Brian Norris
> Cc: Xinming Hu; Amitkumar Karwar; linux-wireless@xxxxxxxxxxxxxxx; Cathy Luo;
> Nishant Sarmukadam; rajatja@xxxxxxxxxx
> Subject: Re: [PATCH v2 2/5] mwifiex: use spinlock for 'mwifiex_processing' in
> shutdown_drv
> 
> On Thu, Nov 3, 2016 at 12:27 PM, Brian Norris <briannorris@xxxxxxxxxxxx>
> wrote:
> > On Thu, Nov 03, 2016 at 09:15:04AM -0700, Dmitry Torokhov wrote:
> >> On Thu, Nov 03, 2016 at 08:34:06AM +0000, Xinming Hu wrote:
> >> > > -----Original Message-----
> >> > > From: linux-wireless-owner@xxxxxxxxxxxxxxx
> >> > > [mailto:linux-wireless-owner@xxxxxxxxxxxxxxx] On Behalf Of Dmitry
> >> > > Torokhov
> >> > >
> >> > > Instead please remove call to mwifiex_shutdown_drv() in the main
> >> > > routine and "if (adapter->mwifiex_processing)" check here.
> >> > >
> >> >
> >> > mwifiex_main_process will be used from interrupt or workqueue.
> >> > Now we have disabled interrupt and flush workqueue, so
> >> > mwifiex_main_process won't be scheduled in the future.
> >> > But mwifiex_main_process might just running in context of last
> >> > interrupt, so we need wait current main_process complete in
> >> > mwifiex_shutdown_drv.
> >>
> >> synchronize_irq() is your friend then.
> >
> > Hmm, that sounds right, but IIUC, the "interrupt context" is actually
> > only used for SDIO, and for SDIO, the driver doesn't actually have
> > access to the IRQ number. The MMC/SDIO layer has some extra
> > abstraction around the IRQ. So this may be more difficult than it appears.
> >
> > Do we need a sdio_synchronize_irq() API?
> 
> Actually the ->disable_irq() method should be responsible for making sure it
> does not complete while interrupt handler is running. As far as I can see, for
> SDIO case, we end up calling sdio_card_irq_put() which stops kernel thread
> and won't return while the thread is running. For other interfaces we need to
> check. IIRC USB lacks
> ->disable_irq() altogether and this is something that shoudl be fixed
> (by doing usb_kill_urb() at the minimum).
> 

Thanks for the explain, will keep this cleanup work.

> Thanks.
> 
> --
> Dmitry

Regards,
Xinming




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux