<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux/kernel/rcu, branch v4.3</title>
<subtitle>Mirror of https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
</subtitle>
<id>https://git.shady.money/linux/atom?h=v4.3</id>
<link rel='self' href='https://git.shady.money/linux/atom?h=v4.3'/>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/'/>
<updated>2015-09-21T04:01:22Z</updated>
<entry>
<title>rcu: Suppress lockdep false positive for rcp-&gt;exp_funnel_mutex</title>
<updated>2015-09-21T04:01:22Z</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2015-09-21T04:01:22Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=19a5ecde086a6a5287978b12ae948fa691b197b7'/>
<id>urn:sha1:19a5ecde086a6a5287978b12ae948fa691b197b7</id>
<content type='text'>
In kernels built with CONFIG_PREEMPT=y, synchronize_rcu_expedited()
invokes synchronize_sched_expedited() while holding RCU-preempt's
root rcu_node structure's -&gt;exp_funnel_mutex, which is acquired after
the rcu_data structure's -&gt;exp_funnel_mutex.  The first thing that
synchronize_sched_expedited() will do is acquire RCU-sched's rcu_data
structure's -&gt;exp_funnel_mutex.   There is no danger of an actual deadlock
because the locking order is always from RCU-preempt's expedited mutexes
to those of RCU-sched.  Unfortunately, lockdep considers both rcu_data
structures' -&gt;exp_funnel_mutex to be in the same lock class and therefore
reports a deadlock cycle.

This commit silences this false positive by placing RCU-sched's rcu_data
structures' -&gt;exp_funnel_mutex locks into their own lock class.

Reported-by: Sasha Levin &lt;sasha.levin@oracle.com&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</content>
</entry>
<entry>
<title>rcu,locking: Privatize smp_mb__after_unlock_lock()</title>
<updated>2015-08-04T15:49:21Z</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2015-07-15T01:35:23Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=12d560f4ea87030667438a169912380be00cea4b'/>
<id>urn:sha1:12d560f4ea87030667438a169912380be00cea4b</id>
<content type='text'>
RCU is the only thing that uses smp_mb__after_unlock_lock(), and is
likely the only thing that ever will use it, so this commit makes this
macro private to RCU.

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Cc: Will Deacon &lt;will.deacon@arm.com&gt;
Cc: Peter Zijlstra &lt;peterz@infradead.org&gt;
Cc: Benjamin Herrenschmidt &lt;benh@kernel.crashing.org&gt;
Cc: "linux-arch@vger.kernel.org" &lt;linux-arch@vger.kernel.org&gt;
</content>
</entry>
<entry>
<title>Merge branches 'doc.2015.07.15a' and 'torture.2015.07.15a' into HEAD</title>
<updated>2015-08-04T15:42:02Z</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2015-08-04T15:42:02Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=3dbe43f6fba9f2a0e46e371733575a45704c22ab'/>
<id>urn:sha1:3dbe43f6fba9f2a0e46e371733575a45704c22ab</id>
<content type='text'>
doc.2015.07.15a: Documentation updates.
torture.2015.07.15a: Torture-test updates.
</content>
</entry>
<entry>
<title>Merge branches 'fixes.2015.07.22a' and 'initexp.2015.08.04a' into HEAD</title>
<updated>2015-08-04T15:40:58Z</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2015-08-04T15:40:58Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=8ff4fbfd69a6c7b9598f8c1f2df34f89bac02c1a'/>
<id>urn:sha1:8ff4fbfd69a6c7b9598f8c1f2df34f89bac02c1a</id>
<content type='text'>
fixes.2015.07.22a: Miscellaneous fixes.
initexp.2015.08.04a: Initialization and expedited updates.
	(Single branch due to conflicts.)
</content>
</entry>
<entry>
<title>rcu: Silence lockdep false positive for expedited grace periods</title>
<updated>2015-08-04T15:39:21Z</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2015-07-19T22:13:40Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=af859beaaba4d57883b08f4acbcb3974bc1f975e'/>
<id>urn:sha1:af859beaaba4d57883b08f4acbcb3974bc1f975e</id>
<content type='text'>
In a CONFIG_PREEMPT=y kernel, synchronize_rcu_expedited()
acquires the -&gt;exp_funnel_mutex in rcu_preempt_state, then invokes
synchronize_sched_expedited, which acquires the -&gt;exp_funnel_mutex in
rcu_sched_state.  There can be no deadlock because rcu_preempt_state
-&gt;exp_funnel_mutex acquisition always precedes that of rcu_sched_state.
But lockdep does not know that, so it gives false-positive splats.

