Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 159657
b: refs/heads/master
c: 36e6fea
h: refs/heads/master
i:
  159655: 3e58091
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed Aug 14, 2009
1 parent c78f1f3 commit bf36713
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 12 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: 70bdb6b275d789ddf05c3a858e6b57715539394b
refs/heads/master: 36e6fea84905512ea776707e82b5b435220efc17
10 changes: 9 additions & 1 deletion trunk/net/wireless/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -601,8 +601,8 @@ void wiphy_unregister(struct wiphy *wiphy)

mutex_unlock(&cfg80211_mutex);

flush_work(&rdev->scan_done_wk);
cancel_work_sync(&rdev->conn_work);
cancel_work_sync(&rdev->scan_done_wk);
kfree(rdev->scan_req);
flush_work(&rdev->event_work);
}
Expand Down Expand Up @@ -728,6 +728,13 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
#endif
break;
case NETDEV_UNREGISTER:
cfg80211_lock_rdev(rdev);

if (WARN_ON(rdev->scan_req && rdev->scan_req->dev == dev)) {
rdev->scan_req->aborted = true;
___cfg80211_scan_done(rdev);
}

mutex_lock(&rdev->devlist_mtx);
/*
* It is possible to get NETDEV_UNREGISTER
Expand All @@ -746,6 +753,7 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
#endif
}
mutex_unlock(&rdev->devlist_mtx);
cfg80211_unlock_rdev(rdev);
break;
case NETDEV_PRE_UP:
if (!(wdev->wiphy->interface_modes & BIT(wdev->iftype)))
Expand Down
1 change: 1 addition & 0 deletions trunk/net/wireless/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,7 @@ void cfg80211_sme_scan_done(struct net_device *dev);
void cfg80211_sme_rx_auth(struct net_device *dev, const u8 *buf, size_t len);
void cfg80211_sme_disassoc(struct net_device *dev, int idx);
void __cfg80211_scan_done(struct work_struct *wk);
void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev);
void cfg80211_upload_connect_keys(struct wireless_dev *wdev);

struct ieee80211_channel *
Expand Down
26 changes: 16 additions & 10 deletions trunk/net/wireless/scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,14 @@

#define IEEE80211_SCAN_RESULT_EXPIRE (15 * HZ)

void __cfg80211_scan_done(struct work_struct *wk)
void ___cfg80211_scan_done(struct cfg80211_registered_device *rdev)
{
struct cfg80211_registered_device *rdev;
struct cfg80211_scan_request *request;
struct net_device *dev;
#ifdef CONFIG_WIRELESS_EXT
union iwreq_data wrqu;
#endif

rdev = container_of(wk, struct cfg80211_registered_device,
scan_done_wk);

mutex_lock(&rdev->mtx);
request = rdev->scan_req;

dev = request->dev;
Expand All @@ -43,9 +38,9 @@ void __cfg80211_scan_done(struct work_struct *wk)
cfg80211_sme_scan_done(dev);

if (request->aborted)
nl80211_send_scan_aborted(wiphy_to_dev(request->wiphy), dev);
nl80211_send_scan_aborted(rdev, dev);
else
nl80211_send_scan_done(wiphy_to_dev(request->wiphy), dev);
nl80211_send_scan_done(rdev, dev);

#ifdef CONFIG_WIRELESS_EXT
if (!request->aborted) {
Expand All @@ -57,11 +52,22 @@ void __cfg80211_scan_done(struct work_struct *wk)

dev_put(dev);

cfg80211_unlock_rdev(rdev);
wiphy_to_dev(request->wiphy)->scan_req = NULL;
rdev->scan_req = NULL;
kfree(request);
}

void __cfg80211_scan_done(struct work_struct *wk)
{
struct cfg80211_registered_device *rdev;

rdev = container_of(wk, struct cfg80211_registered_device,
scan_done_wk);

cfg80211_lock_rdev(rdev);
___cfg80211_scan_done(rdev);
cfg80211_unlock_rdev(rdev);
}

void cfg80211_scan_done(struct cfg80211_scan_request *request, bool aborted)
{
WARN_ON(request != wiphy_to_dev(request->wiphy)->scan_req);
Expand Down

0 comments on commit bf36713

Please sign in to comment.