<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/kernel/rcutree.h, branch v3.2.73</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>rcu: Remove rcu_needs_cpu_flush() to avoid false quiescent states</title>
<updated>2011-09-29T04:38:48+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2011-08-21T01:29:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=e90c53d3e238dd0b7b02964370e8fece1778df96'/>
<id>e90c53d3e238dd0b7b02964370e8fece1778df96</id>
<content type='text'>
The purpose of rcu_needs_cpu_flush() was to iterate on pushing the
current grace period in order to help the current CPU enter dyntick-idle
mode.  However, this can result in failures if the CPU starts entering
dyntick-idle mode, but then backs out.  In this case, the call to
rcu_pending() from rcu_needs_cpu_flush() might end up announcing a
non-existing quiescent state.

This commit therefore removes rcu_needs_cpu_flush() in favor of letting
the dyntick-idle machinery at the end of the softirq handler push the
loop along via its call to rcu_pending().

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The purpose of rcu_needs_cpu_flush() was to iterate on pushing the
current grace period in order to help the current CPU enter dyntick-idle
mode.  However, this can result in failures if the CPU starts entering
dyntick-idle mode, but then backs out.  In this case, the call to
rcu_pending() from rcu_needs_cpu_flush() might end up announcing a
non-existing quiescent state.

This commit therefore removes rcu_needs_cpu_flush() in favor of letting
the dyntick-idle machinery at the end of the softirq handler push the
loop along via its call to rcu_pending().

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Suppress NMI backtraces when stall ends before dump</title>
<updated>2011-09-29T04:38:41+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2011-08-13T20:31:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=9bc8b5586f94be6391458074ecbba8827ba8ba9d'/>
<id>9bc8b5586f94be6391458074ecbba8827ba8ba9d</id>
<content type='text'>
It is possible for an RCU CPU stall to end just as it is detected, in
which case the current code will uselessly dump all CPU's stacks.
This commit therefore checks for this condition and refrains from
sending needless NMIs.

And yes, the stall might also end just after we checked all CPUs and
tasks, but in that case we would at least have given some clue as
to which CPU/task was at fault.

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It is possible for an RCU CPU stall to end just as it is detected, in
which case the current code will uselessly dump all CPU's stacks.
This commit therefore checks for this condition and refrains from
sending needless NMIs.

And yes, the stall might also end just after we checked all CPUs and
tasks, but in that case we would at least have given some clue as
to which CPU/task was at fault.

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Simplify quiescent-state accounting</title>
<updated>2011-09-29T04:38:22+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paul.mckenney@linaro.org</email>
</author>
<published>2011-06-27T07:17:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=e4cc1f22b2f4e9b0207a8cdb63e56dcf99e82d35'/>
<id>e4cc1f22b2f4e9b0207a8cdb63e56dcf99e82d35</id>
<content type='text'>
There is often a delay between the time that a CPU passes through a
quiescent state and the time that this quiescent state is reported to the
RCU core.  It is quite possible that the grace period ended before the
quiescent state could be reported, for example, some other CPU might have
deduced that this CPU passed through dyntick-idle mode.  It is critically
important that quiescent state be counted only against the grace period
that was in effect at the time that the quiescent state was detected.

Previously, this was handled by recording the number of the last grace
period to complete when passing through a quiescent state.  The RCU
core then checks this number against the current value, and rejects
the quiescent state if there is a mismatch.  However, one additional
possibility must be accounted for, namely that the quiescent state was
recorded after the prior grace period completed but before the current
grace period started.  In this case, the RCU core must reject the
quiescent state, but the recorded number will match.  This is handled
when the CPU becomes aware of a new grace period -- at that point,
it invalidates any prior quiescent state.

This works, but is a bit indirect.  The new approach records the current
grace period, and the RCU core checks to see (1) that this is still the
current grace period and (2) that this grace period has not yet ended.
This approach simplifies reasoning about correctness, and this commit
changes over to this new approach.

Signed-off-by: Paul E. McKenney &lt;paul.mckenney@linaro.org&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
There is often a delay between the time that a CPU passes through a
quiescent state and the time that this quiescent state is reported to the
RCU core.  It is quite possible that the grace period ended before the
quiescent state could be reported, for example, some other CPU might have
deduced that this CPU passed through dyntick-idle mode.  It is critically
important that quiescent state be counted only against the grace period
that was in effect at the time that the quiescent state was detected.

Previously, this was handled by recording the number of the last grace
period to complete when passing through a quiescent state.  The RCU
core then checks this number against the current value, and rejects
the quiescent state if there is a mismatch.  However, one additional
possibility must be accounted for, namely that the quiescent state was
recorded after the prior grace period completed but before the current
grace period started.  In this case, the RCU core must reject the
quiescent state, but the recorded number will match.  This is handled
when the CPU becomes aware of a new grace period -- at that point,
it invalidates any prior quiescent state.

This works, but is a bit indirect.  The new approach records the current
grace period, and the RCU core checks to see (1) that this is still the
current grace period and (2) that this grace period has not yet ended.
This approach simplifies reasoning about correctness, and this commit
changes over to this new approach.

Signed-off-by: Paul E. McKenney &lt;paul.mckenney@linaro.org&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Add grace-period, quiescent-state, and call_rcu trace events</title>
<updated>2011-09-29T04:38:21+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paul.mckenney@linaro.org</email>
</author>
<published>2011-06-25T13:36:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=d4c08f2ac311a360230eef7e5395b0ec8d8f0670'/>
<id>d4c08f2ac311a360230eef7e5395b0ec8d8f0670</id>
<content type='text'>
Add trace events to record grace-period start and end, quiescent states,
CPUs noticing grace-period start and end, grace-period initialization,
call_rcu() invocation, tasks blocking in RCU read-side critical sections,
tasks exiting those same critical sections, force_quiescent_state()
detection of dyntick-idle and offline CPUs, CPUs entering and leaving
dyntick-idle mode (except from NMIs), CPUs coming online and going
offline, and CPUs being kicked for staying in dyntick-idle mode for too
long (as in many weeks, even on 32-bit systems).

Signed-off-by: Paul E. McKenney &lt;paul.mckenney@linaro.org&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;

rcu: Add the rcu flavor to callback trace events

The earlier trace events for registering RCU callbacks and for invoking
them did not include the RCU flavor (rcu_bh, rcu_preempt, or rcu_sched).
This commit adds the RCU flavor to those trace events.

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add trace events to record grace-period start and end, quiescent states,
CPUs noticing grace-period start and end, grace-period initialization,
call_rcu() invocation, tasks blocking in RCU read-side critical sections,
tasks exiting those same critical sections, force_quiescent_state()
detection of dyntick-idle and offline CPUs, CPUs entering and leaving
dyntick-idle mode (except from NMIs), CPUs coming online and going
offline, and CPUs being kicked for staying in dyntick-idle mode for too
long (as in many weeks, even on 32-bit systems).

Signed-off-by: Paul E. McKenney &lt;paul.mckenney@linaro.org&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;

rcu: Add the rcu flavor to callback trace events

The earlier trace events for registering RCU callbacks and for invoking
them did not include the RCU flavor (rcu_bh, rcu_preempt, or rcu_sched).
This commit adds the RCU flavor to those trace events.

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Move RCU_BOOST declarations to allow compiler checking</title>
<updated>2011-09-29T04:38:18+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paul.mckenney@linaro.org</email>
</author>
<published>2011-06-21T08:59:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=eab0993c7ba5c7d9b3613d6037e0f31f0ccbe181'/>
<id>eab0993c7ba5c7d9b3613d6037e0f31f0ccbe181</id>
<content type='text'>
Andi Kleen noticed that one of the RCU_BOOST data declarations was
out of sync with the definition.  Move the declarations so that the
compiler can do the checking in the future.

Signed-off-by: Paul E. McKenney &lt;paul.mckenney@linaro.org&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Andi Kleen noticed that one of the RCU_BOOST data declarations was
out of sync with the definition.  Move the declarations so that the
compiler can do the checking in the future.

Signed-off-by: Paul E. McKenney &lt;paul.mckenney@linaro.org&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Move RCU_BOOST #ifdefs to header file</title>
<updated>2011-06-16T23:12:05+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paul.mckenney@linaro.org</email>
</author>
<published>2011-06-16T15:26:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=f8b7fc6b514f34a51875dd48dff70d4d17a54f38'/>
<id>f8b7fc6b514f34a51875dd48dff70d4d17a54f38</id>
<content type='text'>
The commit "use softirq instead of kthreads except when RCU_BOOST=y"
just applied #ifdef in place.  This commit is a cleanup that moves
the newly #ifdef'ed code to the header file kernel/rcutree_plugin.h.

Signed-off-by: Paul E. McKenney &lt;paul.mckenney@linaro.org&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The commit "use softirq instead of kthreads except when RCU_BOOST=y"
just applied #ifdef in place.  This commit is a cleanup that moves
the newly #ifdef'ed code to the header file kernel/rcutree_plugin.h.

Signed-off-by: Paul E. McKenney &lt;paul.mckenney@linaro.org&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: use softirq instead of kthreads except when RCU_BOOST=y</title>
<updated>2011-06-16T06:07:21+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2011-06-15T22:47:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=a46e0899eec7a3069bcadd45dfba7bf67c6ed016'/>
<id>a46e0899eec7a3069bcadd45dfba7bf67c6ed016</id>
<content type='text'>
This patch #ifdefs RCU kthreads out of the kernel unless RCU_BOOST=y,
thus eliminating context-switch overhead if RCU priority boosting has
not been configured.

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch #ifdefs RCU kthreads out of the kernel unless RCU_BOOST=y,
thus eliminating context-switch overhead if RCU priority boosting has
not been configured.

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Use softirq to address performance regression</title>
<updated>2011-06-14T22:25:39+00:00</updated>
<author>
<name>Shaohua Li</name>
<email>shaohua.li@intel.com</email>
</author>
<published>2011-06-14T05:26:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=09223371deac67d08ca0b70bd18787920284c967'/>
<id>09223371deac67d08ca0b70bd18787920284c967</id>
<content type='text'>
Commit a26ac2455ffcf3(rcu: move TREE_RCU from softirq to kthread)
introduced performance regression. In an AIM7 test, this commit degraded
performance by about 40%.

The commit runs rcu callbacks in a kthread instead of softirq. We observed
high rate of context switch which is caused by this. Out test system has
64 CPUs and HZ is 1000, so we saw more than 64k context switch per second
which is caused by RCU's per-CPU kthread.  A trace showed that most of
the time the RCU per-CPU kthread doesn't actually handle any callbacks,
but instead just does a very small amount of work handling grace periods.
This means that RCU's per-CPU kthreads are making the scheduler do quite
a bit of work in order to allow a very small amount of RCU-related
processing to be done.

Alex Shi's analysis determined that this slowdown is due to lock
contention within the scheduler.  Unfortunately, as Peter Zijlstra points
out, the scheduler's real-time semantics require global action, which
means that this contention is inherent in real-time scheduling.  (Yes,
perhaps someone will come up with a workaround -- otherwise, -rt is not
going to do well on large SMP systems -- but this patch will work around
this issue in the meantime.  And "the meantime" might well be forever.)

This patch therefore re-introduces softirq processing to RCU, but only
for core RCU work.  RCU callbacks are still executed in kthread context,
so that only a small amount of RCU work runs in softirq context in the
common case.  This should minimize ksoftirqd execution, allowing us to
skip boosting of ksoftirqd for CONFIG_RCU_BOOST=y kernels.

Signed-off-by: Shaohua Li &lt;shaohua.li@intel.com&gt;
Tested-by: "Alex,Shi" &lt;alex.shi@intel.com&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Commit a26ac2455ffcf3(rcu: move TREE_RCU from softirq to kthread)
introduced performance regression. In an AIM7 test, this commit degraded
performance by about 40%.

The commit runs rcu callbacks in a kthread instead of softirq. We observed
high rate of context switch which is caused by this. Out test system has
64 CPUs and HZ is 1000, so we saw more than 64k context switch per second
which is caused by RCU's per-CPU kthread.  A trace showed that most of
the time the RCU per-CPU kthread doesn't actually handle any callbacks,
but instead just does a very small amount of work handling grace periods.
This means that RCU's per-CPU kthreads are making the scheduler do quite
a bit of work in order to allow a very small amount of RCU-related
processing to be done.

Alex Shi's analysis determined that this slowdown is due to lock
contention within the scheduler.  Unfortunately, as Peter Zijlstra points
out, the scheduler's real-time semantics require global action, which
means that this contention is inherent in real-time scheduling.  (Yes,
perhaps someone will come up with a workaround -- otherwise, -rt is not
going to do well on large SMP systems -- but this patch will work around
this issue in the meantime.  And "the meantime" might well be forever.)

This patch therefore re-introduces softirq processing to RCU, but only
for core RCU work.  RCU callbacks are still executed in kthread context,
so that only a small amount of RCU work runs in softirq context in the
common case.  This should minimize ksoftirqd execution, allowing us to
skip boosting of ksoftirqd for CONFIG_RCU_BOOST=y kernels.

Signed-off-by: Shaohua Li &lt;shaohua.li@intel.com&gt;
Tested-by: "Alex,Shi" &lt;alex.shi@intel.com&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Remove waitqueue usage for cpu, node, and boost kthreads</title>
<updated>2011-05-28T15:41:52+00:00</updated>
<author>
<name>Peter Zijlstra</name>
<email>a.p.zijlstra@chello.nl</email>
</author>
<published>2011-05-20T23:06:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=08bca60a6912ad225254250c0a9c3a05b4152cfa'/>
<id>08bca60a6912ad225254250c0a9c3a05b4152cfa</id>
<content type='text'>
It is not necessary to use waitqueues for the RCU kthreads because
we always know exactly which thread is to be awakened.  In addition,
wake_up() only issues an actual wakeup when there is a thread waiting on
the queue, which was why there was an extra explicit wake_up_process()
to get the RCU kthreads started.

Eliminating the waitqueues (and wake_up()) in favor of wake_up_process()
eliminates the need for the initial wake_up_process() and also shrinks
the data structure size a bit.  The wakeup logic is placed in a new
rcu_wait() macro.

Signed-off-by: Peter Zijlstra &lt;a.p.zijlstra@chello.nl&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Signed-off-by: Ingo Molnar &lt;mingo@elte.hu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
It is not necessary to use waitqueues for the RCU kthreads because
we always know exactly which thread is to be awakened.  In addition,
wake_up() only issues an actual wakeup when there is a thread waiting on
the queue, which was why there was an extra explicit wake_up_process()
to get the RCU kthreads started.

Eliminating the waitqueues (and wake_up()) in favor of wake_up_process()
eliminates the need for the initial wake_up_process() and also shrinks
the data structure size a bit.  The wakeup logic is placed in a new
rcu_wait() macro.

Signed-off-by: Peter Zijlstra &lt;a.p.zijlstra@chello.nl&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Signed-off-by: Ingo Molnar &lt;mingo@elte.hu&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>rcu: Avoid acquiring rcu_node locks in timer functions</title>
<updated>2011-05-28T15:41:49+00:00</updated>
<author>
<name>Paul E. McKenney</name>
<email>paul.mckenney@linaro.org</email>
</author>
<published>2011-05-11T12:41:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=8826f3b0397562eee6f8785d548be9dfdb169100'/>
<id>8826f3b0397562eee6f8785d548be9dfdb169100</id>
<content type='text'>
This commit switches manipulations of the rcu_node -&gt;wakemask field
to atomic operations, which allows rcu_cpu_kthread_timer() to avoid
acquiring the rcu_node lock.  This should avoid the following lockdep
splat reported by Valdis Kletnieks:

