| 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 |
| |
| 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 |
| @@ -1572,7 +1572,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) && |
| @@ -1591,7 +1591,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)), |
| @@ -1629,7 +1629,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); |
| } |
| |
| /* |
| @@ -1701,7 +1701,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. */ |
| } |
| |
| /* |
| @@ -2266,7 +2266,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); |
| } |
| |
| /* |
| @@ -3263,7 +3264,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 |
| @@ -388,7 +388,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. */ |