diff options
author | Dave Peterson <dsp@llnl.gov> | 2006-03-26 04:38:46 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-03-26 11:57:07 -0500 |
commit | a1d03fcc1399b1e23922bcc3af1772b128aa6e93 (patch) | |
tree | bf6b9895568a5fc0012590941213a28fe8d9af5d /drivers | |
parent | 749ede57443b2a7ede2db105145f21047efcea6a (diff) |
[PATCH] EDAC: edac_mc_add_mc fix [1/2]
This is part 1 of a 2-part patch set. The code changes are split into
two parts to make the patches more readable.
Move complete_mc_list_del() and del_mc_from_global_list() so we can
call del_mc_from_global_list() from edac_mc_add_mc() without forward
declarations. Perhaps using forward declarations would be better?
I'm doing things this way because the rest of the code is missing
them.
Signed-off-by: David S. Peterson <dsp@llnl.gov>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/edac/edac_mc.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/drivers/edac/edac_mc.c b/drivers/edac/edac_mc.c index eac09cc86aac..226d4fdb15fd 100644 --- a/drivers/edac/edac_mc.c +++ b/drivers/edac/edac_mc.c | |||
@@ -1451,6 +1451,24 @@ static int add_mc_to_global_list (struct mem_ctl_info *mci) | |||
1451 | } | 1451 | } |
1452 | 1452 | ||
1453 | 1453 | ||
1454 | static void complete_mc_list_del (struct rcu_head *head) | ||
1455 | { | ||
1456 | struct mem_ctl_info *mci; | ||
1457 | |||
1458 | mci = container_of(head, struct mem_ctl_info, rcu); | ||
1459 | INIT_LIST_HEAD(&mci->link); | ||
1460 | complete(&mci->complete); | ||
1461 | } | ||
1462 | |||
1463 | |||
1464 | static void del_mc_from_global_list (struct mem_ctl_info *mci) | ||
1465 | { | ||
1466 | list_del_rcu(&mci->link); | ||
1467 | init_completion(&mci->complete); | ||
1468 | call_rcu(&mci->rcu, complete_mc_list_del); | ||
1469 | wait_for_completion(&mci->complete); | ||
1470 | } | ||
1471 | |||
1454 | 1472 | ||
1455 | EXPORT_SYMBOL(edac_mc_add_mc); | 1473 | EXPORT_SYMBOL(edac_mc_add_mc); |
1456 | 1474 | ||
@@ -1511,24 +1529,6 @@ finish: | |||
1511 | } | 1529 | } |
1512 | 1530 | ||
1513 | 1531 | ||
1514 | |||
1515 | static void complete_mc_list_del (struct rcu_head *head) | ||
1516 | { | ||
1517 | struct mem_ctl_info *mci; | ||
1518 | |||
1519 | mci = container_of(head, struct mem_ctl_info, rcu); | ||
1520 | INIT_LIST_HEAD(&mci->link); | ||
1521 | complete(&mci->complete); | ||
1522 | } | ||
1523 | |||
1524 | static void del_mc_from_global_list (struct mem_ctl_info *mci) | ||
1525 | { | ||
1526 | list_del_rcu(&mci->link); | ||
1527 | init_completion(&mci->complete); | ||
1528 | call_rcu(&mci->rcu, complete_mc_list_del); | ||
1529 | wait_for_completion(&mci->complete); | ||
1530 | } | ||
1531 | |||
1532 | EXPORT_SYMBOL(edac_mc_del_mc); | 1532 | EXPORT_SYMBOL(edac_mc_del_mc); |
1533 | 1533 | ||
1534 | /** | 1534 | /** |