[   12.872150] usb 1-4: new high speed USB device number 3 using ehci_hcd
[   12.986667] usb 1-4: New USB device found, idVendor=413c, idProduct=2513
[   12.986679] usb 1-4: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[   12.987691] hub 1-4:1.0: USB hub found
[   12.987877] hub 1-4:1.0: 3 ports detected
[   12.996372] input: PS/2 Generic Mouse as /devices/platform/i8042/serio1/input/input10
[   13.071471] udevadm used greatest stack depth: 3984 bytes left
[   13.172129]
[   13.172130] =======================================================
[   13.172425] [ INFO: possible circular locking dependency detected ]
[   13.172650] 2.6.39-rc6-mmotm0506 #1
[   13.172773] -------------------------------------------------------
[   13.172997] blkid/267 is trying to acquire lock:
[   13.173009]  (&amp;p-&gt;pi_lock){-.-.-.}, at: [&lt;ffffffff81032d8f&gt;] try_to_wake_up+0x29/0x1aa
[   13.173009]
[   13.173009] but task is already holding lock:
[   13.173009]  (rcu_node_level_0){..-...}, at: [&lt;ffffffff810901cc&gt;] rcu_cpu_kthread_timer+0x27/0x58
[   13.173009]
[   13.173009] which lock already depends on the new lock.
[   13.173009]
[   13.173009]
[   13.173009] the existing dependency chain (in reverse order) is:
[   13.173009]
[   13.173009] -&gt; #2 (rcu_node_level_0){..-...}:
[   13.173009]        [&lt;ffffffff810679b9&gt;] check_prevs_add+0x8b/0x104
[   13.173009]        [&lt;ffffffff81067da1&gt;] validate_chain+0x36f/0x3ab
[   13.173009]        [&lt;ffffffff8106846b&gt;] __lock_acquire+0x369/0x3e2
[   13.173009]        [&lt;ffffffff81068a0f&gt;] lock_acquire+0xfc/0x14c
[   13.173009]        [&lt;ffffffff815697f1&gt;] _raw_spin_lock+0x36/0x45
[   13.173009]        [&lt;ffffffff81090794&gt;] rcu_read_unlock_special+0x8c/0x1d5
[   13.173009]        [&lt;ffffffff8109092c&gt;] __rcu_read_unlock+0x4f/0xd7
[   13.173009]        [&lt;ffffffff81027bd3&gt;] rcu_read_unlock+0x21/0x23
[   13.173009]        [&lt;ffffffff8102cc34&gt;] cpuacct_charge+0x6c/0x75
[   13.173009]        [&lt;ffffffff81030cc6&gt;] update_curr+0x101/0x12e
[   13.173009]        [&lt;ffffffff810311d0&gt;] check_preempt_wakeup+0xf7/0x23b
[   13.173009]        [&lt;ffffffff8102acb3&gt;] check_preempt_curr+0x2b/0x68
[   13.173009]        [&lt;ffffffff81031d40&gt;] ttwu_do_wakeup+0x76/0x128
[   13.173009]        [&lt;ffffffff81031e49&gt;] ttwu_do_activate.constprop.63+0x57/0x5c
[   13.173009]        [&lt;ffffffff81031e96&gt;] scheduler_ipi+0x48/0x5d
[   13.173009]        [&lt;ffffffff810177d5&gt;] smp_reschedule_interrupt+0x16/0x18
[   13.173009]        [&lt;ffffffff815710f3&gt;] reschedule_interrupt+0x13/0x20
[   13.173009]        [&lt;ffffffff810b66d1&gt;] rcu_read_unlock+0x21/0x23
[   13.173009]        [&lt;ffffffff810b739c&gt;] find_get_page+0xa9/0xb9
[   13.173009]        [&lt;ffffffff810b8b48&gt;] filemap_fault+0x6a/0x34d
[   13.173009]        [&lt;ffffffff810d1a25&gt;] __do_fault+0x54/0x3e6
[   13.173009]        [&lt;ffffffff810d447a&gt;] handle_pte_fault+0x12c/0x1ed
[   13.173009]        [&lt;ffffffff810d48f7&gt;] handle_mm_fault+0x1cd/0x1e0
[   13.173009]        [&lt;ffffffff8156cfee&gt;] do_page_fault+0x42d/0x5de
[   13.173009]        [&lt;ffffffff8156a75f&gt;] page_fault+0x1f/0x30
[   13.173009]
[   13.173009] -&gt; #1 (&amp;rq-&gt;lock){-.-.-.}:
[   13.173009]        [&lt;ffffffff810679b9&gt;] check_prevs_add+0x8b/0x104
[   13.173009]        [&lt;ffffffff81067da1&gt;] validate_chain+0x36f/0x3ab
[   13.173009]        [&lt;ffffffff8106846b&gt;] __lock_acquire+0x369/0x3e2
[   13.173009]        [&lt;ffffffff81068a0f&gt;] lock_acquire+0xfc/0x14c
[   13.173009]        [&lt;ffffffff815697f1&gt;] _raw_spin_lock+0x36/0x45
[   13.173009]        [&lt;ffffffff81027e19&gt;] __task_rq_lock+0x8b/0xd3
[   13.173009]        [&lt;ffffffff81032f7f&gt;] wake_up_new_task+0x41/0x108
[   13.173009]        [&lt;ffffffff810376c3&gt;] do_fork+0x265/0x33f
[   13.173009]        [&lt;ffffffff81007d02&gt;] kernel_thread+0x6b/0x6d
[   13.173009]        [&lt;ffffffff8153a9dd&gt;] rest_init+0x21/0xd2
[   13.173009]        [&lt;ffffffff81b1db4f&gt;] start_kernel+0x3bb/0x3c6
[   13.173009]        [&lt;ffffffff81b1d29f&gt;] x86_64_start_reservations+0xaf/0xb3
[   13.173009]        [&lt;ffffffff81b1d393&gt;] x86_64_start_kernel+0xf0/0xf7
[   13.173009]
[   13.173009] -&gt; #0 (&amp;p-&gt;pi_lock){-.-.-.}:
[   13.173009]        [&lt;ffffffff81067788&gt;] check_prev_add+0x68/0x20e
[   13.173009]        [&lt;ffffffff810679b9&gt;] check_prevs_add+0x8b/0x104
[   13.173009]        [&lt;ffffffff81067da1&gt;] validate_chain+0x36f/0x3ab
[   13.173009]        [&lt;ffffffff8106846b&gt;] __lock_acquire+0x369/0x3e2
[   13.173009]        [&lt;ffffffff81068a0f&gt;] lock_acquire+0xfc/0x14c
[   13.173009]        [&lt;ffffffff815698ea&gt;] _raw_spin_lock_irqsave+0x44/0x57
[   13.173009]        [&lt;ffffffff81032d8f&gt;] try_to_wake_up+0x29/0x1aa
[   13.173009]        [&lt;ffffffff81032f3c&gt;] wake_up_process+0x10/0x12
[   13.173009]        [&lt;ffffffff810901e9&gt;] rcu_cpu_kthread_timer+0x44/0x58
[   13.173009]        [&lt;ffffffff81045286&gt;] call_timer_fn+0xac/0x1e9
[   13.173009]        [&lt;ffffffff8104556d&gt;] run_timer_softirq+0x1aa/0x1f2
[   13.173009]        [&lt;ffffffff8103e487&gt;] __do_softirq+0x109/0x26a
[   13.173009]        [&lt;ffffffff8157144c&gt;] call_softirq+0x1c/0x30
[   13.173009]        [&lt;ffffffff81003207&gt;] do_softirq+0x44/0xf1
[   13.173009]        [&lt;ffffffff8103e8b9&gt;] irq_exit+0x58/0xc8
[   13.173009]        [&lt;ffffffff81017f5a&gt;] smp_apic_timer_interrupt+0x79/0x87
[   13.173009]        [&lt;ffffffff81570fd3&gt;] apic_timer_interrupt+0x13/0x20
[   13.173009]        [&lt;ffffffff810bd51a&gt;] get_page_from_freelist+0x2aa/0x310
[   13.173009]        [&lt;ffffffff810bdf03&gt;] __alloc_pages_nodemask+0x178/0x243
[   13.173009]        [&lt;ffffffff8101fe2f&gt;] pte_alloc_one+0x1e/0x3a
[   13.173009]        [&lt;ffffffff810d27fe&gt;] __pte_alloc+0x22/0x14b
[   13.173009]        [&lt;ffffffff810d48a8&gt;] handle_mm_fault+0x17e/0x1e0
[   13.173009]        [&lt;ffffffff8156cfee&gt;] do_page_fault+0x42d/0x5de
[   13.173009]        [&lt;ffffffff8156a75f&gt;] page_fault+0x1f/0x30
[   13.173009]
[   13.173009] other info that might help us debug this:
[   13.173009]
[   13.173009] Chain exists of:
[   13.173009]   &amp;p-&gt;pi_lock --&gt; &amp;rq-&gt;lock --&gt; rcu_node_level_0
[   13.173009]
[   13.173009]  Possible unsafe locking scenario:
[   13.173009]
[   13.173009]        CPU0                    CPU1
[   13.173009]        ----                    ----
[   13.173009]   lock(rcu_node_level_0);
[   13.173009]                                lock(&amp;rq-&gt;lock);
[   13.173009]                                lock(rcu_node_level_0);
[   13.173009]   lock(&amp;p-&gt;pi_lock);
[   13.173009]
[   13.173009]  *** DEADLOCK ***
[   13.173009]
[   13.173009] 3 locks held by blkid/267:
[   13.173009]  #0:  (&amp;mm-&gt;mmap_sem){++++++}, at: [&lt;ffffffff8156cdb4&gt;] do_page_fault+0x1f3/0x5de
[   13.173009]  #1:  (&amp;yield_timer){+.-...}, at: [&lt;ffffffff810451da&gt;] call_timer_fn+0x0/0x1e9
[   13.173009]  #2:  (rcu_node_level_0){..-...}, at: [&lt;ffffffff810901cc&gt;] rcu_cpu_kthread_timer+0x27/0x58
[   13.173009]
[   13.173009] stack backtrace:
[   13.173009] Pid: 267, comm: blkid Not tainted 2.6.39-rc6-mmotm0506 #1
[   13.173009] Call Trace:
[   13.173009]  &lt;IRQ&gt;  [&lt;ffffffff8154a529&gt;] print_circular_bug+0xc8/0xd9
[   13.173009]  [&lt;ffffffff81067788&gt;] check_prev_add+0x68/0x20e
[   13.173009]  [&lt;ffffffff8100c861&gt;] ? save_stack_trace+0x28/0x46
[   13.173009]  [&lt;ffffffff810679b9&gt;] check_prevs_add+0x8b/0x104
[   13.173009]  [&lt;ffffffff81067da1&gt;] validate_chain+0x36f/0x3ab
[   13.173009]  [&lt;ffffffff8106846b&gt;] __lock_acquire+0x369/0x3e2
[   13.173009]  [&lt;ffffffff81032d8f&gt;] ? try_to_wake_up+0x29/0x1aa
[   13.173009]  [&lt;ffffffff81068a0f&gt;] lock_acquire+0xfc/0x14c
[   13.173009]  [&lt;ffffffff81032d8f&gt;] ? try_to_wake_up+0x29/0x1aa
[   13.173009]  [&lt;ffffffff810901a5&gt;] ? rcu_check_quiescent_state+0x82/0x82
[   13.173009]  [&lt;ffffffff815698ea&gt;] _raw_spin_lock_irqsave+0x44/0x57
[   13.173009]  [&lt;ffffffff81032d8f&gt;] ? try_to_wake_up+0x29/0x1aa
[   13.173009]  [&lt;ffffffff81032d8f&gt;] try_to_wake_up+0x29/0x1aa
[   13.173009]  [&lt;ffffffff810901a5&gt;] ? rcu_check_quiescent_state+0x82/0x82
[   13.173009]  [&lt;ffffffff81032f3c&gt;] wake_up_process+0x10/0x12
[   13.173009]  [&lt;ffffffff810901e9&gt;] rcu_cpu_kthread_timer+0x44/0x58
[   13.173009]  [&lt;ffffffff810901a5&gt;] ? rcu_check_quiescent_state+0x82/0x82
[   13.173009]  [&lt;ffffffff81045286&gt;] call_timer_fn+0xac/0x1e9
[   13.173009]  [&lt;ffffffff810451da&gt;] ? del_timer+0x75/0x75
[   13.173009]  [&lt;ffffffff810901a5&gt;] ? rcu_check_quiescent_state+0x82/0x82
[   13.173009]  [&lt;ffffffff8104556d&gt;] run_timer_softirq+0x1aa/0x1f2
[   13.173009]  [&lt;ffffffff8103e487&gt;] __do_softirq+0x109/0x26a
[   13.173009]  [&lt;ffffffff8106365f&gt;] ? tick_dev_program_event+0x37/0xf6
[   13.173009]  [&lt;ffffffff810a0e4a&gt;] ? time_hardirqs_off+0x1b/0x2f
[   13.173009]  [&lt;ffffffff8157144c&gt;] call_softirq+0x1c/0x30
[   13.173009]  [&lt;ffffffff81003207&gt;] do_softirq+0x44/0xf1
[   13.173009]  [&lt;ffffffff8103e8b9&gt;] irq_exit+0x58/0xc8
[   13.173009]  [&lt;ffffffff81017f5a&gt;] smp_apic_timer_interrupt+0x79/0x87
[   13.173009]  [&lt;ffffffff81570fd3&gt;] apic_timer_interrupt+0x13/0x20
[   13.173009]  &lt;EOI&gt;  [&lt;ffffffff810bd384&gt;] ? get_page_from_freelist+0x114/0x310
[   13.173009]  [&lt;ffffffff810bd51a&gt;] ? get_page_from_freelist+0x2aa/0x310
[   13.173009]  [&lt;ffffffff812220e7&gt;] ? clear_page_c+0x7/0x10
[   13.173009]  [&lt;ffffffff810bd1ef&gt;] ? prep_new_page+0x14c/0x1cd
[   13.173009]  [&lt;ffffffff810bd51a&gt;] get_page_from_freelist+0x2aa/0x310
[   13.173009]  [&lt;ffffffff810bdf03&gt;] __alloc_pages_nodemask+0x178/0x243
[   13.173009]  [&lt;ffffffff810d46b9&gt;] ? __pmd_alloc+0x87/0x99
[   13.173009]  [&lt;ffffffff8101fe2f&gt;] pte_alloc_one+0x1e/0x3a
[   13.173009]  [&lt;ffffffff810d46b9&gt;] ? __pmd_alloc+0x87/0x99
[   13.173009]  [&lt;ffffffff810d27fe&gt;] __pte_alloc+0x22/0x14b
[   13.173009]  [&lt;ffffffff810d48a8&gt;] handle_mm_fault+0x17e/0x1e0
[   13.173009]  [&lt;ffffffff8156cfee&gt;] do_page_fault+0x42d/0x5de
[   13.173009]  [&lt;ffffffff810d915f&gt;] ? sys_brk+0x32/0x10c
[   13.173009]  [&lt;ffffffff810a0e4a&gt;] ? time_hardirqs_off+0x1b/0x2f
[   13.173009]  [&lt;ffffffff81065c4f&gt;] ? trace_hardirqs_off_caller+0x3f/0x9c
[   13.173009]  [&lt;ffffffff812235dd&gt;] ? trace_hardirqs_off_thunk+0x3a/0x3c
[   13.173009]  [&lt;ffffffff8156a75f&gt;] page_fault+0x1f/0x30
[   14.010075] usb 5-1: new full speed USB device number 2 using uhci_hcd

