summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorDave Jones <davej@codemonkey.org.uk>2003-05-14 06:44:53 -0700
committerLinus Torvalds <torvalds@home.transmeta.com>2003-05-14 06:44:53 -0700
commite33de428775c16db4f2b348f769657021ae036f6 (patch)
treee9f80255bccbf64dc29fce002171defd0c463544 /kernel
parent73ba856c1695a00a6bfb982870ed90d058d152fb (diff)
[PATCH] Shorten rcu_check_quiescent_state.
Single spin_unlock path cuts this down a little..
Diffstat (limited to 'kernel')
-rw-r--r--kernel/rcupdate.c22
1 files changed, 10 insertions, 12 deletions
diff --git a/kernel/rcupdate.c b/kernel/rcupdate.c
index 91483119714c..4fcb2de8a7f6 100644
--- a/kernel/rcupdate.c
+++ b/kernel/rcupdate.c
@@ -121,9 +121,8 @@ static void rcu_check_quiescent_state(void)
{
int cpu = smp_processor_id();
- if (!test_bit(cpu, &rcu_ctrlblk.rcu_cpu_mask)) {
+ if (!test_bit(cpu, &rcu_ctrlblk.rcu_cpu_mask))
return;
- }
/*
* Races with local timer interrupt - in the worst case
@@ -134,23 +133,22 @@ static void rcu_check_quiescent_state(void)
RCU_last_qsctr(cpu) = RCU_qsctr(cpu);
return;
}
- if (RCU_qsctr(cpu) == RCU_last_qsctr(cpu)) {
+ if (RCU_qsctr(cpu) == RCU_last_qsctr(cpu))
return;
- }
spin_lock(&rcu_ctrlblk.mutex);
- if (!test_bit(cpu, &rcu_ctrlblk.rcu_cpu_mask)) {
- spin_unlock(&rcu_ctrlblk.mutex);
- return;
- }
+ if (!test_bit(cpu, &rcu_ctrlblk.rcu_cpu_mask))
+ goto out_unlock;
+
clear_bit(cpu, &rcu_ctrlblk.rcu_cpu_mask);
RCU_last_qsctr(cpu) = RCU_QSCTR_INVALID;
- if (rcu_ctrlblk.rcu_cpu_mask != 0) {
- spin_unlock(&rcu_ctrlblk.mutex);
- return;
- }
+ if (rcu_ctrlblk.rcu_cpu_mask != 0)
+ goto out_unlock;
+
rcu_ctrlblk.curbatch++;
rcu_start_batch(rcu_ctrlblk.maxbatch);
+
+out_unlock:
spin_unlock(&rcu_ctrlblk.mutex);
}