summaryrefslogtreecommitdiffstats
path: root/mac80211-fix-ibss-scanning.patch
diff options
context:
space:
mode:
authorJustin M. Forbes <jforbes@redhat.com>2013-01-15 17:02:15 -0600
committerJustin M. Forbes <jforbes@redhat.com>2013-01-15 17:02:15 -0600
commit45aa9a25561570fc0feb8d355edaf7f763b4743e (patch)
tree944fa93e771016e9f7e769f6ad7df99b2a50cdad /mac80211-fix-ibss-scanning.patch
parentaef2a4b3e0119151b8cf7b01689478c5664bc64c (diff)
downloadkernel-45aa9a25561570fc0feb8d355edaf7f763b4743e.tar.gz
kernel-45aa9a25561570fc0feb8d355edaf7f763b4743e.tar.xz
kernel-45aa9a25561570fc0feb8d355edaf7f763b4743e.zip
Linux v3.8-rc3-293-g406089d
Diffstat (limited to 'mac80211-fix-ibss-scanning.patch')
-rw-r--r--mac80211-fix-ibss-scanning.patch132
1 files changed, 0 insertions, 132 deletions
diff --git a/mac80211-fix-ibss-scanning.patch b/mac80211-fix-ibss-scanning.patch
deleted file mode 100644
index c2bc698a0..000000000
--- a/mac80211-fix-ibss-scanning.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-Do not scan on no-IBSS and disabled channels in IBSS mode. Doing this
-can trigger Microcode errors on iwlwifi and iwlegacy drivers.
-
-Also rename ieee80211_request_internal_scan() function since it is only
-used in IBSS mode and simplify calling it from ieee80211_sta_find_ibss().
-
-This patch should address:
-https://bugzilla.redhat.com/show_bug.cgi?id=883414
-https://bugzilla.kernel.org/show_bug.cgi?id=49411
-
-Reported-by: Jesse Kahtava <jesse_kahtava@f-m.fm>
-Reported-by: Mikko Rapeli <mikko.rapeli@iki.fi>
-Cc: stable@vger.kernel.org
-Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
----
- net/mac80211/ibss.c | 9 ++++-----
- net/mac80211/ieee80211_i.h | 6 +++---
- net/mac80211/scan.c | 34 ++++++++++++++++++++++++----------
- 3 files changed, 31 insertions(+), 18 deletions(-)
-
-diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c
-index c21e33d..d9df6b8 100644
---- a/net/mac80211/ibss.c
-+++ b/net/mac80211/ibss.c
-@@ -678,8 +678,8 @@ static void ieee80211_sta_merge_ibss(struct ieee80211_sub_if_data *sdata)
- sdata_info(sdata,
- "No active IBSS STAs - trying to scan for other IBSS networks with same SSID (merge)\n");
-
-- ieee80211_request_internal_scan(sdata,
-- ifibss->ssid, ifibss->ssid_len, NULL);
-+ ieee80211_request_ibss_scan(sdata, ifibss->ssid, ifibss->ssid_len,
-+ NULL);
- }
-
- static void ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata)
-@@ -777,9 +777,8 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
- IEEE80211_SCAN_INTERVAL)) {
- sdata_info(sdata, "Trigger new scan to find an IBSS to join\n");
-
-- ieee80211_request_internal_scan(sdata,
-- ifibss->ssid, ifibss->ssid_len,
-- ifibss->fixed_channel ? ifibss->channel : NULL);
-+ ieee80211_request_ibss_scan(sdata, ifibss->ssid,
-+ ifibss->ssid_len, chan);
- } else {
- int interval = IEEE80211_SCAN_INTERVAL;
-
-diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
-index 156e583..bc48d4d 100644
---- a/net/mac80211/ieee80211_i.h
-+++ b/net/mac80211/ieee80211_i.h
-@@ -1247,9 +1247,9 @@ void ieee80211_mesh_rx_queued_mgmt(struct ieee80211_sub_if_data *sdata,
-
- /* scan/BSS handling */
- void ieee80211_scan_work(struct work_struct *work);
--int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
-- const u8 *ssid, u8 ssid_len,
-- struct ieee80211_channel *chan);
-+int ieee80211_request_ibss_scan(struct ieee80211_sub_if_data *sdata,
-+ const u8 *ssid, u8 ssid_len,
-+ struct ieee80211_channel *chan);
- int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
- struct cfg80211_scan_request *req);
- void ieee80211_scan_cancel(struct ieee80211_local *local);
-diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
-index 43e60b5..fab706f 100644
---- a/net/mac80211/scan.c
-+++ b/net/mac80211/scan.c
-@@ -819,9 +819,9 @@ int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
- return res;
- }
-
--int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
-- const u8 *ssid, u8 ssid_len,
-- struct ieee80211_channel *chan)
-+int ieee80211_request_ibss_scan(struct ieee80211_sub_if_data *sdata,
-+ const u8 *ssid, u8 ssid_len,
-+ struct ieee80211_channel *chan)
- {
- struct ieee80211_local *local = sdata->local;
- int ret = -EBUSY;
-@@ -835,22 +835,36 @@ int ieee80211_request_internal_scan(struct ieee80211_sub_if_data *sdata,
-
- /* fill internal scan request */
- if (!chan) {
-- int i, nchan = 0;
-+ int i, max_n;
-+ int n_ch = 0;
-
- for (band = 0; band < IEEE80211_NUM_BANDS; band++) {
- if (!local->hw.wiphy->bands[band])
- continue;
-- for (i = 0;
-- i < local->hw.wiphy->bands[band]->n_channels;
-- i++) {
-- local->int_scan_req->channels[nchan] =
-+
-+ max_n = local->hw.wiphy->bands[band]->n_channels;
-+ for (i = 0; i < max_n; i++) {
-+ struct ieee80211_channel *tmp_ch =
- &local->hw.wiphy->bands[band]->channels[i];
-- nchan++;
-+
-+ if (tmp_ch->flags & (IEEE80211_CHAN_NO_IBSS |
-+ IEEE80211_CHAN_DISABLED))
-+ continue;
-+
-+ local->int_scan_req->channels[n_ch] = tmp_ch;
-+ n_ch++;
- }
- }
-
-- local->int_scan_req->n_channels = nchan;
-+ if (WARN_ON_ONCE(n_ch == 0))
-+ goto unlock;
-+
-+ local->int_scan_req->n_channels = n_ch;
- } else {
-+ if (WARN_ON_ONCE(chan->flags & (IEEE80211_CHAN_NO_IBSS |
-+ IEEE80211_CHAN_DISABLED)))
-+ goto unlock;
-+
- local->int_scan_req->channels[0] = chan;
- local->int_scan_req->n_channels = 1;
- }
---
-1.7.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 \ No newline at end of file