From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: linux-kernel@vger.kernel.org
Cc: mingo@elte.hu, laijs@cn.fujitsu.com, dipankar@in.ibm.com,
akpm@linux-foundation.org, mathieu.desnoyers@polymtl.ca,
josh@joshtriplett.org, dvhltc@us.ibm.com, niv@us.ibm.com,
tglx@linutronix.de, peterz@infradead.org, rostedt@goodmis.org,
Valdis.Kletnieks@vt.edu, dhowells@redhat.com,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: [PATCH tip/core/rcu 07/11] rcu: eliminate rcu_process_dyntick() return value
Date: Mon, 4 Jan 2010 15:09:06 -0800 [thread overview]
Message-ID: <12626465501857-git-send-email-> (raw)
In-Reply-To: <20100104230850.GA22111@linux.vnet.ibm.com>
From: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Because a new grace period cannot start while we are executing within the
force_quiescent_state() function's switch statement, if any test within
that switch statement or within any function called from that switch
statement shows that the current grace period has ended, we can safely
re-do that test any time before we leave the switch statement. This
means that we no longer need a return value from rcu_process_dyntick(),
as we can simply invoke rcu_gp_in_progress() to check whether the old
grace period has finished -- there is no longer any need to worry about
whether or not a new grace period has been started.
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
---
kernel/rcutree.c | 17 ++++++-----------
1 files changed, 6 insertions(+), 11 deletions(-)
diff --git a/kernel/rcutree.c b/kernel/rcutree.c
index c7d0070..e497119 100644
--- a/kernel/rcutree.c
+++ b/kernel/rcutree.c
@@ -1144,11 +1144,9 @@ void rcu_check_callbacks(int cpu, int user)
/*
* Scan the leaf rcu_node structures, processing dyntick state for any that
* have not yet encountered a quiescent state, using the function specified.
- * Returns 1 if the current grace period ends while scanning (possibly
- * because we made it end).
*/
-static int rcu_process_dyntick(struct rcu_state *rsp,
- int (*f)(struct rcu_data *))
+static void rcu_process_dyntick(struct rcu_state *rsp,
+ int (*f)(struct rcu_data *))
{
unsigned long bit;
int cpu;
@@ -1161,7 +1159,7 @@ static int rcu_process_dyntick(struct rcu_state *rsp,
spin_lock_irqsave(&rnp->lock, flags);
if (rnp->completed != rsp->gpnum - 1) {
spin_unlock_irqrestore(&rnp->lock, flags);
- return 1;
+ return;
}
if (rnp->qsmask == 0) {
spin_unlock_irqrestore(&rnp->lock, flags);
@@ -1181,7 +1179,6 @@ static int rcu_process_dyntick(struct rcu_state *rsp,
}
spin_unlock_irqrestore(&rnp->lock, flags);
}
- return 0;
}
/*
@@ -1193,7 +1190,6 @@ static void force_quiescent_state(struct rcu_state *rsp, int relaxed)
unsigned long flags;
struct rcu_node *rnp = rcu_get_root(rsp);
u8 forcenow;
- u8 gpdone;
if (!rcu_gp_in_progress(rsp))
return; /* No grace period in progress, nothing to force. */
@@ -1226,10 +1222,9 @@ static void force_quiescent_state(struct rcu_state *rsp, int relaxed)
break; /* So gcc recognizes the dead code. */
/* Record dyntick-idle state. */
- gpdone = rcu_process_dyntick(rsp,
- dyntick_save_progress_counter);
+ rcu_process_dyntick(rsp, dyntick_save_progress_counter);
spin_lock(&rnp->lock); /* irqs already disabled */
- if (gpdone)
+ if (!rcu_gp_in_progress(rsp))
break;
/* fall into next case. */
@@ -1249,7 +1244,7 @@ static void force_quiescent_state(struct rcu_state *rsp, int relaxed)
/* Check dyntick-idle state, send IPI to laggarts. */
spin_unlock(&rnp->lock); /* irqs remain disabled */
- gpdone = rcu_process_dyntick(rsp, rcu_implicit_dynticks_qs);
+ rcu_process_dyntick(rsp, rcu_implicit_dynticks_qs);
/* Leave state in case more forcing is required. */
--
1.5.2.5
next prev parent reply other threads:[~2010-01-04 23:09 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-04 23:08 [PATCH tip/core/rcu 0/11] rcu: suppress GP start to simplify force_quiescent_state() Paul E. McKenney
2010-01-04 23:09 ` [PATCH tip/core/rcu 01/11] rcu: adjust force_quiescent_state() locking, step 1 Paul E. McKenney
2010-01-13 10:24 ` [tip:core/rcu] rcu: Adjust " tip-bot for Paul E. McKenney
2010-01-04 23:09 ` [PATCH tip/core/rcu 02/11] rcu: adjust force_quiescent_state() locking, step 2 Paul E. McKenney
2010-01-13 10:25 ` [tip:core/rcu] rcu: Adjust " tip-bot for Paul E. McKenney
2010-01-04 23:09 ` [PATCH tip/core/rcu 03/11] rcu: prohibit starting new grace periods while forcing quiescent states Paul E. McKenney
2010-01-13 10:25 ` [tip:core/rcu] rcu: Prohibit " tip-bot for Paul E. McKenney
2010-01-04 23:09 ` [PATCH tip/core/rcu 04/11] rcu: eliminate local variable signaled from force_quiescent_state() Paul E. McKenney
2010-01-13 10:25 ` [tip:core/rcu] rcu: Eliminate " tip-bot for Paul E. McKenney
2010-01-04 23:09 ` [PATCH tip/core/rcu 05/11] rcu: eliminate local variable lastcomp " Paul E. McKenney
2010-01-13 10:25 ` [tip:core/rcu] rcu: Eliminate " tip-bot for Paul E. McKenney
2010-01-04 23:09 ` [PATCH tip/core/rcu 06/11] rcu: eliminate second argument of rcu_process_dyntick() Paul E. McKenney
2010-01-13 10:26 ` [tip:core/rcu] rcu: Eliminate " tip-bot for Paul E. McKenney
2010-01-04 23:09 ` Paul E. McKenney [this message]
2010-01-13 10:26 ` [tip:core/rcu] rcu: Eliminate rcu_process_dyntick() return value tip-bot for Paul E. McKenney
2010-01-04 23:09 ` [PATCH tip/core/rcu 08/11] rcu: remove leg of force_quiescent_state() switch statement Paul E. McKenney
2010-01-13 10:26 ` [tip:core/rcu] rcu: Remove " tip-bot for Paul E. McKenney
2010-01-04 23:09 ` [PATCH tip/core/rcu 09/11] rcu: remove redundant grace-period check Paul E. McKenney
2010-01-13 10:26 ` [tip:core/rcu] rcu: Remove " tip-bot for Paul E. McKenney
2010-01-04 23:09 ` [PATCH tip/core/rcu 10/11] rcu: make force_quiescent_state() start grace period if needed Paul E. McKenney
2010-01-13 10:27 ` [tip:core/rcu] rcu: Make " tip-bot for Paul E. McKenney
2010-01-04 23:09 ` [PATCH tip/core/rcu 11/11] rcu: add force_quiescent_state() testing to rcutorture Paul E. McKenney
2010-01-13 10:27 ` [tip:core/rcu] rcu: Add " tip-bot for Paul E. McKenney
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=12626465501857-git-send-email- \
--to=paulmck@linux.vnet.ibm.com \
--cc=Valdis.Kletnieks@vt.edu \
--cc=akpm@linux-foundation.org \
--cc=dhowells@redhat.com \
--cc=dipankar@in.ibm.com \
--cc=dvhltc@us.ibm.com \
--cc=josh@joshtriplett.org \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mingo@elte.hu \
--cc=niv@us.ibm.com \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.