Search Linux Wireless

Re: [PATCH] cfg80211: Warn once for delayed scan completion

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

 



On Tue, 2014-10-21 at 09:26 +0530, Sujith Manoharan wrote:
> Johannes Berg wrote:
> > Maybe we need something like this:
> > 
> > diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
> > index af0d094b2f2f..45b74ab1c59d 100644
> > --- a/net/mac80211/scan.c
> > +++ b/net/mac80211/scan.c
> > @@ -985,7 +985,6 @@ void ieee80211_scan_cancel(struct ieee80211_local *local)
> >  			drv_cancel_hw_scan(local,
> >  				rcu_dereference_protected(local->scan_sdata,
> >  						lockdep_is_held(&local->mtx)));
> > -		goto out;
> >  	}
> 
> Is the big comment at the beginning of ieee80211_scan_cancel()
> outdated ? It does seem valid to me, at least the point about
> not cancelling scan_work for HW scan.

Yeah you're right.

However, when the interface is deleted, the driver must still also
remove the scan and definitely schedule the work, so most drivers will
really always do so in cancel_hw_scan()? We could change the API and
require that to be synchronous, like in the interface removal case, but
maybe we don't want to.

How about this then?

diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index e469b3390f2a..6f1b90eb568c 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -766,10 +766,12 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
 	int i, flushed;
 	struct ps_data *ps;
 	struct cfg80211_chan_def chandef;
+	bool cancel_scan;
 
 	clear_bit(SDATA_STATE_RUNNING, &sdata->state);
 
-	if (rcu_access_pointer(local->scan_sdata) == sdata)
+	cancel_scan = rcu_access_pointer(local->scan_sdata) == sdata;
+	if (cancel_scan)
 		ieee80211_scan_cancel(local);
 
 	/*
@@ -993,6 +995,9 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
 
 	ieee80211_recalc_ps(local, -1);
 
+	if (cancel_scan)
+		flush_delayed_work(&local->scan_work);
+
 	if (local->open_count == 0) {
 		ieee80211_stop_device(local);
 

johannes

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[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