Reported-by: Valdis Kletnieks &lt;Valdis.Kletnieks@vt.edu&gt;
Signed-off-by: Paul E. McKenney &lt;paul.mckenney@linaro.org&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Signed-off-by: Ingo Molnar &lt;mingo@elte.hu&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This commit switches manipulations of the rcu_node -&gt;wakemask field
to atomic operations, which allows rcu_cpu_kthread_timer() to avoid
acquiring the rcu_node lock.  This should avoid the following lockdep
splat reported by Valdis Kletnieks:

[   12.872150] usb 1-4: new high speed USB device number 3 using ehci_hcd
[   12.986667] usb 1-4: New USB device found, idVendor=413c, idProduct=2513
[   12.986679] usb 1-4: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[   12.987691] hub 1-4:1.0: USB hub found
[   12.987877] hub 1-4:1.0: 3 ports detected
[   12.996372] input: PS/2 Generic Mouse as /devices/platform/i8042/serio1/input/input10
[   13.071471] udevadm used greatest stack depth: 3984 bytes left
[   13.172129]
[   13.172130] =======================================================
[   13.172425] [ INFO: possible circular locking dependency detected ]
[   13.172650] 2.6.39-rc6-mmotm0506 #1
[   13.172773] -------------------------------------------------------
[   13.172997] blkid/267 is trying to acquire lock:
[   13.173009]  (&amp;p-&gt;pi_lock){-.-.-.}, at: [&lt;ffffffff81032d8f&gt;] try_to_wake_up+0x29/0x1aa
[   13.173009]
[   13.173009] but task is already holding lock:
[   13.173009]  (rcu_node_level_0){..-...}, at: [&lt;ffffffff810901cc&gt;] rcu_cpu_kthread_timer+0x27/0x58
[   13.173009]
[   13.173009] which lock already depends on the new lock.
[   13.173009]
[   13.173009]
[   13.173009] the existing dependency chain (in reverse order) is:
[   13.173009]
[   13.173009] -&gt; #2 (rcu_node_level_0){..-...}:
[   13.173009]        [&lt;ffffffff810679b9&gt;] check_prevs_add+0x8b/0x104
[   13.173009]        [&lt;ffffffff81067da1&gt;] validate_chain+0x36f/0x3ab
[   13.173009]        [&lt;ffffffff8106846b&gt;] __lock_acquire+0x369/0x3e2
[   13.173009]        [&lt;ffffffff81068a0f&gt;] lock_acquire+0xfc/0x14c
[   13.173009]        [&lt;ffffffff815697f1&gt;] _raw_spin_lock+0x36/0x45
[   13.173009]        [&lt;ffffffff81090794&gt;] rcu_read_unlock_special+0x8c/0x1d5
[   13.173009]        [&lt;ffffffff8109092c&gt;] __rcu_read_unlock+0x4f/0xd7
[   13.173009]        [&lt;ffffffff81027bd3&gt;] rcu_read_unlock+0x21/0x23
[   13.173009]        [&lt;ffffffff8102cc34&gt;] cpuacct_charge+0x6c/0x75
[   13.173009]        [&lt;ffffffff81030cc6&gt;] update_curr+0x101/0x12e
[   13.173009]        [&lt;ffffffff810311d0&gt;] check_preempt_wakeup+0xf7/0x23b
[   13.173009]        [&lt;ffffffff8102acb3&gt;] check_preempt_curr+0x2b/0x68
[   13.173009]        [&lt;ffffffff81031d40&gt;] ttwu_do_wakeup+0x76/0x128
[   13.173009]        [&lt;ffffffff81031e49&gt;] ttwu_do_activate.constprop.63+0x57/0x5c
[   13.173009]        [&lt;ffffffff81031e96&gt;] scheduler_ipi+0x48/0x5d
[   13.173009]        [&lt;ffffffff810177d5&gt;] smp_reschedule_interrupt+0x16/0x18
[   13.173009]        [&lt;ffffffff815710f3&gt;] reschedule_interrupt+0x13/0x20
[   13.173009]        [&lt;ffffffff810b66d1&gt;] rcu_read_unlock+0x21/0x23
[   13.173009]        [&lt;ffffffff810b739c&gt;] find_get_page+0xa9/0xb9
[   13.173009]        [&lt;ffffffff810b8b48&gt;] filemap_fault+0x6a/0x34d
[   13.173009]        [&lt;ffffffff810d1a25&gt;] __do_fault+0x54/0x3e6
[   13.173009]        [&lt;ffffffff810d447a&gt;] handle_pte_fault+0x12c/0x1ed
[   13.173009]        [&lt;ffffffff810d48f7&gt;] handle_mm_fault+0x1cd/0x1e0
[   13.173009]        [&lt;ffffffff8156cfee&gt;] do_page_fault+0x42d/0x5de
[   13.173009]        [&lt;ffffffff8156a75f&gt;] page_fault+0x1f/0x30
[   13.173009]
[   13.173009] -&gt; #1 (&amp;rq-&gt;lock){-.-.-.}:
[   13.173009]        [&lt;ffffffff810679b9&gt;] check_prevs_add+0x8b/0x104
[   13.173009]        [&lt;ffffffff81067da1&gt;] validate_chain+0x36f/0x3ab
[   13.173009]        [&lt;ffffffff8106846b&gt;] __lock_acquire+0x369/0x3e2
[   13.173009]        [&lt;ffffffff81068a0f&gt;] lock_acquire+0xfc/0x14c
[   13.173009]        [&lt;ffffffff815697f1&gt;] _raw_spin_lock+0x36/0x45
[   13.173009]        [&lt;ffffffff81027e19&gt;] __task_rq_lock+0x8b/0xd3
[   13.173009]        [&lt;ffffffff81032f7f&gt;] wake_up_new_task+0x41/0x108
[   13.173009]        [&lt;ffffffff810376c3&gt;] do_fork+0x265/0x33f
[   13.173009]        [&lt;ffffffff81007d02&gt;] kernel_thread+0x6b/0x6d
[   13.173009]        [&lt;ffffffff8153a9dd&gt;] rest_init+0x21/0xd2
[   13.173009]        [&lt;ffffffff81b1db4f&gt;] start_kernel+0x3bb/0x3c6
[   13.173009]        [&lt;ffffffff81b1d29f&gt;] x86_64_start_reservations+0xaf/0xb3
[   13.173009]        [&lt;ffffffff81b1d393&gt;] x86_64_start_kernel+0xf0/0xf7
[   13.173009]
[   13.173009] -&gt; #0 (&amp;p-&gt;pi_lock){-.-.-.}:
[   13.173009]        [&lt;ffffffff81067788&gt;] check_prev_add+0x68/0x20e
[   13.173009]        [&lt;ffffffff810679b9&gt;] check_prevs_add+0x8b/0x104
[   13.173009]        [&lt;ffffffff81067da1&gt;] validate_chain+0x36f/0x3ab
[   13.173009]        [&lt;ffffffff8106846b&gt;] __lock_acquire+0x369/0x3e2
[   13.173009]        [&lt;ffffffff81068a0f&gt;] lock_acquire+0xfc/0x14c
[   13.173009]        [&lt;ffffffff815698ea&gt;] _raw_spin_lock_irqsave+0x44/0x57
[   13.173009]        [&lt;ffffffff81032d8f&gt;] try_to_wake_up+0x29/0x1aa
[   13.173009]        [&lt;ffffffff81032f3c&gt;] wake_up_process+0x10/0x12
[   13.173009]        [&lt;ffffffff810901e9&gt;] rcu_cpu_kthread_timer+0x44/0x58
[   13.173009]        [&lt;ffffffff81045286&gt;] call_timer_fn+0xac/0x1e9
[   13.173009]        [&lt;ffffffff8104556d&gt;] run_timer_softirq+0x1aa/0x1f2
[   13.173009]        [&lt;ffffffff8103e487&gt;] __do_softirq+0x109/0x26a
[   13.173009]        [&lt;ffffffff8157144c&gt;] call_softirq+0x1c/0x30
[   13.173009]        [&lt;ffffffff81003207&gt;] do_softirq+0x44/0xf1
[   13.173009]        [&lt;ffffffff8103e8b9&gt;] irq_exit+0x58/0xc8
[   13.173009]        [&lt;ffffffff81017f5a&gt;] smp_apic_timer_interrupt+0x79/0x87
[   13.173009]        [&lt;ffffffff81570fd3&gt;] apic_timer_interrupt+0x13/0x20
[   13.173009]        [&lt;ffffffff810bd51a&gt;] get_page_from_freelist+0x2aa/0x310
[   13.173009]        [&lt;ffffffff810bdf03&gt;] __alloc_pages_nodemask+0x178/0x243
[   13.173009]        [&lt;ffffffff8101fe2f&gt;] pte_alloc_one+0x1e/0x3a
[   13.173009]        [&lt;ffffffff810d27fe&gt;] __pte_alloc+0x22/0x14b
[   13.173009]        [&lt;ffffffff810d48a8&gt;] handle_mm_fault+0x17e/0x1e0
[   13.173009]        [&lt;ffffffff8156cfee&gt;] do_page_fault+0x42d/0x5de
[   13.173009]        [&lt;ffffffff8156a75f&gt;] page_fault+0x1f/0x30
[   13.173009]
[   13.173009] other info that might help us debug this:
[   13.173009]
[   13.173009] Chain exists of:
[   13.173009]   &amp;p-&gt;pi_lock --&gt; &amp;rq-&gt;lock --&gt; rcu_node_level_0
[   13.173009]
[   13.173009]  Possible unsafe locking scenario:
[   13.173009]
[   13.173009]        CPU0                    CPU1
[   13.173009]        ----                    ----
[   13.173009]   lock(rcu_node_level_0);
[   13.173009]                                lock(&amp;rq-&gt;lock);
[   13.173009]                                lock(rcu_node_level_0);
[   13.173009]   lock(&amp;p-&gt;pi_lock);
[   13.173009]
[   13.173009]  *** DEADLOCK ***
[   13.173009]
[   13.173009] 3 locks held by blkid/267:
[   13.173009]  #0:  (&amp;mm-&gt;mmap_sem){++++++}, at: [&lt;ffffffff8156cdb4&gt;] do_page_fault+0x1f3/0x5de
[   13.173009]  #1:  (&amp;yield_timer){+.-...}, at: [&lt;ffffffff810451da&gt;] call_timer_fn+0x0/0x1e9
[   13.173009]  #2:  (rcu_node_level_0){..-...}, at: [&lt;ffffffff810901cc&gt;] rcu_cpu_kthread_timer+0x27/0x58
[   13.173009]
[   13.173009] stack backtrace:
[   13.173009] Pid: 267, comm: blkid Not tainted 2.6.39-rc6-mmotm0506 #1
[   13.173009] Call Trace:
[   13.173009]  &lt;IRQ&gt;  [&lt;ffffffff8154a529&gt;] print_circular_bug+0xc8/0xd9
[   13.173009]  [&lt;ffffffff81067788&gt;] check_prev_add+0x68/0x20e
[   13.173009]  [&lt;ffffffff8100c861&gt;] ? save_stack_trace+0x28/0x46
[   13.173009]  [&lt;ffffffff810679b9&gt;] check_prevs_add+0x8b/0x104
[   13.173009]  [&lt;ffffffff81067da1&gt;] validate_chain+0x36f/0x3ab
[   13.173009]  [&lt;ffffffff8106846b&gt;] __lock_acquire+0x369/0x3e2
[   13.173009]  [&lt;ffffffff81032d8f&gt;] ? try_to_wake_up+0x29/0x1aa
[   13.173009]  [&lt;ffffffff81068a0f&gt;] lock_acquire+0xfc/0x14c
[   13.173009]  [&lt;ffffffff81032d8f&gt;] ? try_to_wake_up+0x29/0x1aa
[   13.173009]  [&lt;ffffffff810901a5&gt;] ? rcu_check_quiescent_state+0x82/0x82
[   13.173009]  [&lt;ffffffff815698ea&gt;] _raw_spin_lock_irqsave+0x44/0x57
[   13.173009]  [&lt;ffffffff81032d8f&gt;] ? try_to_wake_up+0x29/0x1aa
[   13.173009]  [&lt;ffffffff81032d8f&gt;] try_to_wake_up+0x29/0x1aa
[   13.173009]  [&lt;ffffffff810901a5&gt;] ? rcu_check_quiescent_state+0x82/0x82
[   13.173009]  [&lt;ffffffff81032f3c&gt;] wake_up_process+0x10/0x12
[   13.173009]  [&lt;ffffffff810901e9&gt;] rcu_cpu_kthread_timer+0x44/0x58
[   13.173009]  [&lt;ffffffff810901a5&gt;] ? rcu_check_quiescent_state+0x82/0x82
[   13.173009]  [&lt;ffffffff81045286&gt;] call_timer_fn+0xac/0x1e9
[   13.173009]  [&lt;ffffffff810451da&gt;] ? del_timer+0x75/0x75
[   13.173009]  [&lt;ffffffff810901a5&gt;] ? rcu_check_quiescent_state+0x82/0x82
[   13.173009]  [&lt;ffffffff8104556d&gt;] run_timer_softirq+0x1aa/0x1f2
[   13.173009]  [&lt;ffffffff8103e487&gt;] __do_softirq+0x109/0x26a
[   13.173009]  [&lt;ffffffff8106365f&gt;] ? tick_dev_program_event+0x37/0xf6
[   13.173009]  [&lt;ffffffff810a0e4a&gt;] ? time_hardirqs_off+0x1b/0x2f
[   13.173009]  [&lt;ffffffff8157144c&gt;] call_softirq+0x1c/0x30
[   13.173009]  [&lt;ffffffff81003207&gt;] do_softirq+0x44/0xf1
[   13.173009]  [&lt;ffffffff8103e8b9&gt;] irq_exit+0x58/0xc8
[   13.173009]  [&lt;ffffffff81017f5a&gt;] smp_apic_timer_interrupt+0x79/0x87
[   13.173009]  [&lt;ffffffff81570fd3&gt;] apic_timer_interrupt+0x13/0x20
[   13.173009]  &lt;EOI&gt;  [&lt;ffffffff810bd384&gt;] ? get_page_from_freelist+0x114/0x310
[   13.173009]  [&lt;ffffffff810bd51a&gt;] ? get_page_from_freelist+0x2aa/0x310
[   13.173009]  [&lt;ffffffff812220e7&gt;] ? clear_page_c+0x7/0x10
[   13.173009]  [&lt;ffffffff810bd1ef&gt;] ? prep_new_page+0x14c/0x1cd
[   13.173009]  [&lt;ffffffff810bd51a&gt;] get_page_from_freelist+0x2aa/0x310
[   13.173009]  [&lt;ffffffff810bdf03&gt;] __alloc_pages_nodemask+0x178/0x243
[   13.173009]  [&lt;ffffffff810d46b9&gt;] ? __pmd_alloc+0x87/0x99
[   13.173009]  [&lt;ffffffff8101fe2f&gt;] pte_alloc_one+0x1e/0x3a
[   13.173009]  [&lt;ffffffff810d46b9&gt;] ? __pmd_alloc+0x87/0x99
[   13.173009]  [&lt;ffffffff810d27fe&gt;] __pte_alloc+0x22/0x14b
[   13.173009]  [&lt;ffffffff810d48a8&gt;] handle_mm_fault+0x17e/0x1e0
[   13.173009]  [&lt;ffffffff8156cfee&gt;] do_page_fault+0x42d/0x5de
[   13.173009]  [&lt;ffffffff810d915f&gt;] ? sys_brk+0x32/0x10c
[   13.173009]  [&lt;ffffffff810a0e4a&gt;] ? time_hardirqs_off+0x1b/0x2f
[   13.173009]  [&lt;ffffffff81065c4f&gt;] ? trace_hardirqs_off_caller+0x3f/0x9c
[   13.173009]  [&lt;ffffffff812235dd&gt;] ? trace_hardirqs_off_thunk+0x3a/0x3c
[   13.173009]  [&lt;ffffffff8156a75f&gt;] page_fault+0x1f/0x30
[   14.010075] usb 5-1: new full speed USB device number 2 using uhci_hcd

Reported-by: Valdis Kletnieks &lt;Valdis.Kletnieks@vt.edu&gt;
Signed-off-by: Paul E. McKenney &lt;paul.mckenney@linaro.org&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Signed-off-by: Ingo Molnar &lt;mingo@elte.hu&gt;
</pre>
</div>
</content>
</entry>
</feed>
