|
@@ -286,12 +286,13 @@ static void rcu_preempt_qs(void)
|
|
|
*
|
|
*
|
|
|
* Caller must disable interrupts.
|
|
* Caller must disable interrupts.
|
|
|
*/
|
|
*/
|
|
|
-static void rcu_preempt_note_context_switch(void)
|
|
|
|
|
|
|
+static void rcu_preempt_note_context_switch(bool preempt)
|
|
|
{
|
|
{
|
|
|
struct task_struct *t = current;
|
|
struct task_struct *t = current;
|
|
|
struct rcu_data *rdp;
|
|
struct rcu_data *rdp;
|
|
|
struct rcu_node *rnp;
|
|
struct rcu_node *rnp;
|
|
|
|
|
|
|
|
|
|
+ WARN_ON_ONCE(!preempt && t->rcu_read_lock_nesting > 0);
|
|
|
if (t->rcu_read_lock_nesting > 0 &&
|
|
if (t->rcu_read_lock_nesting > 0 &&
|
|
|
!t->rcu_read_unlock_special.b.blocked) {
|
|
!t->rcu_read_unlock_special.b.blocked) {
|
|
|
|
|
|
|
@@ -738,7 +739,7 @@ static void __init rcu_bootup_announce(void)
|
|
|
* Because preemptible RCU does not exist, we never have to check for
|
|
* Because preemptible RCU does not exist, we never have to check for
|
|
|
* CPUs being in quiescent states.
|
|
* CPUs being in quiescent states.
|
|
|
*/
|
|
*/
|
|
|
-static void rcu_preempt_note_context_switch(void)
|
|
|
|
|
|
|
+static void rcu_preempt_note_context_switch(bool preempt)
|
|
|
{
|
|
{
|
|
|
}
|
|
}
|
|
|
|
|
|