From: Scott Wood <scottwood@freescale.com>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Alexander Graf <agraf@suse.de>,
kvm-ppc@vger.kernel.org, kvm@vger.kernel.org
Subject: Re: [PATCH 1/3] kvm/ppc/booke: Hold srcu lock when calling gfn functions
Date: Thu, 02 May 2013 00:27:23 +0000 [thread overview]
Message-ID: <1367454443.29231.20@snotra> (raw)
In-Reply-To: <20130502001553.GA2363@amt.cnet> (from mtosatti@redhat.com on Wed May 1 19:15:53 2013)
On 05/01/2013 07:15:53 PM, Marcelo Tosatti wrote:
> On Fri, Apr 26, 2013 at 07:53:38PM -0500, Scott Wood wrote:
> > diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
> > index 1020119..506c87d 100644
> > --- a/arch/powerpc/kvm/booke.c
> > +++ b/arch/powerpc/kvm/booke.c
> > @@ -832,6 +832,8 @@ int kvmppc_handle_exit(struct kvm_run *run,
> struct kvm_vcpu *vcpu,
> > {
> > int r = RESUME_HOST;
> > int s;
> > + int idx = 0; /* silence bogus uninitialized warning */
> > + bool need_srcu = false;
> >
> > /* update before a new last_exit_type is rewritten */
> > kvmppc_update_timing_stats(vcpu);
> > @@ -847,6 +849,20 @@ int kvmppc_handle_exit(struct kvm_run *run,
> struct kvm_vcpu *vcpu,
> > run->exit_reason = KVM_EXIT_UNKNOWN;
> > run->ready_for_interrupt_injection = 1;
> >
> > + /*
> > + * Don't get the srcu lock unconditionally, because kvm_ppc_pv()
> > + * can call kvm_vcpu_block(), and kvm_ppc_pv() is shared with
> > + * book3s, so dropping the srcu lock there would be awkward.
> > + */
> > + switch (exit_nr) {
> > + case BOOKE_INTERRUPT_ITLB_MISS:
> > + case BOOKE_INTERRUPT_DTLB_MISS:
> > + need_srcu = true;
> > + }
>
> This is not good practice (codepaths should either hold srcu or not
> hold
> it, unconditionally).
How is it different from moving the srcu lock into individual cases of
the switch? I just did it this way to make it easier to add new
exception types if necessary (e.g. at the time I thought I'd end up
adding exceptions which lead to instruction emulation, but I ended up
acquiring the lock further down the path in that case).
> Can you give more details of the issue? (not obvious)
ITLB/DTLB miss call things like gfn_to_memslot() which need the lock
(but don't grab it themselves -- that seems like the real bad practice
here...). The syscall exceptions can't have the SRCU lock held,
because they call kvmppc_kvm_pv which can call kvm_vcpu_block() (yes,
you can sleep with SRCU, but not indefinitely...). kvmppc_kvm_pv is
shared with book3s code, so adding code to drop the srcu lock there
would be a problem since book3s doesn't hold the SRCU lock then...
-Scott
WARNING: multiple messages have this Message-ID (diff)
From: Scott Wood <scottwood@freescale.com>
To: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Alexander Graf <agraf@suse.de>, <kvm-ppc@vger.kernel.org>,
<kvm@vger.kernel.org>
Subject: Re: [PATCH 1/3] kvm/ppc/booke: Hold srcu lock when calling gfn functions
Date: Wed, 1 May 2013 19:27:23 -0500 [thread overview]
Message-ID: <1367454443.29231.20@snotra> (raw)
In-Reply-To: <20130502001553.GA2363@amt.cnet> (from mtosatti@redhat.com on Wed May 1 19:15:53 2013)
On 05/01/2013 07:15:53 PM, Marcelo Tosatti wrote:
> On Fri, Apr 26, 2013 at 07:53:38PM -0500, Scott Wood wrote:
> > diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
> > index 1020119..506c87d 100644
> > --- a/arch/powerpc/kvm/booke.c
> > +++ b/arch/powerpc/kvm/booke.c
> > @@ -832,6 +832,8 @@ int kvmppc_handle_exit(struct kvm_run *run,
> struct kvm_vcpu *vcpu,
> > {
> > int r = RESUME_HOST;
> > int s;
> > + int idx = 0; /* silence bogus uninitialized warning */
> > + bool need_srcu = false;
> >
> > /* update before a new last_exit_type is rewritten */
> > kvmppc_update_timing_stats(vcpu);
> > @@ -847,6 +849,20 @@ int kvmppc_handle_exit(struct kvm_run *run,
> struct kvm_vcpu *vcpu,
> > run->exit_reason = KVM_EXIT_UNKNOWN;
> > run->ready_for_interrupt_injection = 1;
> >
> > + /*
> > + * Don't get the srcu lock unconditionally, because kvm_ppc_pv()
> > + * can call kvm_vcpu_block(), and kvm_ppc_pv() is shared with
> > + * book3s, so dropping the srcu lock there would be awkward.
> > + */
> > + switch (exit_nr) {
> > + case BOOKE_INTERRUPT_ITLB_MISS:
> > + case BOOKE_INTERRUPT_DTLB_MISS:
> > + need_srcu = true;
> > + }
>
> This is not good practice (codepaths should either hold srcu or not
> hold
> it, unconditionally).
How is it different from moving the srcu lock into individual cases of
the switch? I just did it this way to make it easier to add new
exception types if necessary (e.g. at the time I thought I'd end up
adding exceptions which lead to instruction emulation, but I ended up
acquiring the lock further down the path in that case).
> Can you give more details of the issue? (not obvious)
ITLB/DTLB miss call things like gfn_to_memslot() which need the lock
(but don't grab it themselves -- that seems like the real bad practice
here...). The syscall exceptions can't have the SRCU lock held,
because they call kvmppc_kvm_pv which can call kvm_vcpu_block() (yes,
you can sleep with SRCU, but not indefinitely...). kvmppc_kvm_pv is
shared with book3s code, so adding code to drop the srcu lock there
would be a problem since book3s doesn't hold the SRCU lock then...
-Scott
next prev parent reply other threads:[~2013-05-02 0:27 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-27 0:53 [PATCH 1/3] kvm/ppc/booke: Hold srcu lock when calling gfn functions Scott Wood
2013-04-27 0:53 ` Scott Wood
2013-04-27 0:53 ` [PATCH 2/3] kvm/ppc: Hold srcu lock when calling kvm_io_bus_read/write Scott Wood
2013-04-27 0:53 ` Scott Wood
2013-05-02 11:22 ` Alexander Graf
2013-05-02 11:22 ` Alexander Graf
2013-04-27 0:53 ` [PATCH 3/3] kvm: Fix obsolete comment about locking for kvm_io_bus_read/write Scott Wood
2013-04-27 0:53 ` Scott Wood
2013-05-01 23:24 ` Alexander Graf
2013-05-01 23:24 ` Alexander Graf
2013-05-02 7:18 ` Gleb Natapov
2013-05-02 7:18 ` Gleb Natapov
2013-05-02 10:53 ` Alexander Graf
2013-05-02 10:53 ` Alexander Graf
2013-05-02 11:00 ` Gleb Natapov
2013-05-02 11:00 ` Gleb Natapov
2013-05-02 11:25 ` Alexander Graf
2013-05-02 11:25 ` Alexander Graf
2013-05-02 0:15 ` [PATCH 1/3] kvm/ppc/booke: Hold srcu lock when calling gfn functions Marcelo Tosatti
2013-05-02 0:15 ` Marcelo Tosatti
2013-05-02 0:27 ` Scott Wood [this message]
2013-05-02 0:27 ` Scott Wood
2013-05-02 0:30 ` Scott Wood
2013-05-02 0:30 ` Scott Wood
2013-05-02 11:20 ` Alexander Graf
2013-05-02 11:20 ` Alexander Graf
2013-05-02 14:37 ` Marcelo Tosatti
2013-05-02 14:37 ` Marcelo Tosatti
2013-05-02 16:47 ` Scott Wood
2013-05-02 16:47 ` Scott Wood
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=1367454443.29231.20@snotra \
--to=scottwood@freescale.com \
--cc=agraf@suse.de \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.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.