All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Steve Rutherford <srutherford@google.com>,
	KVM list <kvm@vger.kernel.org>
Subject: Re: [PATCH v7 4/4] KVM: x86: Add support for local interrupt requests from userspace
Date: Thu, 30 Jul 2015 11:33:47 +0200	[thread overview]
Message-ID: <55B9EF7B.9080806@redhat.com> (raw)
In-Reply-To: <1438237303-19124-4-git-send-email-srutherford@google.com>

On 30/07/2015 08:21, Steve Rutherford wrote:
>   */
>  int kvm_cpu_has_injectable_intr(struct kvm_vcpu *v)
>  {
> -	if (!irqchip_in_kernel(v->kvm))
> +	if (!pic_in_kernel(v->kvm))
>  		return v->arch.interrupt.pending;
>  
>  	if (kvm_cpu_has_extint(v))
> @@ -75,7 +88,7 @@ int kvm_cpu_has_injectable_intr(struct kvm_vcpu *v)
>   */
>  int kvm_cpu_has_interrupt(struct kvm_vcpu *v)
>  {
> -	if (!irqchip_in_kernel(v->kvm))
> +	if (!pic_in_kernel(v->kvm))
>  		return v->arch.interrupt.pending;
>  
>  	if (kvm_cpu_has_extint(v))
> @@ -103,7 +123,7 @@ int kvm_cpu_get_interrupt(struct kvm_vcpu *v)
>  {
>  	int vector;
>  
> -	if (!irqchip_in_kernel(v->kvm))
> +	if (!pic_in_kernel(v->kvm) && v->arch.interrupt.pending)
>  		return v->arch.interrupt.nr;
>  
>  	vector = kvm_cpu_get_extint(v);

I have one more doubt about these three hunks.

v->arch.interrupt should not be used at all with split irqchip.  In 
particular:

- kvm_cpu_has_injectable_intr should go through kvm_cpu_has_extint and 
query pending_userspace_extint

- same for kvm_cpu_has_interrupt

- kvm_cpu_get_interrupt should go through kvm_cpu_get_extint and 
return/clear v->arch.pending_external_vector.

So I think !irqchip_in_kernel(v->kvm) is the right test.  In 
particular, with pic_in_kernel, kvm_cpu_has_extint's irqchip_split case 
is dead.  I am then not sure how you reach this code in x86.c:

	/* kvm_cpu_has_injectable_intr doesn't take extints into account? */
        } else if (kvm_cpu_has_injectable_intr(vcpu)) {
                /*
                 * Because interrupts can be injected asynchronously, we are
                 * calling check_nested_events again here to avoid a race condition.
                 * See https://lkml.org/lkml/2014/7/2/60 for discussion about this
                 * proposal and current concerns.  Perhaps we should be setting
                 * KVM_REQ_EVENT only on certain events and not unconditionally?
                 */
                if (is_guest_mode(vcpu) && kvm_x86_ops->check_nested_events) {
                        r = kvm_x86_ops->check_nested_events(vcpu, req_int_win);
                        if (r != 0)
                                return r;
                }
                if (kvm_x86_ops->interrupt_allowed(vcpu)) {
			/*
			 * kvm_cpu_get_interrupt does take extints into account
			 * because of the " && v->arch.interrupt.pending", but
			 * you won't get here unless you have an APIC interrupt
			 * pending!
			 */
                        kvm_queue_interrupt(vcpu, kvm_cpu_get_interrupt(vcpu),
                                            false);
                        kvm_x86_ops->set_irq(vcpu);
                }
        }

Paolo

  parent reply	other threads:[~2015-07-30  9:33 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-30  6:21 [PATCH v7 1/4] KVM: x86: Split the APIC from the rest of IRQCHIP Steve Rutherford
2015-07-30  6:21 ` [PATCH v7 2/4] KVM: x86: Add KVM exit for IOAPIC EOIs Steve Rutherford
2015-07-30  6:21 ` [PATCH v7 3/4] KVM: x86: Add EOI exit bitmap inference Steve Rutherford
2015-07-30  6:21 ` [PATCH v7 4/4] KVM: x86: Add support for local interrupt requests from userspace Steve Rutherford
2015-07-30  8:21   ` Paolo Bonzini
2015-07-30  9:33   ` Paolo Bonzini [this message]
2015-07-30  8:21 ` [PATCH v7 1/4] KVM: x86: Split the APIC from the rest of IRQCHIP Paolo Bonzini
2015-07-30  8:37   ` Steve Rutherford
2015-07-30  9:38     ` Paolo Bonzini
2015-07-30 21:19       ` Steve Rutherford
2015-07-31  8:32         ` Jan Kiszka

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=55B9EF7B.9080806@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=srutherford@google.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.