X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=kernel%2Frcupdate.c;h=a66d4d1615f7ff978616c86a350d582cc11ff20f;hb=54561783ee99d73a086f3abbda3e44f87f6bf65b;hp=26bb5ffe1ef14ef61824180dd6163acdc104006d;hpb=5a96c5d0c58ead9a0ece03ffe1c116dea6dafe9c;p=linux-2.6 diff --git a/kernel/rcupdate.c b/kernel/rcupdate.c index 26bb5ffe1e..a66d4d1615 100644 --- a/kernel/rcupdate.c +++ b/kernel/rcupdate.c @@ -45,10 +45,17 @@ #include #include #include -#include #include #include +#ifdef CONFIG_DEBUG_LOCK_ALLOC +static struct lock_class_key rcu_lock_key; +struct lockdep_map rcu_lock_map = + STATIC_LOCKDEP_MAP_INIT("rcu_read_lock", &rcu_lock_key); + +EXPORT_SYMBOL_GPL(rcu_lock_map); +#endif + /* Definition for rcupdate control block. */ static struct rcu_ctrlblk rcu_ctrlblk = { .cur = -300, @@ -235,12 +242,14 @@ static void rcu_do_batch(struct rcu_data *rdp) list = rdp->donelist; while (list) { - next = rdp->donelist = list->next; + next = list->next; + prefetch(next); list->func(list); list = next; if (++count >= rdp->blimit) break; } + rdp->donelist = list; local_irq_disable(); rdp->qlen -= count; @@ -556,9 +565,11 @@ static int __cpuinit rcu_cpu_notify(struct notifier_block *self, long cpu = (long)hcpu; switch (action) { case CPU_UP_PREPARE: + case CPU_UP_PREPARE_FROZEN: rcu_online_cpu(cpu); break; case CPU_DEAD: + case CPU_DEAD_FROZEN: rcu_offline_cpu(cpu); break; default: