kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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:13:26 +0200	[thread overview]
Message-ID: <4F09C0A6.8060204@redhat.com> (raw)
In-Reply-To: <1E83CE9A-36E2-4351-9EBF-38AAD439F6A7@suse.de>

On 01/08/2012 05:37 PM, Alexander Graf wrote:
> On 08.01.2012, at 16:22, Avi Kivity wrote:
>
> > On 01/08/2012 05:11 PM, Alexander Graf wrote:
> >> On 08.01.2012, at 14:18, Avi Kivity wrote:
> >> 
> >>> On 01/04/2012 03:10 AM, Alexander Graf wrote:
> >>>> From: Scott Wood <scottwood@freescale.com>
> >>>> 
> >>>> Currently we check prior to returning from a lightweight exit,
> >>>> but not prior to initial entry.
> >>>> 
> >>>> book3s already does a similar test.
> >>>> 
> >>>> Signed-off-by: Scott Wood <scottwood@freescale.com>
> >>>> Signed-off-by: Alexander Graf <agraf@suse.de>
> >>>> ---
> >>>> arch/powerpc/kvm/booke.c |   10 +++++++++-
> >>>> 1 files changed, 9 insertions(+), 1 deletions(-)
> >>>> 
> >>>> diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c
> >>>> index b642200..9c78589 100644
> >>>> --- a/arch/powerpc/kvm/booke.c
> >>>> +++ b/arch/powerpc/kvm/booke.c
> >>>> @@ -322,11 +322,19 @@ int kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu)
> >>>> 	}
> >>>> 
> >>>> 	local_irq_disable();
> >>>> +
> >>>> +	if (signal_pending(current)) {
> >>>> +		kvm_run->exit_reason = KVM_EXIT_INTR;
> >>>> +		ret = -EINTR;
> >>>> +		goto out;
> >>>> +	}
> >>>> +
> >>>> 	kvm_guest_enter();
> >>>> 	ret = __kvmppc_vcpu_run(kvm_run, vcpu);
> >>>> 	kvm_guest_exit();
> >>>> -	local_irq_enable();
> >>>> 
> >>>> 
> >>> 
> >>> In general a single check prior to entry is sufficient (well, in
> >>> addition to the one in kvm_vcpu_block()).
> >> 
> >> Yes, and IIUC this is the single check prior to entry. On lightweight exit, we don't return from __kvmppc_vcpu_run, but only call kvmppc_handle_exit() and if that exits that we return to the guest, we stay inside of __kvmppc_vcpu_run and don't return from here.
> > 
> > It means you check twice per heavyweight exit, no?  Once here, and once
> > when kvmppc_handle_exit() returns.  If, instead, you move the check to
> > just before the lightweight entry, you check just once per entry, like x86.
>
> You mean we check twice in case a heavyweight exit occurs right after another heavyweight exit? We need to check whether a signal is pending to determine heavyweight exits, so we definitely have to check at the end of the exit handlers:
>
>   - check signal (none pending)
>   - enter guest
>   - exit guest because an external interrupt occurs (lightweight)
>   - check signal (pending now because we got preempted)
>   -> make exit heavyweight
>
> If however there already is a signal pending before we enter the guest and the guest is running an endless loop and the host doesn't have any timers configured because it's just waiting for the signal to be handled, we would be in a dead loop. So we have to check before entry either way.

Yes, but you're checking in the wrong place.

What you have now is:

   if (!signal_pending())
         do
              enter guest
         while (!signal_pending && is_lightweight_exit)

What x86 does is

   while (!signal_pending() && can_reenter)
           can_reenter = enter guest

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.

-- 
error compiling committee.c: too many arguments to function


  reply	other threads:[~2012-01-08 16:13 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 [this message]
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
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=4F09C0A6.8060204@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).