use list_for_each() for iteration in hostap and prism54 driver
cover use list_for_each() for iteration in hostap and prism54 driver
This patchset uses the list_for_each() macro instead of manual iteration in the following drivers:
Host AP
Prism54
Signature · 11 lines
Matthias Kaehlcke
Linux Application Developer
Barcelona
The salvation of mankind lies only in making everything the concern of all
(Alexander Solzhenitsyn)
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-PATCH 1/2 use list_for_each() for iteration in Host AP driver
Use list_for_each() in the Host AP driver to iterate over the MAC restrictions and the STA info lists
--
drivers/net/wireless/hostap/hostap_ap.c +5 -8
@@ -352,8 +352,7 @@ static int ap_control_proc_read(char *page, char **start, off_t off, p +=sprintf (p,"MAC entries: %u\n" , ap->mac_restrictions.entries); p +=sprintf (p,"MAC list:\n" );spin_lock_bh (&ap->mac_restrictions.lock); -for (ptr = ap->mac_restrictions.mac_list.next; - ptr != &ap->mac_restrictions.mac_list; ptr = ptr->next) { +list_for_each (ptr, &ap->mac_restrictions.mac_list) {if (p - page >PAGE_SIZE -80 ) { p +=sprintf (p,"All entries did not fit one page.\n" );break ;
@@ -393,8 +392,7 @@ int ap_control_del_mac(struct mac_restrictions *mac_restrictions, u8 *mac)struct mac_entry *entry;spin_lock_bh (&mac_restrictions->lock); -for (ptr = mac_restrictions->mac_list.next; - ptr != &mac_restrictions->mac_list; ptr = ptr->next) { +list_for_each (ptr, &mac_restrictions->mac_list) { entry = list_entry(ptr, struct mac_entry, list);if (memcmp (entry->addr, mac,ETH_ALEN ) ==0 ) {
@@ -421,8 +419,7 @@ static int ap_control_mac_deny(struct mac_restrictions *mac_restrictions,return 0 ;spin_lock_bh (&mac_restrictions->lock); -for (ptr = mac_restrictions->mac_list.next; - ptr != &mac_restrictions->mac_list; ptr = ptr->next) { +list_for_each (ptr, &mac_restrictions->mac_list) { entry = list_entry(ptr, struct mac_entry, list);if (memcmp (entry->addr, mac,ETH_ALEN ) ==0 ) {
@@ -529,7 +526,7 @@ static int prism2_ap_proc_read(char *page, char **start, off_t off, p +=sprintf (p,"# BSSID CHAN SIGNAL NOISE RATE SSID FLAGS\n" );spin_lock_bh (&ap->sta_table_lock); -for (ptr = ap->sta_list.next; ptr != &ap->sta_list; ptr = ptr->next) { +list_for_each (ptr, &ap->sta_list) {struct sta_info *sta = (struct sta_info *) ptr;if (!sta->ap)
@@ -3205,7 +3202,7 @@ void hostap_update_rates(local_info_t *local)return ;spin_lock_bh (&ap->sta_table_lock); -for (ptr = ap->sta_list.next; ptr != &ap->sta_list; ptr = ptr->next) { +list_for_each (ptr, &ap->sta_list) {struct sta_info *sta = (struct sta_info *) ptr;prism2_check_tx_rates (sta); }
Signature · 11 lines
Matthias Kaehlcke
Linux Application Developer
Barcelona
You can chain me, you can torture me, you can even
destroy this body, but you will never imprison my mind
(Mahatma Gandhi)
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-Re: [PATCH 1/2] use list_for_each() for iteration in Host AP driver
Quoted 2 lines · Matthias Kaehlcke
Use
list_for_each()in the Host AP driver to iterate over the MAC restrictions and the STA info lists
please go all the way to a proper list_for_each_entry. Then again now that we have mac80211 shouldn't hostap be ported over to it and this code go away completely?
PATCH 1/2 use list_for_each_entry() for iteration in hostap_ap.c
El Fri, May 25, 2007 at 03:30:05PM +0100 Christoph Hellwig ha dit:
Quoted 5 lines · Matthias Kaehlcke
Quoted 2 lines
Use
list_for_each()in the Host AP driver to iterate over the MAC restrictions and the STA info listsplease go all the way to a proper
list_for_each_entry.
thanks for your comment, here's a patch that uses list_for_each_entry(), additionally to the initial patch it substitutes some list_for_each() loops by list_for_each_entry()
Quoted 2 lines
Then again now that we have mac80211 shouldn't hostap be ported over to it and this code go away completely?
i hope the patch can be useful in the meantime, otherwise just ignore it
--
hostap_ap.c: Use list_for_each_entry() instead of manual iteration and substitute some list_for_each() loops with list_for_each_entry()
--
drivers/net/wireless/hostap/hostap_ap.c +11 -22
@@ -326,7 +326,6 @@ static int ap_control_proc_read(char *page, char **start, off_t off,char *p = page;struct ap_data *ap = (struct ap_data *) data;char *policy_txt; -struct list_head *ptr;struct mac_entry *entry;if (off !=0 ) {
@@ -352,14 +351,12 @@ static int ap_control_proc_read(char *page, char **start, off_t off, p +=sprintf (p,"MAC entries: %u\n" , ap->mac_restrictions.entries); p +=sprintf (p,"MAC list:\n" );spin_lock_bh (&ap->mac_restrictions.lock); -for (ptr = ap->mac_restrictions.mac_list.next; - ptr != &ap->mac_restrictions.mac_list; ptr = ptr->next) { +list_for_each_entry (entry, &ap->mac_restrictions.mac_list, list) {if (p - page >PAGE_SIZE -80 ) { p +=sprintf (p,"All entries did not fit one page.\n" );break ; } - entry = list_entry(ptr, struct mac_entry, list); p +=sprintf (p,MACSTR "\n" ,MAC2STR (entry->addr)); }spin_unlock_bh (&ap->mac_restrictions.lock);
@@ -410,10 +407,10 @@ int ap_control_del_mac(struct mac_restrictions *mac_restrictions, u8 *mac) } +static int ap_control_mac_deny (struct mac_restrictions *mac_restrictions,u8 *mac) { -struct list_head *ptr;struct mac_entry *entry;int found =0 ;
@@ -421,10 +418,7 @@ static int ap_control_mac_deny(struct mac_restrictions *mac_restrictions,return 0 ;spin_lock_bh (&mac_restrictions->lock); -for (ptr = mac_restrictions->mac_list.next; - ptr != &mac_restrictions->mac_list; ptr = ptr->next) { - entry = list_entry(ptr, struct mac_entry, list); - +list_for_each_entry (entry, &mac_restrictions->mac_list, list) {if (memcmp (entry->addr, mac,ETH_ALEN ) ==0 ) { found =1 ;break ;
@@ -519,7 +513,7 @@ static int prism2_ap_proc_read(char *page, char **start, off_t off, {char *p = page;struct ap_data *ap = (struct ap_data *) data; -struct list_head *ptr; +struct sta_info *sta;int i;if (off >PROC_LIMIT ) {
@@ -529,9 +523,7 @@ static int prism2_ap_proc_read(char *page, char **start, off_t off, p +=sprintf (p,"# BSSID CHAN SIGNAL NOISE RATE SSID FLAGS\n" );spin_lock_bh (&ap->sta_table_lock); -for (ptr = ap->sta_list.next; ptr != &ap->sta_list; ptr = ptr->next) { -struct sta_info *sta = (struct sta_info *) ptr; - +list_for_each_entry (sta, &ap->sta_list, list) {if (!sta->ap)continue ;
@@ -861,7 +853,7 @@ void hostap_init_ap_proc(local_info_t *local)void hostap_free_data (struct ap_data *ap) { -struct list_head *n, *ptr; +struct sta_info *n, *sta;if (ap ==NULL || !ap->initialized) { printk(KERN_DEBUG "hostap_free_data: ap has not yet been "
@@ -875,8 +867,7 @@ void hostap_free_data(struct ap_data *ap) ap->crypt = ap->crypt_priv =NULL ;#endif /* PRISM2_NO_KERNEL_IEEE80211_MGMT */ -list_for_each_safe (ptr, n, &ap->sta_list) { - struct sta_info *sta = list_entry(ptr, struct sta_info, list); +list_for_each_entry_safe (sta, n, &ap->sta_list, list) {ap_sta_hash_del (ap, sta);list_del (&sta->list);if ((sta->flags &WLAN_STA_ASSOC ) && !sta->ap && sta->local)
@@ -3198,15 +3189,14 @@ int hostap_update_rx_stats(struct ap_data *ap,void hostap_update_rates (local_info_t *local) { -struct list_head *ptr; +struct sta_info *sta;struct ap_data *ap = local->ap;if (!ap)return ;spin_lock_bh (&ap->sta_table_lock); -for (ptr = ap->sta_list.next; ptr != &ap->sta_list; ptr = ptr->next) { -struct sta_info *sta = (struct sta_info *) ptr; +list_for_each_entry (sta, &ap->sta_list, list) {prism2_check_tx_rates (sta); }spin_unlock_bh (&ap->sta_table_lock);
@@ -3242,11 +3232,10 @@ void * ap_crypt_get_ptrs(struct ap_data *ap, u8 *addr, int permanent,void hostap_add_wds_links (local_info_t *local) {struct ap_data *ap = local->ap; -struct list_head *ptr; +struct sta_info *sta;spin_lock_bh (&ap->sta_table_lock); -list_for_each (ptr, &ap->sta_list) { - struct sta_info *sta = list_entry(ptr, struct sta_info, list); +list_for_each_entry (sta, &ap->sta_list, list) {if (sta->ap)hostap_wds_link_oper (local, sta->addr,WDS_ADD ); }
Signature · 11 lines
Matthias Kaehlcke
Linux Application Developer
Barcelona
You can chain me, you can torture me, you can even
destroy this body, but you will never imprison my mind
(Mahatma Gandhi)
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-Re: [PATCH 1/2] use list_for_each_entry() for iteration in hostap_ap.c
Quoted 3 lines · Matthias Kaehlcke
thanks for your comment, here's a patch that uses
list_for_each_entry(), additionally to the initial patch it substitutes somelist_for_each()loops bylist_for_each_entry()
Thanks! I added this to my list of patches for the driver.
Could you please send a Signed-off-by line for this later version of the patch? You did it for the first version, but just to be sure, it would be prefered to see this explicitly for each version.
Signature · 1 line
Jouni Malinen PGP id EFC895FA
Re: [PATCH 1/2] use list_for_each_entry() for iteration in hostap_ap.c
In reply to Matthias KaehlckeSignature · 10 lines
Matthias Kaehlcke
Linux Application Developer
Barcelona
La posibilidad de realizar un suenyo es lo
que hace que la vida sea interesante
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-PATCH 2/2 use list_for_each() for iteration in Prism 54 driver
In reply to Matthias KaehlckeUse list_for_each() in the Prism54 driver to iterate over the MAC list
--
drivers/net/wireless/prism54/isl_ioctl.c +3 -3
@@ -1861,7 +1861,7 @@ prism54_del_mac(struct net_device *ndev, struct iw_request_info *info,if (down_interruptible (&acl->sem))return -ERESTARTSYS ; -for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) { +list_for_each (ptr, &acl->mac_list) { entry = list_entry(ptr, struct mac_entry, _list);if (memcmp (entry->addr, addr->sa_data,ETH_ALEN ) ==0 ) {
@@ -1891,7 +1891,7 @@ prism54_get_mac(struct net_device *ndev, struct iw_request_info *info,if (down_interruptible (&acl->sem))return -ERESTARTSYS ; -for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) { +list_for_each (ptr, &acl->mac_list) { entry = list_entry(ptr, struct mac_entry, _list);memcpy (dst->sa_data, entry->addr,ETH_ALEN );
@@ -1972,7 +1972,7 @@ prism54_mac_accept(struct islpci_acl *acl, char *mac)return 1 ; } -for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) { +list_for_each (ptr, &acl->mac_list) { entry = list_entry(ptr, struct mac_entry, _list);if (memcmp (entry->addr, mac,ETH_ALEN ) ==0 ) { res =1 ;
Signature · 10 lines
Matthias Kaehlcke
Linux Application Developer
Barcelona
If sharing a thing in no way diminishes it,
it is not rightly owned if it is not shared
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-PATCH 2/2 use list_for_each_entry() for iteration in Prism 54 driver
El Fri, May 25, 2007 at 03:04:44PM +0200 Matthias Kaehlcke ha dit:
Quoted 1 line
Use
list_for_each()in the Prism54 driver to iterate over the MAC list
In response to a similar patch Christoph Hellwig suggests the use of list_for_each_entry() instead of list_for_each(). Here is a evolution of the patch that takes into account Christophs' suggestion
--
Prism54 driver: Use list_for_each_entry() instead of manual iteration and substitute a list_for_each_safe() loop with list_for_each_entry_safe()
--
drivers/net/wireless/prism54/isl_ioctl.c +6 -16
@@ -1853,7 +1853,6 @@ prism54_del_mac(struct net_device *ndev, struct iw_request_info *info,islpci_private *priv =netdev_priv (ndev);struct islpci_acl *acl = &priv->acl;struct mac_entry *entry; -struct list_head *ptr;struct sockaddr *addr = (struct sockaddr *) extra;if (addr->sa_family !=ARPHRD_ETHER )
@@ -1861,11 +1860,9 @@ prism54_del_mac(struct net_device *ndev, struct iw_request_info *info,if (down_interruptible (&acl->sem))return -ERESTARTSYS ; -for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) { - entry = list_entry(ptr, struct mac_entry, _list); - +list_for_each_entry (entry, &acl->mac_list, _list) {if (memcmp (entry->addr, addr->sa_data,ETH_ALEN ) ==0 ) { -list_del (ptr); +list_del (&entry->_list); acl->size--;kfree (entry);up (&acl->sem);
@@ -1883,7 +1880,6 @@ prism54_get_mac(struct net_device *ndev, struct iw_request_info *info,islpci_private *priv =netdev_priv (ndev);struct islpci_acl *acl = &priv->acl;struct mac_entry *entry; -struct list_head *ptr;struct sockaddr *dst = (struct sockaddr *) extra; dwrq->length =0 ;
@@ -1891,9 +1887,7 @@ prism54_get_mac(struct net_device *ndev, struct iw_request_info *info,if (down_interruptible (&acl->sem))return -ERESTARTSYS ; -for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) { - entry = list_entry(ptr, struct mac_entry, _list); - +list_for_each_entry (entry, &acl->mac_list, _list) {memcpy (dst->sa_data, entry->addr,ETH_ALEN ); dst->sa_family =ARPHRD_ETHER ; dwrq->length++;
@@ -1960,7 +1954,6 @@ prism54_get_policy(struct net_device *ndev, struct iw_request_info *info,static int prism54_mac_accept (struct islpci_acl *acl,char *mac) { -struct list_head *ptr;struct mac_entry *entry;int res =0 ;
@@ -1972,8 +1965,7 @@ prism54_mac_accept(struct islpci_acl *acl, char *mac)return 1 ; } -for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) { - entry = list_entry(ptr, struct mac_entry, _list); +list_for_each_entry (entry, &acl->mac_list, _list) {if (memcmp (entry->addr, mac,ETH_ALEN ) ==0 ) { res =1 ;break ;
@@ -2216,11 +2208,9 @@ prism54_wpa_bss_ie_init(islpci_private *priv)void prism54_wpa_bss_ie_clean (islpci_private *priv) { -struct list_head *ptr, *n; +struct islpci_bss_wpa_ie *bss, *n; -list_for_each_safe (ptr, n, &priv->bss_wpa_list) { -struct islpci_bss_wpa_ie *bss; - bss = list_entry(ptr, struct islpci_bss_wpa_ie, list); +list_for_each_entry_safe (bss, n, &priv->bss_wpa_list, list) {kfree (bss); } }
Signature · 10 lines
Matthias Kaehlcke
Linux Application Developer
Barcelona
I am incapable of conceiving infinity, and yet I do not accept finity
(Simone de Beauvoir)
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-Re: [PATCH 2/2] use list_for_each_entry() for iteration in Prism 54 driver
Quoted 8 lines · Matthias Kaehlcke
El Fri, May 25, 2007 at 03:04:44PM +0200 Matthias Kaehlcke ha dit:
Quoted 1 line
Use
list_for_each()in the Prism54 driver to iterate over the MAC listIn response to a similar patch Christoph Hellwig suggests the use of
list_for_each_entry()instead oflist_for_each(). Here is a evolution of the patch that takes into account Christophs' suggestion
Quoted 7 lines
--
Prism54 driver: Use
list_for_each_entry()instead of manual iteration and substitute alist_for_each_safe()loop withlist_for_each_entry_safe()Signed-off-by Matthias Kaehlcke <[email protected]>
Looks good,
Luis
Quoted 96 lines
--
drivers/net/wireless/prism54/isl_ioctl.c +6
-17@@ -1853,7 +1853,6 @@ prism54_del_mac(struct net_device *ndev, struct iw_request_info *info,islpci_private *priv =netdev_priv (ndev);struct islpci_acl *acl = &priv->acl;struct mac_entry *entry; -struct list_head *ptr;struct sockaddr *addr = (struct sockaddr *) extra;if (addr->sa_family !=ARPHRD_ETHER )@@ -1861,11 +1860,9 @@ prism54_del_mac(struct net_device *ndev, struct iw_request_info *info,if (down_interruptible (&acl->sem))return -ERESTARTSYS ; -for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) { - entry = list_entry(ptr, struct mac_entry, _list); - +list_for_each_entry (entry, &acl->mac_list, _list) {if (memcmp (entry->addr, addr->sa_data,ETH_ALEN ) ==0 ) { -list_del (ptr); +list_del (&entry->_list); acl->size--;kfree (entry);up (&acl->sem);@@ -1883,7 +1880,6 @@ prism54_get_mac(struct net_device *ndev, struct iw_request_info *info,islpci_private *priv =netdev_priv (ndev);struct islpci_acl *acl = &priv->acl;struct mac_entry *entry; -struct list_head *ptr;struct sockaddr *dst = (struct sockaddr *) extra; dwrq->length =0 ;@@ -1891,9 +1887,7 @@ prism54_get_mac(struct net_device *ndev, struct iw_request_info *info,if (down_interruptible (&acl->sem))return -ERESTARTSYS ; -for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) { - entry = list_entry(ptr, struct mac_entry, _list); - +list_for_each_entry (entry, &acl->mac_list, _list) {memcpy (dst->sa_data, entry->addr,ETH_ALEN ); dst->sa_family =ARPHRD_ETHER ; dwrq->length++;@@ -1960,7 +1954,6 @@ prism54_get_policy(struct net_device *ndev, struct iw_request_info *info,static int prism54_mac_accept (struct islpci_acl *acl,char *mac) { -struct list_head *ptr;struct mac_entry *entry;int res =0 ;@@ -1972,8 +1965,7 @@ prism54_mac_accept(struct islpci_acl *acl, char *mac)return 1 ; } -for (ptr = acl->mac_list.next; ptr != &acl->mac_list; ptr = ptr->next) { - entry = list_entry(ptr, struct mac_entry, _list); +list_for_each_entry (entry, &acl->mac_list, _list) {if (memcmp (entry->addr, mac,ETH_ALEN ) ==0 ) { res =1 ;break ;@@ -2216,11 +2208,9 @@ prism54_wpa_bss_ie_init(islpci_private *priv)void prism54_wpa_bss_ie_clean (islpci_private *priv) { -struct list_head *ptr, *n; +struct islpci_bss_wpa_ie *bss, *n; -list_for_each_safe (ptr, n, &priv->bss_wpa_list) { -struct islpci_bss_wpa_ie *bss; - bss = list_entry(ptr, struct islpci_bss_wpa_ie, list); +list_for_each_entry_safe (bss, n, &priv->bss_wpa_list, list) {kfree (bss); } } --Matthias Kaehlcke
Linux Application Developer
BarcelonaI am incapable of conceiving infinity, and yet I do not accept finity
(Simone de Beauvoir)
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
.'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-
-
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html