From patchwork Mon Jan 26 16:10:38 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcelo Tosatti X-Patchwork-Id: 4000 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n0QGBDpY000744 for ; Mon, 26 Jan 2009 16:11:13 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751394AbZAZQLK (ORCPT ); Mon, 26 Jan 2009 11:11:10 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751454AbZAZQLK (ORCPT ); Mon, 26 Jan 2009 11:11:10 -0500 Received: from mx2.redhat.com ([66.187.237.31]:40698 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751394AbZAZQLI (ORCPT ); Mon, 26 Jan 2009 11:11:08 -0500 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n0QGB6lQ029379 for ; Mon, 26 Jan 2009 11:11:06 -0500 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n0QGB6Ft007248; Mon, 26 Jan 2009 11:11:06 -0500 Received: from amt.cnet (vpn-10-39.str.redhat.com [10.32.10.39]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n0QGB3Rc011650; Mon, 26 Jan 2009 11:11:05 -0500 Received: from amt.cnet (amt.cnet [127.0.0.1]) by amt.cnet (Postfix) with ESMTP id 0A99D55800A; Mon, 26 Jan 2009 14:10:41 -0200 (BRST) Received: (from marcelo@localhost) by amt.cnet (8.14.3/8.14.3/Submit) id n0QGAclg004262; Mon, 26 Jan 2009 14:10:38 -0200 Date: Mon, 26 Jan 2009 14:10:38 -0200 From: Marcelo Tosatti To: Gleb Natapov Cc: Avi Kivity , kvm@vger.kernel.org Subject: Re: [PATCH v2] report IRQ injection status to userspace. Message-ID: <20090126161038.GB3894@amt.cnet> References: <20090121113227.GH27675@redhat.com> <20090121123428.GI27675@redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20090121123428.GI27675@redhat.com> User-Agent: Mutt/1.5.18 (2008-05-17) X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Hi Gleb, On Wed, Jan 21, 2009 at 02:34:28PM +0200, Gleb Natapov wrote: > Use this one instead. Adds capabilities checks. > > Signed-off-by: Gleb Natapov > index 179dcb0..2752016 100644 > --- a/arch/x86/kvm/i8259.c > +++ b/arch/x86/kvm/i8259.c > @@ -76,12 +76,13 @@ void kvm_pic_clear_isr_ack(struct kvm *kvm) > /* > * set irq level. If an edge is detected, then the IRR is set to 1 > */ > -static inline void pic_set_irq1(struct kvm_kpic_state *s, int irq, int level) > +static inline int pic_set_irq1(struct kvm_kpic_state *s, int irq, int level) > { > - int mask; > + int mask, ret = 1; > mask = 1 << irq; > if (s->elcr & mask) /* level triggered */ > if (level) { > + ret = !(s->irr & mask); > s->irr |= mask; > s->last_irr |= mask; > } else { > @@ -90,11 +91,15 @@ static inline void pic_set_irq1(struct kvm_kpic_state *s, int irq, int level) > } > else /* edge triggered */ > if (level) { > - if ((s->last_irr & mask) == 0) > + if ((s->last_irr & mask) == 0) { > + ret = !(s->irr & mask); > s->irr |= mask; > + } > s->last_irr |= mask; > } else > s->last_irr &= ~mask; > + > + return (s->imr & mask) ? -1 : ret; > } Can you add some documentation, perhaps through definitions, like: #define KVM_IRQ_LINE_STATUS_MASKED -1 #define KVM_IRQ_LINE_STATUS_FAIL 0 #define KVM_IRQ_LINE_STATUS_INJECTED 1 But with better names. This makes the kernel code more explicit too. > -void kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int level) > +int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int level) > { > u32 old_irr = ioapic->irr; > u32 mask = 1 << irq; > union ioapic_redir_entry entry; > + int ret = 1; -1 here ? And then, in the userspace part, you consider -1 as "injected": Is that what you intended ? Other than that looks fine to me. --- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/qemu/hw/i8259.c b/qemu/hw/i8259.c index 6d41a5e..9da4360 100644 --- a/qemu/hw/i8259.c +++ b/qemu/hw/i8259.c @@ -186,9 +186,14 @@ static void i8259_set_irq(void *opaque, int irq, int level) { PicState2 *s = opaque; #ifdef KVM_CAP_IRQCHIP - if (kvm_enabled()) - if (kvm_set_irq(irq, level)) - return; + if (kvm_enabled()) { + int pic_ret; + if (kvm_set_irq(irq, level, &pic_ret)) { + if (pic_ret != 0) + apic_set_irq_delivered(); + return; + } + } #endif