diff options
author | Lai Jiangshan <laijs@cn.fujitsu.com> | 2011-05-26 23:25:58 (GMT) |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-05-27 00:12:37 (GMT) |
commit | e2e77098764636456ba7092a8b3b3b34b2a8e8d8 (patch) | |
tree | 58e2b06e61326b05c8850bb196eaad071903df0b /drivers/edac/edac_mc.c | |
parent | 26498e89e83c62cffcb8836a2ac2c5b795d84258 (diff) | |
download | linux-e2e77098764636456ba7092a8b3b3b34b2a8e8d8.tar.xz |
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 1d80560..d69144a 100644 --- a/drivers/edac/edac_mc.c +++ b/drivers/edac/edac_mc.c @@ -447,20 +447,16 @@ fail1: return 1; } -static void complete_mc_list_del(struct rcu_head *head) -{ - struct mem_ctl_info *mci; - - mci = container_of(head, struct mem_ctl_info, rcu); - INIT_LIST_HEAD(&mci->link); -} - static void del_mc_from_global_list(struct mem_ctl_info *mci) { atomic_dec(&edac_handlers); list_del_rcu(&mci->link); - call_rcu(&mci->rcu, complete_mc_list_del); - rcu_barrier(); + + /* these are for safe removal of devices from global list while + * NMI handlers may be traversing list + */ + synchronize_rcu(); + INIT_LIST_HEAD(&mci->link); } /** |