Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 150130
b: refs/heads/master
c: f3b8525
h: refs/heads/master
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed May 6, 2009
1 parent 41a587c commit a693357
Show file tree
Hide file tree
Showing 6 changed files with 230 additions and 217 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2d72289095e9621158acf1d59a830cfe920fa93b
refs/heads/master: f3b85252f081581a8f257545ed748062dce7798b
22 changes: 3 additions & 19 deletions trunk/net/mac80211/ibss.c
Original file line number Diff line number Diff line change
Expand Up @@ -432,15 +432,7 @@ static void ieee80211_sta_merge_ibss(struct ieee80211_sub_if_data *sdata)
printk(KERN_DEBUG "%s: No active IBSS STAs - trying to scan for other "
"IBSS networks with same SSID (merge)\n", sdata->dev->name);

/* XXX maybe racy? */
if (sdata->local->scan_req)
return;

memcpy(sdata->local->int_scan_req.ssids[0].ssid,
ifibss->ssid, IEEE80211_MAX_SSID_LEN);
sdata->local->int_scan_req.ssids[0].ssid_len = ifibss->ssid_len;
if (ieee80211_request_scan(sdata, &sdata->local->int_scan_req))
ieee80211_scan_failed(sdata->local);
ieee80211_request_internal_scan(sdata, ifibss->ssid, ifibss->ssid_len);
}

static void ieee80211_sta_create_ibss(struct ieee80211_sub_if_data *sdata)
Expand Down Expand Up @@ -553,16 +545,8 @@ static void ieee80211_sta_find_ibss(struct ieee80211_sub_if_data *sdata)
printk(KERN_DEBUG "%s: Trigger new scan to find an IBSS to "
"join\n", sdata->dev->name);

/* XXX maybe racy? */
if (local->scan_req)
return;

memcpy(local->int_scan_req.ssids[0].ssid,
ifibss->ssid, IEEE80211_MAX_SSID_LEN);
local->int_scan_req.ssids[0].ssid_len =
ifibss->ssid_len;
if (ieee80211_request_scan(sdata, &local->int_scan_req))
ieee80211_scan_failed(local);
ieee80211_request_internal_scan(sdata, ifibss->ssid,
ifibss->ssid_len);
} else if (ifibss->state != IEEE80211_IBSS_MLME_JOINED) {
int interval = IEEE80211_SCAN_INTERVAL;

Expand Down
6 changes: 3 additions & 3 deletions trunk/net/mac80211/ieee80211_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -659,6 +659,7 @@ struct ieee80211_local {


/* Scanning and BSS list */
struct mutex scan_mtx;
bool sw_scanning, hw_scanning;
struct cfg80211_ssid scan_ssid;
struct cfg80211_scan_request int_scan_req;
Expand Down Expand Up @@ -947,6 +948,8 @@ int ieee80211_ibss_leave(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);
int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata,
struct cfg80211_scan_request *req);
int ieee80211_scan_results(struct ieee80211_local *local,
Expand All @@ -960,9 +963,6 @@ int ieee80211_sta_set_extra_ie(struct ieee80211_sub_if_data *sdata,
const char *ie, size_t len);

void ieee80211_mlme_notify_scan_completed(struct ieee80211_local *local);
void ieee80211_scan_failed(struct ieee80211_local *local);
int ieee80211_start_scan(struct ieee80211_sub_if_data *scan_sdata,
struct cfg80211_scan_request *req);
struct ieee80211_bss *
ieee80211_bss_info_update(struct ieee80211_local *local,
struct ieee80211_rx_status *rx_status,
Expand Down
2 changes: 2 additions & 0 deletions trunk/net/mac80211/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -783,6 +783,7 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,

INIT_LIST_HEAD(&local->interfaces);
mutex_init(&local->iflist_mtx);
mutex_init(&local->scan_mtx);

spin_lock_init(&local->key_lock);

Expand Down Expand Up @@ -1126,6 +1127,7 @@ void ieee80211_free_hw(struct ieee80211_hw *hw)
struct ieee80211_local *local = hw_to_local(hw);

mutex_destroy(&local->iflist_mtx);
mutex_destroy(&local->scan_mtx);

wiphy_free(local->hw.wiphy);
}
Expand Down
28 changes: 9 additions & 19 deletions trunk/net/mac80211/mlme.c
Original file line number Diff line number Diff line change
Expand Up @@ -2072,19 +2072,15 @@ static int ieee80211_sta_config_auth(struct ieee80211_sub_if_data *sdata)
return 0;
} else {
if (ifmgd->assoc_scan_tries < IEEE80211_ASSOC_SCANS_MAX_TRIES) {
u8 ssid_len = 0;

if (!(ifmgd->flags & IEEE80211_STA_AUTO_SSID_SEL))
ssid_len = ifmgd->ssid_len;

ifmgd->assoc_scan_tries++;
/* XXX maybe racy? */
if (local->scan_req)
return -1;
memcpy(local->int_scan_req.ssids[0].ssid,
ifmgd->ssid, IEEE80211_MAX_SSID_LEN);
if (ifmgd->flags & IEEE80211_STA_AUTO_SSID_SEL)
local->int_scan_req.ssids[0].ssid_len = 0;
else
local->int_scan_req.ssids[0].ssid_len = ifmgd->ssid_len;

if (ieee80211_start_scan(sdata, &local->int_scan_req))
ieee80211_scan_failed(local);
ieee80211_request_internal_scan(sdata, ifmgd->ssid,
ssid_len);

ifmgd->state = IEEE80211_STA_MLME_AUTHENTICATE;
set_bit(IEEE80211_STA_REQ_AUTH, &ifmgd->request);
Expand Down Expand Up @@ -2122,14 +2118,8 @@ static void ieee80211_sta_work(struct work_struct *work)
ifmgd->state != IEEE80211_STA_MLME_AUTHENTICATE &&
ifmgd->state != IEEE80211_STA_MLME_ASSOCIATE &&
test_and_clear_bit(IEEE80211_STA_REQ_SCAN, &ifmgd->request)) {
/*
* The call to ieee80211_start_scan can fail but ieee80211_request_scan
* (which queued ieee80211_sta_work) did not return an error. Thus, call
* ieee80211_scan_failed here if ieee80211_start_scan fails in order to
* notify the scan requester.
*/
if (ieee80211_start_scan(sdata, local->scan_req))
ieee80211_scan_failed(local);
queue_delayed_work(local->hw.workqueue, &local->scan_work,
round_jiffies_relative(0));
return;
}

Expand Down
Loading

0 comments on commit a693357

Please sign in to comment.