From: Lai Jiangshan <laijs@cn.fujitsu.com>
To: linux-kernel@vger.kernel.org,
"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
Subject: [PATCH 5/8] srcu: srcu_read_lock() can be called from idle loop
Date: Thu, 29 Nov 2012 16:46:06 +0800 [thread overview]
Message-ID: <1354178770-6028-6-git-send-email-laijs@cn.fujitsu.com> (raw)
In-Reply-To: <1354178770-6028-1-git-send-email-laijs@cn.fujitsu.com>
SRCU is based on its own statemachine and it doesn't
relies on normal RCU now, its read critical section can be used in
idle loop, so we remove the check and the comments.
It partially reverts ff195cb6(the part for SRCU).
It also makes the codes match the comments in whatisRCU.txt:
g. Do you need read-side critical sections that are respected
even though they are in the middle of the idle loop, during
user-mode execution, or on an offlined CPU? If so, SRCU is the
only choice that will work for you.
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
---
include/linux/srcu.h | 21 +++------------------
1 files changed, 3 insertions(+), 18 deletions(-)
diff --git a/include/linux/srcu.h b/include/linux/srcu.h
index ae3ee39..04f4121 100644
--- a/include/linux/srcu.h
+++ b/include/linux/srcu.h
@@ -151,25 +151,14 @@ void srcu_barrier(struct srcu_struct *sp);
* Checks debug_lockdep_rcu_enabled() to prevent false positives during boot
* and while lockdep is disabled.
*
- * Note that if the CPU is in the idle loop from an RCU point of view
- * (ie: that we are in the section between rcu_idle_enter() and
- * rcu_idle_exit()) then srcu_read_lock_held() returns false even if
- * the CPU did an srcu_read_lock(). The reason for this is that RCU
- * ignores CPUs that are in such a section, considering these as in
- * extended quiescent state, so such a CPU is effectively never in an
- * RCU read-side critical section regardless of what RCU primitives it
- * invokes. This state of affairs is required --- we need to keep an
- * RCU-free window in idle where the CPU may possibly enter into low
- * power mode. This way we can notice an extended quiescent state to
- * other CPUs that started a grace period. Otherwise we would delay any
- * grace period as long as we run in the idle task.
+ * Note that SRCU is based on its own statemachine and it doesn't
+ * relies on normal RCU, it can be called from the CPU which
+ * is in the idle loop from an RCU point of view or offline.
*/
static inline int srcu_read_lock_held(struct srcu_struct *sp)
{
if (!debug_lockdep_rcu_enabled())
return 1;
- if (rcu_is_cpu_idle())
- return 0;
return lock_is_held(&sp->dep_map);
}
@@ -231,8 +220,6 @@ static inline int srcu_read_lock(struct srcu_struct *sp) __acquires(sp)
int retval = __srcu_read_lock(sp);
rcu_lock_acquire(&(sp)->dep_map);
- rcu_lockdep_assert(!rcu_is_cpu_idle(),
- "srcu_read_lock() used illegally while idle");
return retval;
}
@@ -246,8 +233,6 @@ static inline int srcu_read_lock(struct srcu_struct *sp) __acquires(sp)
static inline void srcu_read_unlock(struct srcu_struct *sp, int idx)
__releases(sp)
{
- rcu_lockdep_assert(!rcu_is_cpu_idle(),
- "srcu_read_unlock() used illegally while idle");
rcu_lock_release(&(sp)->dep_map);
__srcu_read_unlock(sp, idx);
}
--
1.7.4.4
next prev parent reply other threads:[~2012-11-29 8:43 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-29 8:46 [PATCH 0/8] srcu: cleanup for 3.8 Lai Jiangshan
2012-11-29 8:46 ` [PATCH 1/8] srcu: simplify __srcu_read_unlock() via this_cpu_dec() Lai Jiangshan
2012-11-29 8:46 ` [PATCH 2/8] srcu: add might_sleep() annotation to synchronize_srcu() Lai Jiangshan
2012-11-29 8:46 ` [PATCH 3/8] srcu: simple cleanup for cleanup_srcu_struct() Lai Jiangshan
2012-11-29 8:46 ` [PATCH 4/8] srcu: srcu_read_lock() can be called from offline cpu Lai Jiangshan
2012-12-04 19:15 ` Paul E. McKenney
2012-11-29 8:46 ` Lai Jiangshan [this message]
2012-11-29 8:46 ` [PATCH 6/8] srcu: update the comments of synchronize_srcu() Lai Jiangshan
2012-11-29 8:46 ` [PATCH 7/8] srcu: update the comments of synchronize_srcu_expedited() Lai Jiangshan
2012-11-29 8:46 ` [PATCH 8/8] srcu: use ACCESS_ONCE() to access sp->completed in srcu_read_lock() Lai Jiangshan
2012-11-29 22:05 ` Paul E. McKenney
2012-11-30 8:14 ` Lai Jiangshan
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=1354178770-6028-6-git-send-email-laijs@cn.fujitsu.com \
--to=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®