Messages in this thread | | | Date | Tue, 05 Aug 2008 00:09:43 +0900 (JST) | Subject | How does RCU work? | From | TAKADA Yoshihito <> |
| |
Hi. I cannot understand mechanism. Somebody tell me it please.
In x86 kernel, CONFIG_PREEMPT_RCU=n (CONFIG_CLASSIC_RCU=y). rcu_read_lock() makes just preempt_disable(). call_cru()/synchronize_rcu() running as a soft-IRQ. It's current CPU does not refer to protected data that when call_rcu() run. Because soft-IRQ handler ran, it means current CPU is preempive. That is the CPU called rcu_read_unlock().
Well, current CPU is unlocked, but How does kernel know it other CPUs unlocked?
call_ruc() calls force_quiescent_state() to reschedule other CPUs. force_quiescent_state() calls smp_send_reschedule() to sends request to reshecule. It's just require to reschedule via inter Processor Interrupt. But call_rcu() does not wait for target CPUs handle IPI. Or, Do CPUs have it handled IPI request when return from smp_send_reschedule()?
| |