Message ID | 1501146318-7098-1-git-send-email-wanpeng.li@hotmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 27/07/2017 11:05, Wanpeng Li wrote: > Commit 9b132fbe5419 (Add rcu user eqs exception hooks for async page fault) > adds rcu_irq_enter/exit() to kvm_async_pf_task_wait() to exit cpu idle eqs > when needed, to protect the code that needs use rcu. There is no need to call > this pairs if async page fault is not triggered from idle task. This is true, but I think the patch is making things more complex where it could be simplifying them. Right now, the "native_safe_halt" branch is calling rcu_irq_exit/enter but the "schedule" branch is not. Could you just pull rcu_irq_exit/enter outside the "if", so that you inform the RCU subsystem even in the !n.halted case? Paolo
diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 71c17a5..c6a7667 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -141,6 +141,8 @@ void kvm_async_pf_task_wait(u32 token) n.token = token; n.cpu = smp_processor_id(); n.halted = is_idle_task(current) || preempt_count() > 1; + if (!n.halted) + rcu_irq_exit(); init_swait_queue_head(&n.wq); hlist_add_head(&n.link, &b->list); raw_spin_unlock(&b->lock); @@ -167,8 +169,9 @@ void kvm_async_pf_task_wait(u32 token) } if (!n.halted) finish_swait(&n.wq, &wait); + else + rcu_irq_exit(); - rcu_irq_exit(); return; } EXPORT_SYMBOL_GPL(kvm_async_pf_task_wait);