diff options
author | Lai Jiangshan <laijs@cn.fujitsu.com> | 2011-05-26 19:25:58 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-26 20:12:37 -0400 |
commit | e2e77098764636456ba7092a8b3b3b34b2a8e8d8 (patch) | |
tree | 58e2b06e61326b05c8850bb196eaad071903df0b /drivers/edac/edac_mc.c | |
parent | 26498e89e83c62cffcb8836a2ac2c5b795d84258 (diff) |
edac,rcu: use synchronize_rcu() instead of call_rcu()+rcu_barrier()
synchronize_rcu() does the stuff as needed.
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Cc: Doug Thompson <dougthompson@xmission.com>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Mauro Carvalho Chehab <mchehab@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/edac/edac_mc.c')
-rw-r--r-- | drivers/edac/edac_mc.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c index 1d8056049072..d69144a09043 100644 --- a/drivers/edac/edac_mc.c +++ b/drivers/edac/edac_mc.c | |||
@@ -447,20 +447,16 @@ fail1: | |||
447 | return 1; | 447 | return 1; |
448 | } | 448 | } |
449 | 449 | ||
450 | static void complete_mc_list_del(struct rcu_head *head) | ||
451 | { | ||
452 | struct mem_ctl_info *mci; | ||
453 | |||
454 | mci = container_of(head, struct mem_ctl_info, rcu); | ||
455 | INIT_LIST_HEAD(&mci->link); | ||
456 | } | ||
457 | |||
458 | static void del_mc_from_global_list(struct mem_ctl_info *mci) | 450 | static void del_mc_from_global_list(struct mem_ctl_info *mci) |
459 | { | 451 | { |
460 | atomic_dec(&edac_handlers); | 452 | atomic_dec(&edac_handlers); |
461 | list_del_rcu(&mci->link); | 453 | list_del_rcu(&mci->link); |
462 | call_rcu(&mci->rcu, complete_mc_list_del); | 454 | |
463 | rcu_barrier(); | 455 | /* these are for safe removal of devices from global list while |
456 | * NMI handlers may be traversing list | ||
457 | */ | ||
458 | synchronize_rcu(); | ||
459 | INIT_LIST_HEAD(&mci->link); | ||
464 | } | 460 | } |
465 | 461 | ||
466 | /** | 462 | /** |