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 <[EMAIL PROTECTED]>

---
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);
 }

-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to