From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Gleb Natapov <gleb@redhat.com>
Cc: Sasha Levin <levinsasha928@gmail.com>,
Avi Kivity <avi@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
Thomas Gleixner <tglx@linutronix.de>,
Peter Zijlstra <peterz@infradead.org>,
Ingo Molnar <mingo@elte.hu>, kvm <kvm@vger.kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
Dave Jones <davej@redhat.com>
Subject: Re: kvm: RCU warning in async pf
Date: Wed, 4 Apr 2012 07:04:16 -0700 [thread overview]
Message-ID: <20120404140416.GF2302@linux.vnet.ibm.com> (raw)
In-Reply-To: <20120404123033.GD11918@redhat.com>
On Wed, Apr 04, 2012 at 03:30:33PM +0300, Gleb Natapov wrote:
> On Tue, Apr 03, 2012 at 01:52:26PM +0300, Gleb Natapov wrote:
> > On Mon, Apr 02, 2012 at 08:54:32PM -0400, Sasha Levin wrote:
> > > Hi all,
> > >
> > > I got the spew at the bottom of the mail in a KVM guest using the KVM tools and running trinity.
> > >
> > > I'm not quite sure how default_idle managed to trigger a pagefault, so that part looks odd to me.
> > >
> > This is not regular page fault. This is async page fault that tells the
> > guest that a page, previously swapped out by hypervisor, is now swapped
> > back in and it can happen while vcpu is idle. The code does not leave
> > idle state properly though. We probably need to call rcu_irq_enter()
> > there. Will look into it.
> >
>
> The patch below solves it for me:
>
> "Page ready" async PF can kick vcpu out of idle state much like IRQ.
> We need to tell RCU about this.
This is invoked from an exception or interrupt handler, not from
process-level code? If so:
Reviewed-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
> Signed-off-by: Gleb Natapov <gleb@redhat.com>
> diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
> index f0c6fd6..380079f 100644
> --- a/arch/x86/kernel/kvm.c
> +++ b/arch/x86/kernel/kvm.c
> @@ -38,6 +38,7 @@
> #include <asm/traps.h>
> #include <asm/desc.h>
> #include <asm/tlbflush.h>
> +#include <asm/idle.h>
>
> static int kvmapf = 1;
>
> @@ -253,7 +254,10 @@ do_async_page_fault(struct pt_regs *regs, unsigned long error_code)
> kvm_async_pf_task_wait((u32)read_cr2());
> break;
> case KVM_PV_REASON_PAGE_READY:
> + rcu_irq_enter();
> + exit_idle();
> kvm_async_pf_task_wake((u32)read_cr2());
> + rcu_irq_exit();
> break;
> }
> }
> --
> Gleb.
>
next prev parent reply other threads:[~2012-04-04 14:12 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-04-03 0:54 kvm: RCU warning in async pf Sasha Levin
2012-04-03 10:52 ` Gleb Natapov
2012-04-04 12:30 ` Gleb Natapov
2012-04-04 14:04 ` Paul E. McKenney [this message]
2012-04-04 14:18 ` Gleb Natapov
2012-04-04 20:13 ` Sasha Levin
2012-04-05 16:10 ` Avi Kivity
2012-04-14 9:44 ` Peter Zijlstra
2012-04-16 10:28 ` Gleb Natapov
2012-04-16 12:58 ` Gleb Natapov
2012-04-16 13:05 ` Peter Zijlstra
2012-04-16 13:08 ` Gleb Natapov
2012-04-16 13:18 ` Peter Zijlstra
2012-04-16 13:27 ` Peter Zijlstra
2012-04-16 14:17 ` Gleb Natapov
2012-04-16 14:24 ` Peter Zijlstra
2012-04-03 13:06 ` Paul E. McKenney
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=20120404140416.GF2302@linux.vnet.ibm.com \
--to=paulmck@linux.vnet.ibm.com \
--cc=avi@redhat.com \
--cc=davej@redhat.com \
--cc=gleb@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=levinsasha928@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mtosatti@redhat.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
/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.