From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: [regression] KVM: hangs and "irq timeout" booting HURD unless -no-kvm-irqchip passed Date: Tue, 8 Feb 2011 16:41:43 +0200 Message-ID: <20110208144143.GM14984@redhat.com> References: <1283171743-10766-1-git-send-email-avi@redhat.com> <1283171743-10766-2-git-send-email-avi@redhat.com> <20110207060030.GA1896@elie> <4D4FE7E5.2040308@redhat.com> <20110207124513.GB14984@redhat.com> <20110207132729.GC14984@redhat.com> <20110208014032.GB1858@elie> <20110208120037.GJ14984@redhat.com> <20110208142253.GA8243@amt.cnet> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Jonathan Nieder , Avi Kivity , kvm@vger.kernel.org, Michael Tokarev , Guillem Jover To: Marcelo Tosatti Return-path: Received: from mx1.redhat.com ([209.132.183.28]:31267 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754047Ab1BHOlu (ORCPT ); Tue, 8 Feb 2011 09:41:50 -0500 Content-Disposition: inline In-Reply-To: <20110208142253.GA8243@amt.cnet> Sender: kvm-owner@vger.kernel.org List-ID: On Tue, Feb 08, 2011 at 12:22:53PM -0200, Marcelo Tosatti wrote: > On Tue, Feb 08, 2011 at 02:00:37PM +0200, Gleb Natapov wrote: > > On Mon, Feb 07, 2011 at 07:40:55PM -0600, Jonathan Nieder wrote: > > > Gleb Natapov wrote: > > > > > > > Is this patch helps? > > > > > > > > diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c > > > > index 3cece05..62b1dde 100644 > > > > --- a/arch/x86/kvm/i8259.c > > > > +++ b/arch/x86/kvm/i8259.c > > > > @@ -549,6 +549,9 @@ static void pic_irq_request(struct kvm *kvm, int level) > > > > struct kvm_pic *s = pic_irqchip(kvm); > > > > int irq = pic_get_irq(&s->pics[0]); > > > > > > > > + if (s->output && !level) > > > > + s->pics[0].isr_ack = 0xff; > > > > + > > > > > > Yes, it does (tested on top of kvm/master). Thanks! > > Thanks for testing. Can you test this one too please: > > > > diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c > > index 3cece05..5528484 100644 > > --- a/arch/x86/kvm/i8259.c > > +++ b/arch/x86/kvm/i8259.c > > @@ -62,9 +62,6 @@ static void pic_unlock(struct kvm_pic *s) > > } > > > > if (!found) > > - found = s->kvm->bsp_vcpu; > > - > > - if (!found) > > return; > > > > kvm_make_request(KVM_REQ_EVENT, found); > > Gleb, > > I don't think the isr_ack logic is overly complex that it should be Well we continue to find bugs in it. > removed. For some cases it is still beneficial, see example case on > commit e48258009d941, which is not handled by kick coalescing of > kvm_vcpu_kick. I think the code I've send will not exhibit the behaviour described by this commit since in that case s->output will never become zero (kvm_apic_accept_pic_intr() should return false). > > What is the problem with Hurd exactly? The problem is not with Hurd, but with our pic emulation. PIT sends interrupt while it is unmasked in PIC, HURD never gets it (probably interrupts are disabled by vcpu), HURD masks PIT interrupt, then it unmasks it and never gets it since previous one was not acked yet and isr_ack logic prevent vcpu from been kicked again (and since KVM_REQ_EVENT is set as part of kick logic vcpu never checks interrupt availability again). -- Gleb.