From: Avi Kivity <avi@redhat.com>
To: Alexander Graf <agraf@suse.de>
Cc: kvm-ppc@vger.kernel.org, kvm list <kvm@vger.kernel.org>,
Marcelo Tosatti <mtosatti@redhat.com>,
Scott Wood <scottwood@freescale.com>
Subject: Re: [PATCH 13/50] KVM: PPC: booke: check for signals in kvmppc_vcpu_run
Date: Sun, 08 Jan 2012 18:45:02 +0200 [thread overview]
Message-ID: <4F09C80E.9070302@redhat.com> (raw)
In-Reply-To: <61F41AFA-369A-440A-87E4-5667FF774443@suse.de>
On 01/08/2012 06:41 PM, Alexander Graf wrote:
> On 08.01.2012, at 17:26, Avi Kivity wrote:
>
> > On 01/08/2012 06:21 PM, Alexander Graf wrote:
> >>>
> >>> well, that's not actually what x86 does, but what it should be doing.
> >>> The point is checking for signals after an exit is meaningless. You've
> >>> exited, so the guest can't be holding off a signal for the host. The
> >>> check after the exit is really meant for the next entry, but it doesn't
> >>> cover the first entry, so you have another check before that.
> >>
> >> Yes, but the end of the exit handler is basically the beginning of the entry loop. If we already know that we're in a heavy weight exit, we don't check for signals anymore:
> >>
> >> if (!(r & RESUME_HOST)) {
> >> /* To avoid clobbering exit_reason, only check for signals if
> >> * we aren't already exiting to userspace for some other
> >> * reason. */
> >> if (signal_pending(current)) {
> >> run->exit_reason = KVM_EXIT_INTR;
> >> r = (-EINTR << 2) | RESUME_HOST | (r & RESUME_FLAG_NV);
> >> kvmppc_account_exit(vcpu, SIGNAL_EXITS);
> >> }
> >> }
> >>
> >> That way we do basically what you're suggesting, but are a bit more explicit, having checking code at the beginning and end and some conditional checking if it's required or not.
> >>
> >>
> >
> > What I'm thinking of is unifying all of this. But ppc driving the exit
> > handler from assembly doesn't allow this.
>
> Exactly :). The place you're thinking of having the code at is in asm code. And it has to be - the whole point of lightweight exits is that we don't have to restore all registers, which we would have to do if we returned from __kvmppc_vcpu_run. And that's basically what you'd need to keep this in the same code, right?
Right. We could also have common code which is #ifdefed out for those
who don't like it.
>
> > The goal is not just to save code, but to make sure that the various
> > assumptions that generic code (like a future kvm_vcpu_kick()) makes are
> > satisfied implicitly, by having just one copy.
>
> Well, yes. I agree that I'd prefer to have it in one place but I can't think of a way to make this really technically possible by keeping the code optimized. Fortunately there are very few assumptions based on having the code structured in exactly the way you describe above though.
>
> The reason our kvm_vcpu_kick() implementation is slightly different from x86 is certainly not because we're doing the lightweight exits the way we do :).
I'm looking at it from a different angle. If most of the code is common
the natural place to add a helper is in common code. If it's not, then
you add it locally. Eventually (=now) everyone has their own set of
helpers, and it's really hard to unify them because you can't keep track
of all of the assumptions that are embedded deeply within the code.
It' easier to add stuff that it is to delete stuff.
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2012-01-08 16:45 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-04 1:09 [PULL 00/50] ppc patch queue 2012-01-04 Alexander Graf
2012-01-04 1:09 ` [PATCH 01/50] KVM: PPC: e500: don't translate gfn to pfn with preemption disabled Alexander Graf
2012-01-04 1:10 ` [PATCH 02/50] KVM: PPC: e500: Eliminate preempt_disable in local_sid_destroy_all Alexander Graf
2012-01-04 1:10 ` [PATCH 03/50] KVM: PPC: e500: clear up confusion between host and guest entries Alexander Graf
2012-01-04 1:10 ` [PATCH 04/50] KVM: PPC: e500: MMU API Alexander Graf
2012-01-08 13:13 ` Avi Kivity
2012-01-08 14:52 ` Alexander Graf
2012-01-08 14:55 ` Avi Kivity
2012-01-08 15:16 ` Alexander Graf
2012-01-08 15:27 ` Avi Kivity
2012-01-04 1:10 ` [PATCH 05/50] KVM: PPC: e500: tlbsx: fix tlb0 esel Alexander Graf
2012-01-04 1:10 ` [PATCH 06/50] KVM: PPC: e500: Don't hardcode PIR=0 Alexander Graf
2012-01-08 13:14 ` Avi Kivity
2012-01-08 14:53 ` Alexander Graf
2012-01-08 14:56 ` Avi Kivity
2012-01-04 1:10 ` [PATCH 07/50] KVM: PPC: Add generic single register ioctls Alexander Graf
2012-01-04 20:08 ` Scott Wood
2012-01-05 2:32 ` Alexander Graf
2012-01-05 4:07 ` Alexander Graf
2012-01-05 20:53 ` Scott Wood
2012-01-08 12:38 ` Avi Kivity
2012-01-04 1:10 ` [PATCH 08/50] KVM: PPC: Add support for explicit HIOR setting Alexander Graf
2012-01-04 20:12 ` Scott Wood
2012-01-05 2:36 ` Alexander Graf
2012-01-05 17:16 ` Scott Wood
2012-01-06 2:35 ` Alexander Graf
2012-01-06 21:12 ` Scott Wood
2012-01-07 1:14 ` Alexander Graf
2012-01-09 19:52 ` Scott Wood
2012-01-04 1:10 ` [PATCH 09/50] KVM: PPC: E500: Support hugetlbfs Alexander Graf
2012-01-08 13:16 ` Avi Kivity
2012-01-04 1:10 ` [PATCH 10/50] PPC: Fix race in mtmsr paravirt implementation Alexander Graf
2012-01-04 1:10 ` [PATCH 11/50] Fix DEC truncation for greater than 0xffff_ffff/1000 Alexander Graf
2012-01-04 1:10 ` [PATCH 12/50] KVM: booke: Do Not start decrementer when SPRN_DEC set 0 Alexander Graf
2012-01-04 1:10 ` [PATCH 13/50] KVM: PPC: booke: check for signals in kvmppc_vcpu_run Alexander Graf
2012-01-08 13:18 ` Avi Kivity
2012-01-08 15:11 ` Alexander Graf
2012-01-08 15:22 ` Avi Kivity
2012-01-08 15:37 ` Alexander Graf
2012-01-08 16:13 ` Avi Kivity
2012-01-08 16:21 ` Alexander Graf
2012-01-08 16:26 ` Avi Kivity
2012-01-08 16:41 ` Alexander Graf
2012-01-08 16:45 ` Avi Kivity [this message]
2012-01-08 16:54 ` Alexander Graf
2012-01-04 1:10 ` [PATCH 14/50] KVM: PPC: Rename deliver_interrupts to prepare_to_enter Alexander Graf
2012-01-04 1:10 ` [PATCH 15/50] KVM: PPC: Move prepare_to_enter call site into subarch code Alexander Graf
2012-01-04 1:10 ` [PATCH 16/50] KVM: PPC: booke: Check for MSR[WE] in prepare_to_enter Alexander Graf
2012-01-04 1:10 ` [PATCH 17/50] KVM: PPC: booke: Fix int_pending calculation for MSR[EE] paravirt Alexander Graf
2012-01-04 1:10 ` [PATCH 18/50] KVM: PPC: booke: Paravirtualize wrtee Alexander Graf
2012-01-04 1:10 ` [PATCH 19/50] KVM: PPC: Paravirtualize SPRG4-7, ESR, PIR, MASn Alexander Graf
2012-01-08 13:20 ` Avi Kivity
2012-01-04 1:10 ` [PATCH 20/50] KVM: PPC: booke: Improve timer register emulation Alexander Graf
2012-01-04 1:10 ` [PATCH 21/50] KVM: PPC: Book3s: PR: Disable preemption in vcpu_run Alexander Graf
2012-01-04 1:10 ` [PATCH 22/50] KVM: PPC: Book3s: PR: No irq_disable " Alexander Graf
2012-01-04 1:10 ` [PATCH 23/50] KVM: PPC: Use get/set for to_svcpu to help preemption Alexander Graf
2012-01-04 1:10 ` [PATCH 24/50] KVM: PPC: align vcpu_kick with x86 Alexander Graf
2012-01-08 13:24 ` Avi Kivity
2012-01-08 15:14 ` Alexander Graf
2012-01-08 15:32 ` Christoffer Dall
2012-01-04 1:10 ` [PATCH 25/50] KVM: PPC: Book3S: PR: Fix signal check race Alexander Graf
2012-01-04 1:10 ` [PATCH 26/50] KVM: PPC: e500: Fix TLBnCFG in KVM_CONFIG_TLB Alexander Graf
2012-01-04 1:10 ` [PATCH 27/50] KVM: PPC: e500: use hardware hint when loading TLB0 entries Alexander Graf
2012-01-04 1:10 ` [PATCH 28/50] KVM: PPC: Avoid patching paravirt template code Alexander Graf
2012-01-04 1:10 ` [PATCH 29/50] KVM: PPC: Make wakeups work again for Book3S HV guests Alexander Graf
2012-01-04 1:10 ` [PATCH 30/50] KVM: PPC: Move kvm_vcpu_ioctl_[gs]et_one_reg down to platform-specific code Alexander Graf
2012-01-04 1:10 ` [PATCH 31/50] KVM: PPC: Keep a record of HV guest view of hashed page table entries Alexander Graf
2012-01-04 1:10 ` [PATCH 32/50] KVM: PPC: Keep page physical addresses in per-slot arrays Alexander Graf
2012-01-04 1:10 ` [PATCH 33/50] KVM: PPC: Add an interface for pinning guest pages in Book3s HV guests Alexander Graf
2012-01-04 1:10 ` [PATCH 34/50] KVM: PPC: Make the H_ENTER hcall more reliable Alexander Graf
2012-01-04 1:10 ` [PATCH 35/50] KVM: PPC: Only get pages when actually needed, not in prepare_memory_region() Alexander Graf
2012-01-04 1:10 ` [PATCH 36/50] KVM: PPC: Allow use of small pages to back Book3S HV guests Alexander Graf
2012-01-04 1:10 ` [PATCH 37/50] KVM: PPC: Allow I/O mappings in memory slots Alexander Graf
2012-01-04 1:10 ` [PATCH 38/50] KVM: PPC: Maintain a doubly-linked list of guest HPTEs for each gfn Alexander Graf
2012-01-04 1:10 ` [PATCH 39/50] KVM: PPC: Implement MMIO emulation support for Book3S HV guests Alexander Graf
2012-01-04 1:10 ` [PATCH 40/50] KVM: PPC: Implement MMU notifiers " Alexander Graf
2012-01-08 13:29 ` Avi Kivity
2012-01-08 15:15 ` Alexander Graf
2012-01-08 15:24 ` Avi Kivity
2012-01-08 15:41 ` Alexander Graf
2012-01-04 1:10 ` [PATCH 41/50] KVM: Add barriers to allow mmu_notifier_retry to be used locklessly Alexander Graf
2012-01-04 1:10 ` [PATCH 42/50] KVM: PPC: Allow for read-only pages backing a Book3S HV guest Alexander Graf
2012-01-04 1:10 ` [PATCH 43/50] KVM: PPC: Fix vcpu_create dereference before validity check Alexander Graf
2012-01-04 1:10 ` [PATCH 44/50] KVM: PPC: Add KVM_CAP_NR_VCPUS and KVM_CAP_MAX_VCPUS Alexander Graf
2012-01-04 1:10 ` [PATCH 45/50] KVM: PPC: Book3S HV: Keep HPTE locked when invalidating Alexander Graf
2012-01-04 1:10 ` [PATCH 46/50] KVM: PPC: Book3s HV: Maintain separate guest and host views of R and C bits Alexander Graf
2012-01-04 1:10 ` [PATCH 47/50] KVM: PPC: Book3S HV: Use the hardware referenced bit for kvm_age_hva Alexander Graf
2012-01-04 1:10 ` [PATCH 48/50] KVM: PPC: Book3s HV: Implement get_dirty_log using hardware changed bit Alexander Graf
2012-01-04 1:10 ` [PATCH 49/50] KVM: PPC: booke: Add booke206 TLB trace Alexander Graf
2012-01-04 1:10 ` [PATCH 50/50] KVM: PPC: Use the vcpu kmem_cache when allocating new VCPUs Alexander Graf
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=4F09C80E.9070302@redhat.com \
--to=avi@redhat.com \
--cc=agraf@suse.de \
--cc=kvm-ppc@vger.kernel.org \
--cc=kvm@vger.kernel.org \
--cc=mtosatti@redhat.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).