Re: [regression] KVM: hangs and "irq timeout" booting HURD unless -no-kvm-irqchip passed

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux