diff options
| author | Dave Jones <davej@codemonkey.org.uk> | 2003-05-14 06:44:53 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2003-05-14 06:44:53 -0700 |
| commit | e33de428775c16db4f2b348f769657021ae036f6 (patch) | |
| tree | e9f80255bccbf64dc29fce002171defd0c463544 /kernel | |
| parent | 73ba856c1695a00a6bfb982870ed90d058d152fb (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.c | 22 |
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); } |
