From: Paul E. McKenney Date: Wed, 5 Sep 2012 19:09:42 +0000 (-0700) Subject: Merge branches 'bigrt.2012.09.05a', 'doctorture.2012.09.04a', 'fixes.2012.09.04a... X-Git-Tag: next-20120907~29^2~2 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=85d4383f894d8bea2bf8f0c936690ce2a2512735;p=karo-tx-linux.git Merge branches 'bigrt.2012.09.05a', 'doctorture.2012.09.04a', 'fixes.2012.09.04a', 'hotplug.2012.09.04a' and 'idle.2012.09.04a' into HEAD Conflicts: kernel/rcutree.c --- 85d4383f894d8bea2bf8f0c936690ce2a2512735 diff --cc kernel/rcutree.c index d39ad5cff4d1,f280e542e3e9,e705bf217f99,5f8c4dd45ed9,ce41aebd00d1..791aea0d5c95 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c @@@@@@ -320,37 -316,37 -316,8 -316,37 -319,37 +323,8 @@@@@@ static struct rcu_node *rcu_get_root(st return &rsp->node[0]; } -/* - * If the specified CPU is offline, tell the caller that it is in - * a quiescent state. Otherwise, whack it with a reschedule IPI. - * Grace periods can end up waiting on an offline CPU when that - * CPU is in the process of coming online -- it will be added to the - * rcu_node bitmasks before it actually makes it online. The same thing - * can happen while a CPU is in the process of coming online. Because this - * race is quite rare, we check for it after detecting that the grace - * period has been delayed rather than checking each and every CPU - * each and every time we start a new grace period. - */ -static int rcu_implicit_offline_qs(struct rcu_data *rdp) -{ - /* - * If the CPU is offline for more than a jiffy, it is in a quiescent - * state. We can trust its state not to change because interrupts - * are disabled. The reason for the jiffy's worth of slack is to - * handle CPUs initializing on the way up and finding their way - * to the idle loop on the way down. - */ - if (cpu_is_offline(rdp->cpu) && - ULONG_CMP_LT(rdp->rsp->gp_start + 2, jiffies)) { - trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, "ofl"); - rdp->offline_fqs++; - return 1; - } - return 0; -} - /* -- - * If the specified CPU is offline, tell the caller that it is in -- - * a quiescent state. Otherwise, whack it with a reschedule IPI. -- - * Grace periods can end up waiting on an offline CPU when that -- - * CPU is in the process of coming online -- it will be added to the -- - * rcu_node bitmasks before it actually makes it online. The same thing -- - * can happen while a CPU is in the process of coming online. Because this -- - * race is quite rare, we check for it after detecting that the grace -- - * period has been delayed rather than checking each and every CPU -- - * each and every time we start a new grace period. -- - */ -- - static int rcu_implicit_offline_qs(struct rcu_data *rdp) -- - { -- - /* -- - * If the CPU is offline for more than a jiffy, it is in a quiescent -- - * state. We can trust its state not to change because interrupts -- - * are disabled. The reason for the jiffy's worth of slack is to -- - * handle CPUs initializing on the way up and finding their way -- - * to the idle loop on the way down. -- - */ -- - if (cpu_is_offline(rdp->cpu) && -- - ULONG_CMP_LT(rdp->rsp->gp_start + 2, jiffies)) { -- - trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, "ofl"); -- - rdp->offline_fqs++; -- - return 1; -- - } -- - return 0; -- - } -- - -- - /* ---- * rcu_idle_enter_common - inform RCU that current CPU is moving towards idle ++++ * rcu_eqs_enter_common - current CPU is moving towards extended quiescent state * * If the new value of the ->dynticks_nesting counter now is zero, * we really have entered idle, and must do the appropriate accounting. @@@@@@ -448,12 -444,12 -415,13 -444,12 -506,12 +481,13 @@@@@@ void rcu_irq_exit(void if (rdtp->dynticks_nesting) trace_rcu_dyntick("--=", oldval, rdtp->dynticks_nesting); else ---- rcu_idle_enter_common(rdtp, oldval); ++++ rcu_eqs_enter_common(rdtp, oldval, true); local_irq_restore(flags); } ++ ++EXPORT_SYMBOL_GPL(rcu_irq_exit); /* ---- * rcu_idle_exit_common - inform RCU that current CPU is moving away from idle ++++ * rcu_eqs_exit_common - current CPU moving away from extended quiescent state * * If the new value of the ->dynticks_nesting counter was previously zero, * we really have exited idle, and must do the appropriate accounting. @@@@@@ -543,9 -539,9 -511,10 -539,9 -657,9 +633,10 @@@@@@ void rcu_irq_enter(void if (oldval) trace_rcu_dyntick("++=", oldval, rdtp->dynticks_nesting); else ---- rcu_idle_exit_common(rdtp, oldval); ++++ rcu_eqs_exit_common(rdtp, oldval, true); local_irq_restore(flags); } ++ ++EXPORT_SYMBOL_GPL(rcu_irq_enter); /** * rcu_nmi_enter - inform RCU of entry to NMI context