Hi Dmitry,

> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of Dmitry Torokhov
> Sent: 2016年10月28日 1:44
> To: Amitkumar Karwar
> Cc: [email protected]; Cathy Luo; Nishant Sarmukadam;
> [email protected]; [email protected]
> Subject: Re: [PATCH v2 2/5] mwifiex: use spinlock for 'mwifiex_processing' in
> shutdown_drv
> 
> Hi Amit,
> 
> On Thu, Oct 27, 2016 at 02:42:40PM +0530, Amitkumar Karwar wrote:
> > This variable is guarded by spinlock at all other places. This patch
> > takes care of missing spinlock usage in mwifiex_shutdown_drv().
> 
> Since in the previous discussion you stated that we inhibit interrupts and 
> flush
> the workqueue so that mwifiex_shutdown_drv() can't run simultaneously with
> the main processing routine, why do we need this?
> 
> 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.


> Thanks.
> 
> >
> > Signed-off-by: Amitkumar Karwar <[email protected]>
> > ---
> > v2: Same as v1
> > ---
> >  drivers/net/wireless/marvell/mwifiex/init.c | 3 +++
> >  1 file changed, 3 insertions(+)
> >
> > diff --git a/drivers/net/wireless/marvell/mwifiex/init.c
> > b/drivers/net/wireless/marvell/mwifiex/init.c
> > index 82839d9..8e5e424 100644
> > --- a/drivers/net/wireless/marvell/mwifiex/init.c
> > +++ b/drivers/net/wireless/marvell/mwifiex/init.c
> > @@ -670,11 +670,14 @@ mwifiex_shutdown_drv(struct mwifiex_adapter
> > *adapter)
> >
> >     adapter->hw_status = MWIFIEX_HW_STATUS_CLOSING;
> >     /* wait for mwifiex_process to complete */
> > +   spin_lock_irqsave(&adapter->main_proc_lock, flags);
> >     if (adapter->mwifiex_processing) {
> > +           spin_unlock_irqrestore(&adapter->main_proc_lock, flags);
> >             mwifiex_dbg(adapter, WARN,
> >                         "main process is still running\n");
> >             return ret;
> >     }
> > +   spin_unlock_irqrestore(&adapter->main_proc_lock, flags);
> >
> >     /* cancel current command */
> >     if (adapter->curr_cmd) {
> > --
> > 1.9.1
> >
> 
> --
> Dmitry

Reply via email to