rcu: Need to update rnp->gpnum if preemptable RCU is to be reliable
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 8 Sep 2009 22:54:36 +0000 (15:54 -0700)
committerIngo Molnar <mingo@elte.hu>
Thu, 17 Sep 2009 22:04:54 +0000 (00:04 +0200)
commitde078d875cc7fc709f7818f26d38389c04369826
tree0e7ed4d9d11ae707cc3b4e1e9d511a6d78e9e29d
parentde55a8958f6e3ef5ce5f0971b80bd44bfcac7cf1
rcu: Need to update rnp->gpnum if preemptable RCU is to be reliable

Without this patch, tasks preempted in RCU read-side critical
sections can fail to block the grace period, given that
rnp->gpnum is used to determine which rnp->blocked_tasks[]
element the preempted task is enqueued on.

Before the patch, rnp->gpnum is always zero, so preempted tasks
are always enqueued on rnp->blocked_tasks[0], which is correct
only when the current CPU has not checked into the current
grace period and the grace-period number is even, or,
similarly, if the current CPU -has- checked into the current
grace period and the grace-period number is odd.

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Acked-by: Steven Rostedt <rostedt@goodmis.org>
Cc: laijs@cn.fujitsu.com
Cc: dipankar@in.ibm.com
Cc: akpm@linux-foundation.org
Cc: mathieu.desnoyers@polymtl.ca
Cc: josht@linux.vnet.ibm.com
Cc: dvhltc@us.ibm.com
Cc: niv@us.ibm.com
Cc: peterz@infradead.org
LKML-Reference: <12524504771622-git-send-email->
Signed-off-by: Ingo Molnar <mingo@elte.hu>
kernel/rcutree.c