From: Johannes Berg <johannes@sipsolutions.net>
To: Jiri Benc <jbenc@suse.cz>
Cc: Jouni Malinen <jkm@devicescape.com>,
"John W. Linville" <linville@tuxdriver.com>,
netdev <netdev@vger.kernel.org>
Subject: Re: [PATCH] d80211: use list_for_each_entry{,_safe}
Date: Fri, 22 Sep 2006 11:04:32 +0200 [thread overview]
Message-ID: <1158915872.5368.14.camel@ux156> (raw)
In-Reply-To: <20060921194823.1ae45b10@logostar.upir.cz>
This patch changes (hopefully!) all occurrences in d80211 of
list_for_each to list_for_each_entry (and _safe variants where they were
used before).
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
---
This is the respun patch including no locking changes at all.
--- wireless-dev.orig/net/d80211/ieee80211.c 2006-09-11 11:16:13.000000000 +0200
+++ wireless-dev/net/d80211/ieee80211.c 2006-09-22 11:00:58.000000000 +0200
@@ -967,13 +967,12 @@ static void purge_old_ps_buffers(struct
{
int total = 0, purged = 0;
struct sk_buff *skb;
- struct list_head *ptr;
+ struct ieee80211_sub_if_data *sdata;
+ struct sta_info *sta;
spin_lock_bh(&local->sub_if_lock);
- list_for_each(ptr, &local->sub_if_list) {
+ list_for_each_entry(sdata, &local->sub_if_list, list) {
struct ieee80211_if_ap *ap;
- struct ieee80211_sub_if_data *sdata =
- list_entry(ptr, struct ieee80211_sub_if_data, list);
if (sdata->dev == local->mdev ||
sdata->type != IEEE80211_IF_TYPE_AP)
continue;
@@ -988,9 +987,7 @@ static void purge_old_ps_buffers(struct
spin_unlock_bh(&local->sub_if_lock);
spin_lock_bh(&local->sta_lock);
- list_for_each(ptr, &local->sta_list) {
- struct sta_info *sta =
- list_entry(ptr, struct sta_info, list);
+ list_for_each_entry(sta, &local->sta_list, list) {
skb = skb_dequeue(&sta->ps_tx_buf);
if (skb) {
purged++;
@@ -3851,16 +3848,15 @@ ieee80211_rx_h_if_stats(struct ieee80211
static void ieee80211_stat_refresh(unsigned long data)
{
struct ieee80211_local *local = (struct ieee80211_local *) data;
- struct list_head *ptr, *n;
+ struct sta_info *sta;
+ struct ieee80211_sub_if_data *sdata;
if (!local->stat_time)
return;
/* go through all stations */
spin_lock_bh(&local->sta_lock);
- list_for_each(ptr, &local->sta_list) {
- struct sta_info *sta =
- list_entry(ptr, struct sta_info, list);
+ list_for_each_entry(sta, &local->sta_list, list) {
sta->channel_use = (sta->channel_use_raw / local->stat_time) /
CHAN_UTIL_PER_10MS;
sta->channel_use_raw = 0;
@@ -3868,14 +3864,11 @@ static void ieee80211_stat_refresh(unsig
spin_unlock_bh(&local->sta_lock);
/* go through all subinterfaces */
- list_for_each_safe(ptr, n, &local->sub_if_list) {
- struct ieee80211_sub_if_data *sdata =
- list_entry(ptr, struct ieee80211_sub_if_data, list);
+ list_for_each_entry(sdata, &local->sub_if_list, list) {
sdata->channel_use = (sdata->channel_use_raw /
local->stat_time) / CHAN_UTIL_PER_10MS;
sdata->channel_use_raw = 0;
-
- }
+ }
/* hardware interface */
local->channel_use = (local->channel_use_raw /
@@ -4596,7 +4589,7 @@ EXPORT_SYMBOL(ieee80211_update_hw);
void ieee80211_unregister_hw(struct net_device *dev)
{
struct ieee80211_local *local = dev->ieee80211_ptr;
- struct list_head *ptr, *n;
+ struct ieee80211_sub_if_data *sdata, *tmp;
int i;
tasklet_disable(&local->tasklet);
@@ -4609,11 +4602,9 @@ void ieee80211_unregister_hw(struct net_
sysfs_remove_link(&local->class_dev.kobj, "master");
- list_for_each_safe(ptr, n, &local->sub_if_list) {
- struct ieee80211_sub_if_data *sdata =
- list_entry(ptr, struct ieee80211_sub_if_data, list);
+ list_for_each_entry_safe(sdata, tmp, &local->sub_if_list, list)
__ieee80211_if_del(local, sdata);
- }
+
rtnl_unlock();
if (local->rate_limit)
--- wireless-dev.orig/net/d80211/ieee80211_dev.c 2006-09-11 11:16:06.000000000 +0200
+++ wireless-dev/net/d80211/ieee80211_dev.c 2006-09-22 10:56:18.000000000 +0200
@@ -39,7 +39,6 @@ static struct ieee80211_dev_list *__ieee
int ieee80211_dev_alloc_index(struct ieee80211_local *local)
{
- struct list_head *i;
struct ieee80211_dev_list *dev_item, *new;
int index = 0;
@@ -48,14 +47,13 @@ int ieee80211_dev_alloc_index(struct iee
return -ENOMEM;
new->local = local;
spin_lock(&dev_list_lock);
- list_for_each(i, &dev_list) {
- dev_item = list_entry(i, struct ieee80211_dev_list, list);
+ list_for_each_entry(dev_item, &dev_list, list) {
if (index < dev_item->dev_index)
break;
index++;
}
new->dev_index = index;
- list_add_tail(&new->list, i);
+ list_add_tail(&new->list, &dev_item->list);
spin_unlock(&dev_list_lock);
local->dev_index = index;
return index;
--- wireless-dev.orig/net/d80211/ieee80211_ioctl.c 2006-08-25 11:29:01.000000000 +0200
+++ wireless-dev/net/d80211/ieee80211_ioctl.c 2006-09-22 10:59:34.000000000 +0200
@@ -2174,23 +2174,21 @@ static int ieee80211_ioctl_clear_keys(st
{
struct ieee80211_local *local = dev->ieee80211_ptr;
struct ieee80211_key_conf key;
- struct list_head *ptr;
int i;
u8 addr[ETH_ALEN];
struct ieee80211_key_conf *keyconf;
+ struct ieee80211_sub_if_data *sdata;
+ struct sta_info *sta;
memset(addr, 0xff, ETH_ALEN);
- list_for_each(ptr, &local->sub_if_list) {
- struct ieee80211_sub_if_data *sdata =
- list_entry(ptr, struct ieee80211_sub_if_data, list);
+ list_for_each_entry(sdata, &local->sub_if_list, list) {
for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
keyconf = NULL;
if (sdata->keys[i] &&
!sdata->keys[i]->force_sw_encrypt &&
local->hw->set_key &&
(keyconf = ieee80211_key_data2conf(local,
- sdata->keys[i]))
- != NULL)
+ sdata->keys[i])))
local->hw->set_key(dev, DISABLE_KEY, addr,
keyconf, 0);
kfree(keyconf);
@@ -2201,14 +2199,11 @@ static int ieee80211_ioctl_clear_keys(st
}
spin_lock_bh(&local->sta_lock);
- list_for_each(ptr, &local->sta_list) {
- struct sta_info *sta =
- list_entry(ptr, struct sta_info, list);
+ list_for_each_entry(sta, &local->sta_list, list) {
keyconf = NULL;
if (sta->key && !sta->key->force_sw_encrypt &&
local->hw->set_key &&
- (keyconf = ieee80211_key_data2conf(local, sta->key))
- != NULL)
+ (keyconf = ieee80211_key_data2conf(local, sta->key)))
local->hw->set_key(dev, DISABLE_KEY, sta->addr,
keyconf, sta->aid);
kfree(keyconf);
@@ -2324,22 +2319,17 @@ static int ieee80211_ioctl_default_wep_o
int value)
{
int i;
- struct list_head *ptr;
+ struct ieee80211_sub_if_data *sdata;
local->default_wep_only = value;
- list_for_each(ptr, &local->sub_if_list) {
- struct ieee80211_sub_if_data *sdata =
- list_entry(ptr, struct ieee80211_sub_if_data, list);
- for (i = 0; i < NUM_DEFAULT_KEYS; i++) {
- if (value) {
+ list_for_each_entry(sdata, &local->sub_if_list, list)
+ for (i = 0; i < NUM_DEFAULT_KEYS; i++)
+ if (value)
ieee80211_key_enable_hwaccel(local,
sdata->keys[i]);
- } else {
+ else
ieee80211_key_disable_hwaccel(local,
sdata->keys[i]);
- }
- }
- }
return 0;
}
--- wireless-dev.orig/net/d80211/ieee80211_sta.c 2006-09-11 11:16:13.000000000 +0200
+++ wireless-dev/net/d80211/ieee80211_sta.c 2006-09-22 10:56:18.000000000 +0200
@@ -1792,13 +1792,11 @@ void ieee80211_sta_rx_scan(struct net_de
static int ieee80211_sta_active_ibss(struct net_device *dev)
{
struct ieee80211_local *local = dev->ieee80211_ptr;
- struct list_head *ptr;
int active = 0;
struct sta_info *sta;
spin_lock_bh(&local->sta_lock);
- list_for_each(ptr, &local->sta_list) {
- sta = list_entry(ptr, struct sta_info, list);
+ list_for_each_entry(sta, &local->sta_list, list) {
if (sta->dev == dev &&
time_after(sta->last_rx + IEEE80211_IBSS_MERGE_INTERVAL,
jiffies)) {
@@ -1815,19 +1813,16 @@ static int ieee80211_sta_active_ibss(str
static void ieee80211_sta_expire(struct net_device *dev)
{
struct ieee80211_local *local = dev->ieee80211_ptr;
- struct list_head *ptr, *n;
- struct sta_info *sta;
+ struct sta_info *sta, *tmp;
spin_lock_bh(&local->sta_lock);
- list_for_each_safe(ptr, n, &local->sta_list) {
- sta = list_entry(ptr, struct sta_info, list);
+ list_for_each_entry_safe(sta, tmp, &local->sta_list, list)
if (time_after(jiffies, sta->last_rx +
IEEE80211_IBSS_INACTIVITY_LIMIT)) {
printk(KERN_DEBUG "%s: expiring inactive STA " MAC_FMT
"\n", dev->name, MAC_ARG(sta->addr));
sta_info_free(sta, 1);
}
- }
spin_unlock_bh(&local->sta_lock);
}
@@ -2182,7 +2177,6 @@ static int ieee80211_sta_find_ibss(struc
struct ieee80211_sta_bss *bss;
int found = 0;
u8 bssid[ETH_ALEN];
- struct list_head *ptr;
int active_ibss;
if (ifsta->ssid_len == 0)
@@ -2194,8 +2188,7 @@ static int ieee80211_sta_find_ibss(struc
dev->name, active_ibss);
#endif /* CONFIG_D80211_IBSS_DEBUG */
spin_lock_bh(&local->sta_bss_lock);
- list_for_each(ptr, &local->sta_bss_list) {
- bss = list_entry(ptr, struct ieee80211_sta_bss, list);
+ list_for_each_entry(bss, &local->sta_bss_list, list) {
if (ifsta->ssid_len != bss->ssid_len ||
memcmp(ifsta->ssid, bss->ssid, bss->ssid_len) != 0
|| !(bss->capability & WLAN_CAPABILITY_IBSS))
@@ -2738,14 +2731,12 @@ ieee80211_sta_scan_result(struct net_dev
int ieee80211_sta_scan_results(struct net_device *dev, char *buf, size_t len)
{
struct ieee80211_local *local = dev->ieee80211_ptr;
- struct list_head *ptr;
char *current_ev = buf;
char *end_buf = buf + len;
struct ieee80211_sta_bss *bss;
spin_lock_bh(&local->sta_bss_lock);
- list_for_each(ptr, &local->sta_bss_list) {
- bss = list_entry(ptr, struct ieee80211_sta_bss, list);
+ list_for_each_entry(bss, &local->sta_bss_list, list) {
if (buf + len - current_ev <= IW_EV_ADDR_LEN) {
spin_unlock_bh(&local->sta_bss_lock);
return -E2BIG;
@@ -2787,7 +2778,6 @@ struct sta_info * ieee80211_ibss_add_sta
u8 *addr)
{
struct ieee80211_local *local = dev->ieee80211_ptr;
- struct list_head *ptr;
struct sta_info *sta;
struct ieee80211_sub_if_data *sdata = NULL;
struct net_device *sta_dev = NULL;
@@ -2803,14 +2793,12 @@ struct sta_info * ieee80211_ibss_add_sta
}
spin_lock_bh(&local->sub_if_lock);
- list_for_each(ptr, &local->sub_if_list) {
- sdata = list_entry(ptr, struct ieee80211_sub_if_data, list);
+ list_for_each_entry(sdata, &local->sub_if_list, list)
if (sdata->type == IEEE80211_IF_TYPE_IBSS &&
memcmp(bssid, sdata->u.sta.bssid, ETH_ALEN) == 0) {
sta_dev = sdata->dev;
break;
}
- }
spin_unlock_bh(&local->sub_if_lock);
if (!sta_dev)
--- wireless-dev.orig/net/d80211/sta_info.c 2006-08-25 11:29:01.000000000 +0200
+++ wireless-dev/net/d80211/sta_info.c 2006-09-22 11:00:26.000000000 +0200
@@ -333,8 +333,7 @@ static void sta_info_cleanup(unsigned lo
static void sta_info_proc_add_task(void *data)
{
struct ieee80211_local *local = data;
- struct list_head *ptr;
- struct sta_info *sta;
+ struct sta_info *sta, *tmp;
while (1) {
spin_lock_bh(&local->sta_lock);
@@ -352,8 +351,7 @@ static void sta_info_proc_add_task(void
while (1) {
spin_lock_bh(&local->sta_lock);
- list_for_each(ptr, &local->sta_list) {
- sta = list_entry(ptr, struct sta_info, list);
+ list_for_each_entry_safe(sta, tmp, &local->sta_list, list) {
if (!sta->sysfs_registered) {
__sta_info_get(sta);
break;
@@ -441,14 +439,11 @@ void sta_info_remove_aid_ptr(struct sta_
*/
void sta_info_flush(struct ieee80211_local *local, struct net_device *dev)
{
- struct list_head *ptr, *n;
+ struct sta_info *sta, *tmp;
spin_lock_bh(&local->sta_lock);
-
- list_for_each_safe(ptr, n, &local->sta_list) {
- struct sta_info *sta = list_entry(ptr, struct sta_info, list);
+ list_for_each_entry_safe(sta, tmp, &local->sta_list, list)
if (!dev || dev == sta->dev)
sta_info_free(sta, 1);
- }
spin_unlock_bh(&local->sta_lock);
}
next prev parent reply other threads:[~2006-09-22 9:03 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-08-30 8:43 [PATCH] d80211: use list_for_each_entry{,_safe} Johannes Berg
2006-08-30 15:43 ` Jouni Malinen
2006-08-31 6:58 ` Johannes Berg
2006-09-21 17:48 ` Jiri Benc
2006-09-22 9:04 ` Johannes Berg [this message]
2006-09-22 12:00 ` Jiri Benc
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1158915872.5368.14.camel@ux156 \
--to=johannes@sipsolutions.net \
--cc=jbenc@suse.cz \
--cc=jkm@devicescape.com \
--cc=linville@tuxdriver.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).