From: Marcelo Tosatti <mtosatti@redhat.com>
To: Scott Wood <scottwood@freescale.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 14:37:53 +0000 [thread overview]
Message-ID: <20130502143753.GA26850@amt.cnet> (raw)
In-Reply-To: <1367454443.29231.20@snotra>
On Wed, May 01, 2013 at 07:27:23PM -0500, Scott Wood wrote:
> 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).
Question: is this piece of code accessing this data structure?
Answer: it depends on a given runtime configuration.
Its confusing.
> >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
Its OK to nest srcu calls as long as there are properly ordered releases:
idx1 = srcu_read_lock()
idx2 = srcu_read_lock()
srcu_read_unlock(idx2)
srcu_read_unlock(idx1)
Is that helpful?
WARNING: multiple messages have this Message-ID (diff)
From: Marcelo Tosatti <mtosatti@redhat.com>
To: Scott Wood <scottwood@freescale.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, 2 May 2013 11:37:53 -0300 [thread overview]
Message-ID: <20130502143753.GA26850@amt.cnet> (raw)
In-Reply-To: <1367454443.29231.20@snotra>
On Wed, May 01, 2013 at 07:27:23PM -0500, Scott Wood wrote:
> 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).
Question: is this piece of code accessing this data structure?
Answer: it depends on a given runtime configuration.
Its confusing.
> >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
Its OK to nest srcu calls as long as there are properly ordered releases:
idx1 = srcu_read_lock()
idx2 = srcu_read_lock()
srcu_read_unlock(idx2)
srcu_read_unlock(idx1)
Is that helpful?
next prev parent reply other threads:[~2013-05-02 14:37 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
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 [this message]
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=20130502143753.GA26850@amt.cnet \
--to=mtosatti@redhat.com \
--cc=agraf@suse.de \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=scottwood@freescale.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.