From: Li Zhong <zhong@linux•vnet.ibm.com>
To: Frederic Weisbecker <fweisbec@gmail•com>
Cc: linux-next list <linux-next@vger•kernel.org>,
LKML <linux-kernel@vger•kernel.org>,
paulmck@linux•vnet.ibm.com, sasha.levin@oracle•com,
gleb@redhat•com, avi@redhat•com
Subject: [RFC PATCH v2] Add rcu user eqs exception hooks for async page fault
Date: Wed, 28 Nov 2012 16:18:24 +0800 [thread overview]
Message-ID: <1354090704.3054.13.camel@ThinkPad-T5421.cn.ibm.com> (raw)
In-Reply-To: <CAFTL4hx0fc_Jo8wkuRZedW4DVEeQceiHMrWVqTqB5k065Wsg8Q@mail.gmail.com>
Thank you all for the review and education.
Below are my current understandings and an update version. Would you
please help to review it again and give your comments?
Thanks, Zhong
Now it seems to me that it is legal to call rcu_irq_exit/enter() without
a matching rcu_irq_enter/exit() if the cpu is in non rcu idle state.
As opposite, it is illegal to call rcu_irq_exit() without a matching
rcu_irq_enter() if the cpu is in rcu idle state.
But it seems legal to call rcu_irq_enter() without a matching
rcu_irq_exit() if the cpu is in rcu idle state, regarding the
dynticks_nesting value. However, it seems not good to exit the rcu
idle state, if we are actually entering into idle mode, so maybe it's
better to call a matching rcu_irq_exit() before actually idle?
As Frederic pointed out, we need a rcu_user_exit() to exit the user eqs
(if we are in this state) in the beginning. But after some more
thinking, I guess we might also need to call rcu_user_enter() after the
waiting, if we get this page fault from user space. So maybe it's better
to use rcu user eqs exception hooks here?
With rcu_user_exit() at the beginning, now rcu_irq_enter() only protects
the cpu idle eqs, but it's not good to call rcu_irq_exit() after the cpu
halt and the page ready.
So I still want to remove it. And later if it shows that we really needs
rcu somewhere in this code path, maybe we could use RCU_NONIDLE() to
protect it. ( The suspicious RCU usage reported in commit
c5e015d4949aa665 seems related to schedule(), which is not in the code
path if we are in cpu idle eqs )
I think we still need Gleb's patch about the idle check in
kvm_async_pf_task_wait(), and maybe another patch for the
exit_idle()/enter_idle() issue.
Signed-off-by: Li Zhong <zhong@linux•vnet.ibm.com>
---
arch/x86/kernel/kvm.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index 4180a87..e3e7752 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -42,6 +42,7 @@
#include <asm/apic.h>
#include <asm/apicdef.h>
#include <asm/hypervisor.h>
+#include <asm/rcu.h>
static int kvmapf = 1;
@@ -247,10 +248,10 @@ do_async_page_fault(struct pt_regs *regs, unsigned long error_code)
break;
case KVM_PV_REASON_PAGE_NOT_PRESENT:
/* page is swapped out by the host. */
- rcu_irq_enter();
+ exception_enter(regs);
exit_idle();
kvm_async_pf_task_wait((u32)read_cr2());
- rcu_irq_exit();
+ exception_exit(regs);
break;
case KVM_PV_REASON_PAGE_READY:
rcu_irq_enter();
--
1.7.11.4
next prev parent reply other threads:[~2012-11-28 8:18 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-27 5:15 [RFC PATCH] Fix abnormal rcu dynticks_nesting values related to async page fault Li Zhong
2012-11-27 5:58 ` [PATCH rcu] use new nesting value for rcu_dyntick trace in rcu_eqs_enter_common Li Zhong
2012-11-27 15:18 ` Paul E. McKenney
2012-11-27 13:07 ` [RFC PATCH] Fix abnormal rcu dynticks_nesting values related to async page fault Gleb Natapov
2012-11-27 14:01 ` Sasha Levin
2012-11-27 15:25 ` Paul E. McKenney
2012-11-27 15:34 ` Frederic Weisbecker
2012-11-27 14:38 ` Frederic Weisbecker
2012-11-27 15:44 ` Gleb Natapov
2012-11-27 15:56 ` Frederic Weisbecker
2012-11-27 16:19 ` Paul E. McKenney
2012-11-27 16:48 ` Frederic Weisbecker
2012-11-27 16:59 ` Paul E. McKenney
2012-11-27 16:39 ` Gleb Natapov
2012-11-27 16:51 ` Frederic Weisbecker
2012-11-27 17:00 ` Gleb Natapov
2012-11-27 17:30 ` Frederic Weisbecker
2012-11-27 17:47 ` Gleb Natapov
2012-11-27 18:12 ` Frederic Weisbecker
2012-11-27 19:27 ` Gleb Natapov
2012-11-27 22:53 ` Frederic Weisbecker
2012-11-27 22:54 ` Frederic Weisbecker
2012-11-27 15:39 ` Frederic Weisbecker
2012-11-27 16:16 ` Paul E. McKenney
2012-11-27 16:31 ` Frederic Weisbecker
2012-11-27 16:29 ` Frederic Weisbecker
2012-11-28 8:18 ` Li Zhong [this message]
2012-11-28 12:55 ` [RFC PATCH v2] Add rcu user eqs exception hooks for " Frederic Weisbecker
2012-11-28 13:53 ` Gleb Natapov
2012-11-28 14:25 ` Frederic Weisbecker
2012-11-29 11:07 ` Gleb Natapov
2012-11-29 14:47 ` Frederic Weisbecker
2012-11-30 9:18 ` [RFC PATCH v3] " Li Zhong
2012-11-30 10:26 ` Gleb Natapov
2012-12-03 2:08 ` Li Zhong
2012-12-03 8:30 ` Gleb Natapov
2012-12-03 9:57 ` Gleb Natapov
2012-12-04 2:35 ` [ PATCH] " Li Zhong
2012-12-18 13:25 ` Gleb Natapov
2012-12-04 2:36 ` [RFC PATCH v3] " Li Zhong
2012-12-04 5:11 ` Gleb Natapov
2012-12-04 5:40 ` Li Zhong
2012-12-04 13:02 ` Gleb Natapov
2012-12-04 14:28 ` Paul E. McKenney
2012-11-29 1:49 ` [RFC PATCH v2] " Li Zhong
2012-11-29 14:40 ` Frederic Weisbecker
2012-11-29 17:25 ` Gleb Natapov
2012-11-30 8:36 ` Li Zhong
2012-11-30 10:08 ` Gleb Natapov
2012-11-27 16:43 ` [RFC PATCH] Fix abnormal rcu dynticks_nesting values related to " Frederic Weisbecker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1354090704.3054.13.camel@ThinkPad-T5421.cn.ibm.com \
--to=zhong@linux$(echo .)vnet.ibm.com \
--cc=avi@redhat$(echo .)com \
--cc=fweisbec@gmail$(echo .)com \
--cc=gleb@redhat$(echo .)com \
--cc=linux-kernel@vger$(echo .)kernel.org \
--cc=linux-next@vger$(echo .)kernel.org \
--cc=paulmck@linux$(echo .)vnet.ibm.com \
--cc=sasha.levin@oracle$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox