diff options
author | Ben Dooks <ben-linux@fluff.org> | 2009-03-06 17:13:52 +0000 |
---|---|---|
committer | Ben Dooks <ben-linux@fluff.org> | 2009-03-06 17:13:52 +0000 |
commit | 1264fa6f8c5bf561a86128b2d48ace53e3f1e66f (patch) | |
tree | 69872715982d49ddea5819040c7032062376183b /include/linux/rcupreempt.h | |
parent | efeff568677aa325f84d3ce37c219019887a79eb (diff) | |
parent | 559595a985e106d2fa9f0c79b7f5805453fed593 (diff) | |
download | linux-1264fa6f8c5bf561a86128b2d48ace53e3f1e66f.tar.gz linux-1264fa6f8c5bf561a86128b2d48ace53e3f1e66f.tar.xz |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 into s3c-fixes
Diffstat (limited to 'include/linux/rcupreempt.h')
-rw-r--r-- | include/linux/rcupreempt.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/include/linux/rcupreempt.h b/include/linux/rcupreempt.h index 3e05c09b54a2..74304b4538d8 100644 --- a/include/linux/rcupreempt.h +++ b/include/linux/rcupreempt.h @@ -142,4 +142,19 @@ static inline void rcu_exit_nohz(void) #define rcu_exit_nohz() do { } while (0) #endif /* CONFIG_NO_HZ */ +/* + * A context switch is a grace period for rcupreempt synchronize_rcu() + * only during early boot, before the scheduler has been initialized. + * So, how the heck do we get a context switch? Well, if the caller + * invokes synchronize_rcu(), they are willing to accept a context + * switch, so we simply pretend that one happened. + * + * After boot, there might be a blocked or preempted task in an RCU + * read-side critical section, so we cannot then take the fastpath. + */ +static inline int rcu_blocking_is_gp(void) +{ + return num_online_cpus() == 1 && !rcu_scheduler_active; +} + #endif /* __LINUX_RCUPREEMPT_H */ |