linux/debian/patches/features/all/rt/treercu-use-simple-waitqueu...

81 lines
2.8 KiB
Diff

From db7ae440c333156392bc56badc610469a4d522ae Mon Sep 17 00:00:00 2001
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: Mon, 8 Apr 2013 16:09:57 +0200
Subject: [PATCH] kernel/treercu: use a simple waitqueue
Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/3.12/patches-3.12.1-rt4.tar.xz
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
---
kernel/rcutree.c | 13 +++++++------
kernel/rcutree.h | 2 +-
2 files changed, 8 insertions(+), 7 deletions(-)
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -1482,7 +1482,7 @@ static int __noreturn rcu_gp_kthread(voi
/* Handle grace-period start. */
for (;;) {
- wait_event_interruptible(rsp->gp_wq,
+ swait_event_interruptible(rsp->gp_wq,
rsp->gp_flags &
RCU_GP_FLAG_INIT);
if ((rsp->gp_flags & RCU_GP_FLAG_INIT) &&
@@ -1501,7 +1501,7 @@ static int __noreturn rcu_gp_kthread(voi
}
for (;;) {
rsp->jiffies_force_qs = jiffies + j;
- ret = wait_event_interruptible_timeout(rsp->gp_wq,
+ ret = swait_event_interruptible_timeout(rsp->gp_wq,
(rsp->gp_flags & RCU_GP_FLAG_FQS) ||
(!ACCESS_ONCE(rnp->qsmask) &&
!rcu_preempt_blocked_readers_cgp(rnp)),
@@ -1539,7 +1539,7 @@ static void rsp_wakeup(struct irq_work *
struct rcu_state *rsp = container_of(work, struct rcu_state, wakeup_work);
/* Wake up rcu_gp_kthread() to start the grace period. */
- wake_up(&rsp->gp_wq);
+ swait_wake(&rsp->gp_wq);
}
/*
@@ -1613,7 +1613,7 @@ static void rcu_report_qs_rsp(struct rcu
{
WARN_ON_ONCE(!rcu_gp_in_progress(rsp));
raw_spin_unlock_irqrestore(&rcu_get_root(rsp)->lock, flags);
- wake_up(&rsp->gp_wq); /* Memory barrier implied by wake_up() path. */
+ swait_wake(&rsp->gp_wq); /* Memory barrier implied by wake_up() path. */
}
/*
@@ -2183,7 +2183,8 @@ static void force_quiescent_state(struct
}
rsp->gp_flags |= RCU_GP_FLAG_FQS;
raw_spin_unlock_irqrestore(&rnp_old->lock, flags);
- wake_up(&rsp->gp_wq); /* Memory barrier implied by wake_up() path. */
+ /* Memory barrier implied by wake_up() path. */
+ swait_wake(&rsp->gp_wq);
}
/*
@@ -3219,7 +3220,7 @@ static void __init rcu_init_one(struct r
}
rsp->rda = rda;
- init_waitqueue_head(&rsp->gp_wq);
+ init_swait_head(&rsp->gp_wq);
init_irq_work(&rsp->wakeup_work, rsp_wakeup);
rnp = rsp->level[rcu_num_lvls - 1];
for_each_possible_cpu(i) {
--- a/kernel/rcutree.h
+++ b/kernel/rcutree.h
@@ -401,7 +401,7 @@ struct rcu_state {
unsigned long gpnum; /* Current gp number. */
unsigned long completed; /* # of last completed gp. */
struct task_struct *gp_kthread; /* Task for grace periods. */
- wait_queue_head_t gp_wq; /* Where GP task waits. */
+ struct swait_head gp_wq; /* Where GP task waits. */
int gp_flags; /* Commands for GP task. */
/* End of fields guarded by root rcu_node's lock. */