From 6ea1741a230eb12732c90a2af7cb9d2c0f4e7567 Mon Sep 17 00:00:00 2001 From: Lai Jiangshan Date: Thu, 26 May 2011 16:25:58 -0700 Subject: [PATCH] --- yaml --- r: 252064 b: refs/heads/master c: e2e77098764636456ba7092a8b3b3b34b2a8e8d8 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/edac/edac_core.h | 12 ------------ trunk/drivers/edac/edac_device.c | 24 ++++++------------------ trunk/drivers/edac/edac_mc.c | 16 ++++++---------- trunk/drivers/edac/edac_pci.c | 21 ++++++--------------- 5 files changed, 19 insertions(+), 56 deletions(-) diff --git a/[refs] b/[refs] index 42fc07d8de11..400d5996f9b1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 26498e89e83c62cffcb8836a2ac2c5b795d84258 +refs/heads/master: e2e77098764636456ba7092a8b3b3b34b2a8e8d8 diff --git a/trunk/drivers/edac/edac_core.h b/trunk/drivers/edac/edac_core.h index eefa3501916b..55b8278bb172 100644 --- a/trunk/drivers/edac/edac_core.h +++ b/trunk/drivers/edac/edac_core.h @@ -421,10 +421,6 @@ struct mem_ctl_info { u32 ce_count; /* Total Correctable Errors for this MC */ unsigned long start_time; /* mci load start time (in jiffies) */ - /* this stuff is for safe removal of mc devices from global list while - * NMI handlers may be traversing list - */ - struct rcu_head rcu; struct completion complete; /* edac sysfs device control */ @@ -620,10 +616,6 @@ struct edac_device_ctl_info { unsigned long start_time; /* edac_device load start time (jiffies) */ - /* these are for safe removal of mc devices from global list while - * NMI handlers may be traversing list - */ - struct rcu_head rcu; struct completion removal_complete; /* sysfs top name under 'edac' directory @@ -722,10 +714,6 @@ struct edac_pci_ctl_info { unsigned long start_time; /* edac_pci load start time (jiffies) */ - /* these are for safe removal of devices from global list while - * NMI handlers may be traversing list - */ - struct rcu_head rcu; struct completion complete; /* sysfs top name under 'edac' directory diff --git a/trunk/drivers/edac/edac_device.c b/trunk/drivers/edac/edac_device.c index a7408cf86f37..c3f67437afb6 100644 --- a/trunk/drivers/edac/edac_device.c +++ b/trunk/drivers/edac/edac_device.c @@ -345,31 +345,19 @@ static int add_edac_dev_to_global_list(struct edac_device_ctl_info *edac_dev) return 1; } -/* - * complete_edac_device_list_del - * - * callback function when reference count is zero - */ -static void complete_edac_device_list_del(struct rcu_head *head) -{ - struct edac_device_ctl_info *edac_dev; - - edac_dev = container_of(head, struct edac_device_ctl_info, rcu); - INIT_LIST_HEAD(&edac_dev->link); -} - /* * del_edac_device_from_global_list - * - * remove the RCU, setup for a callback call, - * then wait for the callback to occur */ static void del_edac_device_from_global_list(struct edac_device_ctl_info *edac_device) { list_del_rcu(&edac_device->link); - call_rcu(&edac_device->rcu, complete_edac_device_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(&edac_device->link); } /* diff --git a/trunk/drivers/edac/edac_mc.c b/trunk/drivers/edac/edac_mc.c index 1d8056049072..d69144a09043 100644 --- a/trunk/drivers/edac/edac_mc.c +++ b/trunk/drivers/edac/edac_mc.c @@ -447,20 +447,16 @@ static int add_mc_to_global_list(struct mem_ctl_info *mci) 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); } /** diff --git a/trunk/drivers/edac/edac_pci.c b/trunk/drivers/edac/edac_pci.c index efb5d5650783..2b378207d571 100644 --- a/trunk/drivers/edac/edac_pci.c +++ b/trunk/drivers/edac/edac_pci.c @@ -163,19 +163,6 @@ static int add_edac_pci_to_global_list(struct edac_pci_ctl_info *pci) return 1; } -/* - * complete_edac_pci_list_del - * - * RCU completion callback to indicate item is deleted - */ -static void complete_edac_pci_list_del(struct rcu_head *head) -{ - struct edac_pci_ctl_info *pci; - - pci = container_of(head, struct edac_pci_ctl_info, rcu); - INIT_LIST_HEAD(&pci->link); -} - /* * del_edac_pci_from_global_list * @@ -184,8 +171,12 @@ static void complete_edac_pci_list_del(struct rcu_head *head) static void del_edac_pci_from_global_list(struct edac_pci_ctl_info *pci) { list_del_rcu(&pci->link); - call_rcu(&pci->rcu, complete_edac_pci_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(&pci->link); } #if 0