This commit therefore associates a separate lock_class_key structure
with the rcu_sched_state structure's -&gt;exp_funnel_mutex, allowing
lockdep to see the lock ordering, avoiding the false positives.

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</content>
</entry>
<entry>
<title>rcu: Don't disable CPU hotplug during OOM notifiers</title>
<updated>2015-07-22T22:27:43Z</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2015-07-14T23:24:14Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=9a54f98e341d09793247a6e598012edefb5ae7cb'/>
<id>urn:sha1:9a54f98e341d09793247a6e598012edefb5ae7cb</id>
<content type='text'>
RCU's rcu_oom_notify() disables CPU hotplug in order to stabilize the
list of online CPUs, which it traverses.  However, this is completely
pointless because smp_call_function_single() will quietly fail if invoked
on an offline CPU.  Because the count of requests is incremented in the
rcu_oom_notify_cpu() function that is remotely invoked, everything works
nicely even in the face of concurrent CPU-hotplug operations.

Furthermore, in recent kernels, invoking get_online_cpus() from an OOM
notifier can result in deadlock.  This commit therefore removes the
call to get_online_cpus() and put_online_cpus() from rcu_oom_notify().

Reported-by: Marcin Ślusarz &lt;marcin.slusarz@gmail.com&gt;
Reported-by: David Rientjes &lt;rientjes@google.com&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Acked-by: David Rientjes &lt;rientjes@google.com&gt;
Tested-by: Marcin Ślusarz &lt;marcin.slusarz@gmail.com&gt;
</content>
</entry>
<entry>
<title>rcu: Fix backwards RCU_LOCKDEP_WARN() in synchronize_rcu_tasks()</title>
<updated>2015-07-22T22:27:33Z</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2015-06-30T15:17:40Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=a76a9a485d730024a7cbd76efcd9c6eb46003829'/>
<id>urn:sha1:a76a9a485d730024a7cbd76efcd9c6eb46003829</id>
<content type='text'>
The RCU_LOCKDEP_WARN() in synchronize_rcu_tasks() triggers if the
scheduler is active, which is backwards.  This commit therefore
negates the test.

Reported-by: Ingo Molnar &lt;mingo@kernel.org&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</content>
</entry>
<entry>
<title>rcu: Rename rcu_lockdep_assert() to RCU_LOCKDEP_WARN()</title>
<updated>2015-07-22T22:27:32Z</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2015-06-18T22:50:02Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=f78f5b90c4ffa559e400c3919a02236101f29f3f'/>
<id>urn:sha1:f78f5b90c4ffa559e400c3919a02236101f29f3f</id>
<content type='text'>
This commit renames rcu_lockdep_assert() to RCU_LOCKDEP_WARN() for
consistency with the WARN() series of macros.  This also requires
inverting the sense of the conditional, which this commit also does.

Reported-by: Ingo Molnar &lt;mingo@kernel.org&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Reviewed-by: Ingo Molnar &lt;mingo@kernel.org&gt;
</content>
</entry>
<entry>
<title>rcu: Make rcu_is_watching() really notrace</title>
<updated>2015-07-22T22:27:31Z</updated>
<author>
<name>Alexei Starovoitov</name>
<email>ast@plumgrid.com</email>
</author>
<published>2015-06-16T17:35:18Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=46f00d18fca42cc954c2e9e99a48b6f3a7741ed7'/>
<id>urn:sha1:46f00d18fca42cc954c2e9e99a48b6f3a7741ed7</id>
<content type='text'>
Although rcu_is_watching() is marked notrace, it invokes preempt_disable()
and preempt_enable(), both of which can be traced.  This defeats the
purpose of the notrace on rcu_is_watching(), so this commit substitutes
preempt_disable_notrace() and preempt_enable_notrace().

Signed-off-by: Alexei Starovoitov &lt;ast@plumgrid.com&gt;
Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Acked-by: Steven Rostedt &lt;rostedt@goodmis.org&gt;
</content>
</entry>
<entry>
<title>rcu: Create a synchronize_rcu_mult()</title>
<updated>2015-07-22T22:27:29Z</updated>
<author>
<name>Paul E. McKenney</name>
<email>paulmck@linux.vnet.ibm.com</email>
</author>
<published>2015-06-10T19:53:06Z</published>
<link rel='alternate' type='text/html' href='https://git.shady.money/linux/commit/?id=ec90a194ae2cb8b8e9fe4f6f70dd3d4dc0269b4b'/>
<id>urn:sha1:ec90a194ae2cb8b8e9fe4f6f70dd3d4dc0269b4b</id>
<content type='text'>
There have been several requests for a primitive that waits for
grace periods for several RCU flavors concurrently, so this
commit creates it.  This is a variadic macro, and you pass in
the call_rcu() functions of the flavors of RCU that you wish to
wait for.

Note that you cannot pass in call_srcu() for two reasons: (1) This
would result in a type mismatch and (2) You need to specify which
srcu_struct you want to use.  Handle this by creating a wrapper
function for your SRCU domain, for example:

	void call_srcu_mine(struct rcu_head *head, rcu_callback_t func)
	{
		call_srcu(&amp;ss_mine, head, func);
	}

You can then do something like this:

	synchronize_rcu_mult(call_srcu_mine, call_rcu, call_rcu_sched);

Signed-off-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
</content>
</entry>
</feed>
