aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc
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/misc
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/misc')
-rw-r--r--drivers/misc/sgi-gru/grutlbpurge.c3
-rw-r--r--drivers/misc/vmw_vmci/vmci_doorbell.c7
-rw-r--r--drivers/misc/vmw_vmci/vmci_resource.c6
3 files changed, 5 insertions, 11 deletions
diff --git a/drivers/misc/sgi-gru/grutlbpurge.c b/drivers/misc/sgi-gru/grutlbpurge.c
index 240a6d361665..2129274ef7ab 100644
--- a/drivers/misc/sgi-gru/grutlbpurge.c
+++ b/drivers/misc/sgi-gru/grutlbpurge.c
@@ -280,11 +280,10 @@ static struct mmu_notifier *mmu_find_ops(struct mm_struct *mm,
280 const struct mmu_notifier_ops *ops) 280 const struct mmu_notifier_ops *ops)
281{ 281{
282 struct mmu_notifier *mn, *gru_mn = NULL; 282 struct mmu_notifier *mn, *gru_mn = NULL;
283 struct hlist_node *n;
284 283
285 if (mm->mmu_notifier_mm) { 284 if (mm->mmu_notifier_mm) {
286 rcu_read_lock(); 285 rcu_read_lock();
287 hlist_for_each_entry_rcu(mn, n, &mm->mmu_notifier_mm->list, 286 hlist_for_each_entry_rcu(mn, &mm->mmu_notifier_mm->list,
288 hlist) 287 hlist)
289 if (mn->ops == ops) { 288 if (mn->ops == ops) {
290 gru_mn = mn; 289 gru_mn = mn;
diff --git a/drivers/misc/vmw_vmci/vmci_doorbell.c b/drivers/misc/vmw_vmci/vmci_doorbell.c
index c3e8397f62ed..a8cee33ae8d2 100644
--- a/drivers/misc/vmw_vmci/vmci_doorbell.c
+++ b/drivers/misc/vmw_vmci/vmci_doorbell.c
@@ -127,9 +127,8 @@ static struct dbell_entry *dbell_index_table_find(u32 idx)
127{ 127{
128 u32 bucket = VMCI_DOORBELL_HASH(idx); 128 u32 bucket = VMCI_DOORBELL_HASH(idx);
129 struct dbell_entry *dbell; 129 struct dbell_entry *dbell;
130 struct hlist_node *node;
131 130
132 hlist_for_each_entry(dbell, node, &vmci_doorbell_it.entries[bucket], 131 hlist_for_each_entry(dbell, &vmci_doorbell_it.entries[bucket],
133 node) { 132 node) {
134 if (idx == dbell->idx) 133 if (idx == dbell->idx)
135 return dbell; 134 return dbell;
@@ -359,12 +358,10 @@ static void dbell_fire_entries(u32 notify_idx)
359{ 358{
360 u32 bucket = VMCI_DOORBELL_HASH(notify_idx); 359 u32 bucket = VMCI_DOORBELL_HASH(notify_idx);
361 struct dbell_entry *dbell; 360 struct dbell_entry *dbell;
362 struct hlist_node *node;
363 361
364 spin_lock_bh(&vmci_doorbell_it.lock); 362 spin_lock_bh(&vmci_doorbell_it.lock);
365 363
366 hlist_for_each_entry(dbell, node, 364 hlist_for_each_entry(dbell, &vmci_doorbell_it.entries[bucket], node) {
367 &vmci_doorbell_it.entries[bucket], node) {
368 if (dbell->idx == notify_idx && 365 if (dbell->idx == notify_idx &&
369 atomic_read(&dbell->active) == 1) { 366 atomic_read(&dbell->active) == 1) {
370 if (dbell->run_delayed) { 367 if (dbell->run_delayed) {
diff --git a/drivers/misc/vmw_vmci/vmci_resource.c b/drivers/misc/vmw_vmci/vmci_resource.c
index a196f84a4fd2..9a53a30de445 100644
--- a/drivers/misc/vmw_vmci/vmci_resource.c
+++ b/drivers/misc/vmw_vmci/vmci_resource.c
@@ -46,11 +46,10 @@ static struct vmci_resource *vmci_resource_lookup(struct vmci_handle handle,
46 enum vmci_resource_type type) 46 enum vmci_resource_type type)
47{ 47{
48 struct vmci_resource *r, *resource = NULL; 48 struct vmci_resource *r, *resource = NULL;
49 struct hlist_node *node;
50 unsigned int idx = vmci_resource_hash(handle); 49 unsigned int idx = vmci_resource_hash(handle);
51 50
52 rcu_read_lock(); 51 rcu_read_lock();
53 hlist_for_each_entry_rcu(r, node, 52 hlist_for_each_entry_rcu(r,
54 &vmci_resource_table.entries[idx], node) { 53 &vmci_resource_table.entries[idx], node) {
55 u32 cid = r->handle.context; 54 u32 cid = r->handle.context;
56 u32 rid = r->handle.resource; 55 u32 rid = r->handle.resource;
@@ -146,12 +145,11 @@ void vmci_resource_remove(struct vmci_resource *resource)
146 struct vmci_handle handle = resource->handle; 145 struct vmci_handle handle = resource->handle;
147 unsigned int idx = vmci_resource_hash(handle); 146 unsigned int idx = vmci_resource_hash(handle);
148 struct vmci_resource *r; 147 struct vmci_resource *r;
149 struct hlist_node *node;
150 148
151 /* Remove resource from hash table. */ 149 /* Remove resource from hash table. */
152 spin_lock(&vmci_resource_table.lock); 150 spin_lock(&vmci_resource_table.lock);
153 151
154 hlist_for_each_entry(r, node, &vmci_resource_table.entries[idx], node) { 152 hlist_for_each_entry(r, &vmci_resource_table.entries[idx], node) {
155 if (vmci_handle_is_equal(r->handle, resource->handle)) { 153 if (vmci_handle_is_equal(r->handle, resource->handle)) {
156 hlist_del_init_rcu(&r->node); 154 hlist_del_init_rcu(&r->node);
157 break; 155 break;