Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 134873
b: refs/heads/master
c: cb3a8ee
h: refs/heads/master
i:
  134871: 19a2fd6
v: v3
  • Loading branch information
Dan Williams authored and John W. Linville committed Feb 27, 2009
1 parent eea048d commit fd099ce
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 3 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: abd2fdb4c606f0e5cfec3647d57ebd20f03caafd
refs/heads/master: cb3a8eec0e66edfe8db7d3b3bf19d25745bae3c3
3 changes: 3 additions & 0 deletions trunk/net/wireless/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ struct cfg80211_registered_device {
struct rb_root bss_tree;
u32 bss_generation;
struct cfg80211_scan_request *scan_req; /* protected by RTNL */
unsigned long suspend_at;

/* must be last because of the way we do wiphy_priv(),
* and it should at least be aligned to NETDEV_ALIGN */
Expand Down Expand Up @@ -113,5 +114,7 @@ void ieee80211_set_bitrate_flags(struct wiphy *wiphy);
void wiphy_update_regulatory(struct wiphy *wiphy, enum reg_set_by setby);

void cfg80211_bss_expire(struct cfg80211_registered_device *dev);
void cfg80211_bss_age(struct cfg80211_registered_device *dev,
unsigned long age_secs);

#endif /* __NET_WIRELESS_CORE_H */
25 changes: 23 additions & 2 deletions trunk/net/wireless/scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,18 @@ static void bss_release(struct kref *ref)
kfree(bss);
}

/* must hold dev->bss_lock! */
void cfg80211_bss_age(struct cfg80211_registered_device *dev,
unsigned long age_secs)
{
struct cfg80211_internal_bss *bss;
unsigned long age_jiffies = msecs_to_jiffies(age_secs * MSEC_PER_SEC);

list_for_each_entry(bss, &dev->bss_list, list) {
bss->ts -= age_jiffies;
}
}

/* must hold dev->bss_lock! */
void cfg80211_bss_expire(struct cfg80211_registered_device *dev)
{
Expand Down Expand Up @@ -584,6 +596,15 @@ static void ieee80211_scan_add_ies(struct iw_request_info *info,
}
}

static inline unsigned int elapsed_jiffies_msecs(unsigned long start)
{
unsigned long end = jiffies;

if (end >= start)
return jiffies_to_msecs(end - start);

return jiffies_to_msecs(end + (MAX_JIFFY_OFFSET - start) + 1);
}

static char *
ieee80211_bss(struct iw_request_info *info,
Expand Down Expand Up @@ -763,8 +784,8 @@ ieee80211_bss(struct iw_request_info *info,
&iwe, buf);
memset(&iwe, 0, sizeof(iwe));
iwe.cmd = IWEVCUSTOM;
sprintf(buf, " Last beacon: %dms ago",
jiffies_to_msecs(jiffies - bss->ts));
sprintf(buf, " Last beacon: %ums ago",
elapsed_jiffies_msecs(bss->ts));
iwe.u.data.length = strlen(buf);
current_ev = iwe_stream_add_point(info, current_ev,
end_buf, &iwe, buf);
Expand Down
7 changes: 7 additions & 0 deletions trunk/net/wireless/sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ static int wiphy_suspend(struct device *dev, pm_message_t state)
struct cfg80211_registered_device *rdev = dev_to_rdev(dev);
int ret = 0;

rdev->suspend_at = get_seconds();

if (rdev->ops->suspend) {
rtnl_lock();
ret = rdev->ops->suspend(&rdev->wiphy);
Expand All @@ -74,6 +76,11 @@ static int wiphy_resume(struct device *dev)
struct cfg80211_registered_device *rdev = dev_to_rdev(dev);
int ret = 0;

/* Age scan results with time spent in suspend */
spin_lock_bh(&rdev->bss_lock);
cfg80211_bss_age(rdev, get_seconds() - rdev->suspend_at);
spin_unlock_bh(&rdev->bss_lock);

if (rdev->ops->resume) {
rtnl_lock();
ret = rdev->ops->resume(&rdev->wiphy);
Expand Down

0 comments on commit fd099ce

Please sign in to comment.