diff options
| author | Ingo Molnar <mingo@kernel.org> | 2012-05-14 02:41:20 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2012-05-14 02:41:46 -0400 |
| commit | 2d84e023cb5ec00403ff5d447533c6fd58fcc7ff (patch) | |
| tree | cb10d9a568ebb4be8593821a6f205efedf2f4ddd /lib | |
| parent | 9ff00d58a915b6747ba2e843ab2d04c712b4dc32 (diff) | |
| parent | dc36be4419311fd57becdf54bfeef6bd04a6741d (diff) | |
Merge branch 'rcu/next' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu into core/rcu
Pull the v3.5 RCU tree from Paul E. McKenney:
1) A set of improvements and fixes to the RCU_FAST_NO_HZ feature
(with more on the way for 3.6). Posted to LKML:
https://lkml.org/lkml/2012/4/23/324 (commits 1-3 and 5),
https://lkml.org/lkml/2012/4/16/611 (commit 4),
https://lkml.org/lkml/2012/4/30/390 (commit 6), and
https://lkml.org/lkml/2012/5/4/410 (commit 7, combined with
the other commits for the convenience of the tester).
2) Changes to make rcu_barrier() avoid disrupting execution of CPUs
that have no RCU callbacks. Posted to LKML:
https://lkml.org/lkml/2012/4/23/322.
3) A couple of commits that improve the efficiency of the interaction
between preemptible RCU and the scheduler, these two being all
that survived an abortive attempt to allow preemptible RCU's
__rcu_read_lock() to be inlined. The full set was posted to
LKML at https://lkml.org/lkml/2012/4/14/143, and the first and
third patches of that set remain.
4) Lai Jiangshan's algorithmic implementation of SRCU, which includes
call_srcu() and srcu_barrier(). A major feature of this new
implementation is that synchronize_srcu() no longer disturbs
the execution of other CPUs. This work is based on earlier
implementations by Peter Zijlstra and Paul E. McKenney. Posted to
LKML: https://lkml.org/lkml/2012/2/22/82.
5) A number of miscellaneous bug fixes and improvements which were
posted to LKML at: https://lkml.org/lkml/2012/4/23/353 with
subsequent updates posted to LKML.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/list_debug.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/list_debug.c b/lib/list_debug.c index 982b850d4e7..3810b481f94 100644 --- a/lib/list_debug.c +++ b/lib/list_debug.c | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <linux/list.h> | 10 | #include <linux/list.h> |
| 11 | #include <linux/bug.h> | 11 | #include <linux/bug.h> |
| 12 | #include <linux/kernel.h> | 12 | #include <linux/kernel.h> |
| 13 | #include <linux/rculist.h> | ||
| 13 | 14 | ||
| 14 | /* | 15 | /* |
| 15 | * Insert a new entry between two known consecutive entries. | 16 | * Insert a new entry between two known consecutive entries. |
| @@ -75,3 +76,24 @@ void list_del(struct list_head *entry) | |||
| 75 | entry->prev = LIST_POISON2; | 76 | entry->prev = LIST_POISON2; |
| 76 | } | 77 | } |
| 77 | EXPORT_SYMBOL(list_del); | 78 | EXPORT_SYMBOL(list_del); |
| 79 | |||
| 80 | /* | ||
| 81 | * RCU variants. | ||
| 82 | */ | ||
| 83 | void __list_add_rcu(struct list_head *new, | ||
| 84 | struct list_head *prev, struct list_head *next) | ||
| 85 | { | ||
| 86 | WARN(next->prev != prev, | ||
| 87 | "list_add_rcu corruption. next->prev should be " | ||
| 88 | "prev (%p), but was %p. (next=%p).\n", | ||
| 89 | prev, next->prev, next); | ||
| 90 | WARN(prev->next != next, | ||
| 91 | "list_add_rcu corruption. prev->next should be " | ||
| 92 | "next (%p), but was %p. (prev=%p).\n", | ||
| 93 | next, prev->next, prev); | ||
| 94 | new->next = next; | ||
| 95 | new->prev = prev; | ||
| 96 | rcu_assign_pointer(list_next_rcu(prev), new); | ||
| 97 | next->prev = new; | ||
| 98 | } | ||
| 99 | EXPORT_SYMBOL(__list_add_rcu); | ||
