From: Gleb Natapov <gleb@redhat.com>
To: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Li Zhong <zhong@linux.vnet.ibm.com>,
linux-next list <linux-next@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
paulmck@linux.vnet.ibm.com, sasha.levin@oracle.com,
avi@redhat.com
Subject: Re: [RFC PATCH] Fix abnormal rcu dynticks_nesting values related to async page fault
Date: Tue, 27 Nov 2012 21:27:48 +0200 [thread overview]
Message-ID: <20121127192748.GB7695@redhat.com> (raw)
In-Reply-To: <CAFTL4hxh96wDMpBEid0EN8ir-9C=Z+pdy6viVVK5fyKkRbUOOw@mail.gmail.com>
On Tue, Nov 27, 2012 at 07:12:40PM +0100, Frederic Weisbecker wrote:
> 2012/11/27 Gleb Natapov <gleb@redhat.com>:
> > On Tue, Nov 27, 2012 at 06:30:32PM +0100, Frederic Weisbecker wrote:
> >> 2012/11/27 Gleb Natapov <gleb@redhat.com>:
> >> > diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
> >> > index 4180a87..636800d 100644
> >> > --- a/arch/x86/kernel/kvm.c
> >> > +++ b/arch/x86/kernel/kvm.c
> >> > @@ -113,7 +113,7 @@ void kvm_async_pf_task_wait(u32 token)
> >> > int cpu, idle;
> >> >
> >> > cpu = get_cpu();
> >> > - idle = idle_cpu(cpu);
> >> > + idle = is_idle_task(current);
> >>
> >> I suggest this part goes to a standalone patch.
> >>
> >> > put_cpu();
> >> >
> >> > spin_lock(&b->lock);
> >> > @@ -247,10 +247,7 @@ 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();
> >> > - exit_idle();
> >> > kvm_async_pf_task_wait((u32)read_cr2());
> >> > - rcu_irq_exit();
> >>
> >> Hmm, we still need those above around. I believe we just need to add
> >> rcu_user_exit() in the beginning of that case.
> > The exception may happen in kernel space too. Is calling rcu_user_exit()
> > still OK? Also why calling exit_idle() if we are not exiting idle?
>
> Yeah, rcu_user_exit() takes care of that. And exit_idle() also checks
> we are really idle before firing the notifier.
>
> Now we should probably call back enter_idle() before resuming idle if
> needed. We disable irqs before calling enter_idle(). And exit_idle()
> is called from irqs. This way we ensure it's either called before we
> called local_irq_disable() or while the CPU is halt(). This provides
> the guarantee that enter_idle() is always called before the CPU goes
> to sleep. The fact we call exit_idle() from an exception in idle
> breaks this guarantee. But that's another issue.
What is the semantics of enter_idle()/exit_idle(), what are they used for?
Not present fault happening in idle task does not mean we exit idle
task. If this happens exception handler will execute sti; hlt waiting
for missing page to be ready. Any interrupt happening during this hlt
will do exit_idle() by itself.
--
Gleb.
next prev parent reply other threads:[~2012-11-27 19:27 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 [this message]
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 ` [RFC PATCH v2] Add rcu user eqs exception hooks for " Li Zhong
2012-11-28 12:55 ` 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=20121127192748.GB7695@redhat.com \
--to=gleb@redhat.com \
--cc=avi@redhat.com \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-next@vger.kernel.org \
--cc=paulmck@linux.vnet.ibm.com \
--cc=sasha.levin@oracle.com \
--cc=zhong@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.