aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/atm
diff options
context:
space:
mode:
authorSasha Levin <sasha.levin@oracle.com>2013-02-27 20:06:00 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-02-27 22:10:24 -0500
commitb67bfe0d42cac56c512dd5da4b1b347a23f4b70a (patch)
tree3d465aea12b97683f26ffa38eba8744469de9997 /drivers/atm
parent1e142b29e210b5dfb2deeb6ce2210b60af16d2a6 (diff)
hlist: drop the node parameter from iterators
I'm not sure why, but the hlist for each entry iterators were conceived list_for_each_entry(pos, head, member) The hlist ones were greedy and wanted an extra parameter: hlist_for_each_entry(tpos, pos, head, member) Why did they need an extra pos parameter? I'm not quite sure. Not only they don't really need it, it also prevents the iterator from looking exactly like the list iterator, which is unfortunate. Besides the semantic patch, there was some manual work required: - Fix up the actual hlist iterators in linux/list.h - Fix up the declaration of other iterators based on the hlist ones. - A very small amount of places were using the 'node' parameter, this was modified to use 'obj->member' instead. - Coccinelle didn't handle the hlist_for_each_entry_safe iterator properly, so those had to be fixed up manually. The semantic patch which is mostly the work of Peter Senna Tschudin is here: @@ iterator name hlist_for_each_entry, hlist_for_each_entry_continue, hlist_for_each_entry_from, hlist_for_each_entry_rcu, hlist_for_each_entry_rcu_bh, hlist_for_each_entry_continue_rcu_bh, for_each_busy_worker, ax25_uid_for_each, ax25_for_each, inet_bind_bucket_for_each, sctp_for_each_hentry, sk_for_each, sk_for_each_rcu, sk_for_each_from, sk_for_each_safe, sk_for_each_bound, hlist_for_each_entry_safe, hlist_for_each_entry_continue_rcu, nr_neigh_for_each, nr_neigh_for_each_safe, nr_node_for_each, nr_node_for_each_safe, for_each_gfn_indirect_valid_sp, for_each_gfn_sp, for_each_host; type T; expression a,c,d,e; identifier b; statement S; @@ -T b; <+... when != b ( hlist_for_each_entry(a, - b, c, d) S | hlist_for_each_entry_continue(a, - b, c) S | hlist_for_each_entry_from(a, - b, c) S | hlist_for_each_entry_rcu(a, - b, c, d) S | hlist_for_each_entry_rcu_bh(a, - b, c, d) S | hlist_for_each_entry_continue_rcu_bh(a, - b, c) S | for_each_busy_worker(a, c, - b, d) S | ax25_uid_for_each(a, - b, c) S | ax25_for_each(a, - b, c) S | inet_bind_bucket_for_each(a, - b, c) S | sctp_for_each_hentry(a, - b, c) S | sk_for_each(a, - b, c) S | sk_for_each_rcu(a, - b, c) S | sk_for_each_from -(a, b) +(a) S + sk_for_each_from(a) S | sk_for_each_safe(a, - b, c, d) S | sk_for_each_bound(a, - b, c) S | hlist_for_each_entry_safe(a, - b, c, d, e) S | hlist_for_each_entry_continue_rcu(a, - b, c) S | nr_neigh_for_each(a, - b, c) S | nr_neigh_for_each_safe(a, - b, c, d) S | nr_node_for_each(a, - b, c) S | nr_node_for_each_safe(a, - b, c, d) S | - for_each_gfn_sp(a, c, d, b) S + for_each_gfn_sp(a, c, d) S | - for_each_gfn_indirect_valid_sp(a, c, d, b) S + for_each_gfn_indirect_valid_sp(a, c, d) S | for_each_host(a, - b, c) S | for_each_host_safe(a, - b, c, d) S | for_each_mesh_entry(a, - b, c, d) S ) ...+> [akpm@linux-foundation.org: drop bogus change from net/ipv4/raw.c] [akpm@linux-foundation.org: drop bogus hunk from net/ipv6/raw.c] [akpm@linux-foundation.org: checkpatch fixes] [akpm@linux-foundation.org: fix warnings] [akpm@linux-foudnation.org: redo intrusive kvm changes] Tested-by: Peter Senna Tschudin <peter.senna@gmail.com> Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Signed-off-by: Sasha Levin <sasha.levin@oracle.com> Cc: Wu Fengguang <fengguang.wu@intel.com> Cc: Marcelo Tosatti <mtosatti@redhat.com> Cc: Gleb Natapov <gleb@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/atm')
-rw-r--r--drivers/atm/atmtcp.c6
-rw-r--r--drivers/atm/eni.c3
-rw-r--r--drivers/atm/he.c3
-rw-r--r--drivers/atm/solos-pci.c3
4 files changed, 5 insertions, 10 deletions
diff --git a/drivers/atm/atmtcp.c b/drivers/atm/atmtcp.c
index b22d71cac54c..0e3f8f9dcd29 100644
--- a/drivers/atm/atmtcp.c
+++ b/drivers/atm/atmtcp.c
@@ -157,7 +157,6 @@ static int atmtcp_v_ioctl(struct atm_dev *dev,unsigned int cmd,void __user *arg)
157{ 157{
158 struct atm_cirange ci; 158 struct atm_cirange ci;
159 struct atm_vcc *vcc; 159 struct atm_vcc *vcc;
160 struct hlist_node *node;
161 struct sock *s; 160 struct sock *s;
162 int i; 161 int i;
163 162
@@ -171,7 +170,7 @@ static int atmtcp_v_ioctl(struct atm_dev *dev,unsigned int cmd,void __user *arg)
171 for(i = 0; i < VCC_HTABLE_SIZE; ++i) { 170 for(i = 0; i < VCC_HTABLE_SIZE; ++i) {
172 struct hlist_head *head = &vcc_hash[i]; 171 struct hlist_head *head = &vcc_hash[i];
173 172
174 sk_for_each(s, node, head) { 173 sk_for_each(s, head) {
175 vcc = atm_sk(s); 174 vcc = atm_sk(s);
176 if (vcc->dev != dev) 175 if (vcc->dev != dev)
177 continue; 176 continue;
@@ -264,12 +263,11 @@ static struct atm_vcc *find_vcc(struct atm_dev *dev, short vpi, int vci)
264{ 263{
265 struct hlist_head *head; 264 struct hlist_head *head;
266 struct atm_vcc *vcc; 265 struct atm_vcc *vcc;
267 struct hlist_node *node;
268 struct sock *s; 266 struct sock *s;
269 267
270 head = &vcc_hash[vci & (VCC_HTABLE_SIZE -1)]; 268 head = &vcc_hash[vci & (VCC_HTABLE_SIZE -1)];
271 269
272 sk_for_each(s, node, head) { 270 sk_for_each(s, head) {
273 vcc = atm_sk(s); 271 vcc = atm_sk(s);
274 if (vcc->dev == dev && 272 if (vcc->dev == dev &&
275 vcc->vci == vci && vcc->vpi == vpi && 273 vcc->vci == vci && vcc->vpi == vpi &&
diff --git a/drivers/atm/eni.c b/drivers/atm/eni.c
index c1eb6fa8ac35..b1955ba40d63 100644
--- a/drivers/atm/eni.c
+++ b/drivers/atm/eni.c
@@ -2093,7 +2093,6 @@ static unsigned char eni_phy_get(struct atm_dev *dev,unsigned long addr)
2093 2093
2094static int eni_proc_read(struct atm_dev *dev,loff_t *pos,char *page) 2094static int eni_proc_read(struct atm_dev *dev,loff_t *pos,char *page)
2095{ 2095{
2096 struct hlist_node *node;
2097 struct sock *s; 2096 struct sock *s;
2098 static const char *signal[] = { "LOST","unknown","okay" }; 2097 static const char *signal[] = { "LOST","unknown","okay" };
2099 struct eni_dev *eni_dev = ENI_DEV(dev); 2098 struct eni_dev *eni_dev = ENI_DEV(dev);
@@ -2171,7 +2170,7 @@ static int eni_proc_read(struct atm_dev *dev,loff_t *pos,char *page)
2171 for(i = 0; i < VCC_HTABLE_SIZE; ++i) { 2170 for(i = 0; i < VCC_HTABLE_SIZE; ++i) {
2172 struct hlist_head *head = &vcc_hash[i]; 2171 struct hlist_head *head = &vcc_hash[i];
2173 2172
2174 sk_for_each(s, node, head) { 2173 sk_for_each(s, head) {
2175 struct eni_vcc *eni_vcc; 2174 struct eni_vcc *eni_vcc;
2176 int length; 2175 int length;
2177 2176
diff --git a/drivers/atm/he.c b/drivers/atm/he.c
index 72b6960fa95f..d6891267f5bb 100644
--- a/drivers/atm/he.c
+++ b/drivers/atm/he.c
@@ -329,7 +329,6 @@ __find_vcc(struct he_dev *he_dev, unsigned cid)
329{ 329{
330 struct hlist_head *head; 330 struct hlist_head *head;
331 struct atm_vcc *vcc; 331 struct atm_vcc *vcc;
332 struct hlist_node *node;
333 struct sock *s; 332 struct sock *s;
334 short vpi; 333 short vpi;
335 int vci; 334 int vci;
@@ -338,7 +337,7 @@ __find_vcc(struct he_dev *he_dev, unsigned cid)
338 vci = cid & ((1 << he_dev->vcibits) - 1); 337 vci = cid & ((1 << he_dev->vcibits) - 1);
339 head = &vcc_hash[vci & (VCC_HTABLE_SIZE -1)]; 338 head = &vcc_hash[vci & (VCC_HTABLE_SIZE -1)];
340 339
341 sk_for_each(s, node, head) { 340 sk_for_each(s, head) {
342 vcc = atm_sk(s); 341 vcc = atm_sk(s);
343 if (vcc->dev == he_dev->atm_dev && 342 if (vcc->dev == he_dev->atm_dev &&
344 vcc->vci == vci && vcc->vpi == vpi && 343 vcc->vci == vci && vcc->vpi == vpi &&
diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
index 0474a89170b9..32784d18d1f7 100644
--- a/drivers/atm/solos-pci.c
+++ b/drivers/atm/solos-pci.c
@@ -896,12 +896,11 @@ static struct atm_vcc *find_vcc(struct atm_dev *dev, short vpi, int vci)
896{ 896{
897 struct hlist_head *head; 897 struct hlist_head *head;
898 struct atm_vcc *vcc = NULL; 898 struct atm_vcc *vcc = NULL;
899 struct hlist_node *node;
900 struct sock *s; 899 struct sock *s;
901 900
902 read_lock(&vcc_sklist_lock); 901 read_lock(&vcc_sklist_lock);
903 head = &vcc_hash[vci & (VCC_HTABLE_SIZE -1)]; 902 head = &vcc_hash[vci & (VCC_HTABLE_SIZE -1)];
904 sk_for_each(s, node, head) { 903 sk_for_each(s, head) {
905 vcc = atm_sk(s); 904 vcc = atm_sk(s);
906 if (vcc->dev == dev && vcc->vci == vci && 905 if (vcc->dev == dev && vcc->vci == vci &&
907 vcc->vpi == vpi && vcc->qos.rxtp.traffic_class != ATM_NONE && 906 vcc->vpi == vpi && vcc->qos.rxtp.traffic_class != ATM_NONE &&