On Wed, 2012-11-21 at 16:19 +0200, Alex Lyakas wrote: > Hi, > I was advised to turn off irqbalance and reproduced this issue, but > the failure is in a different place now. Now request_threaded_irq() > fails with EBUSY. > According to the code, this can only happen on the path: > request_threaded_irq() -> __setup_irq() > Now in setup irq, the only place where EBUSY can show up for us is here: > ... > raw_spin_lock_irqsave(&desc->lock, flags); > old_ptr = &desc->action; > old = *old_ptr; > if (old) { > /* > * Can't share interrupts unless both agree to and are > * the same type (level, edge, polarity). So both flag > * fields must have IRQF_SHARED set and the bits which > * set the trigger type must match. Also all must > * agree on ONESHOT. > */ > if (!((old->flags & new->flags) & IRQF_SHARED) || > ((old->flags ^ new->flags) & IRQF_TRIGGER_MASK) || > ((old->flags ^ new->flags) & IRQF_ONESHOT)) { > old_name = old->name; > goto mismatch; > } > > /* All handlers must agree on per-cpuness */ > if ((old->flags & IRQF_PERCPU) != > (new->flags & IRQF_PERCPU)) > goto mismatch; > > KVM calls request_threaded_irq() with flags==0, so can it be that > different KVM processes request the same IRQ? Shouldn't be possible, irqs are allocated from a bitmap protected by a mutex, see __irq_alloc_descs > How different KVM > processes spawned simultaneously agree between them on IRQ numbers? They don't, MSI/X vectors are not currently share-able. Can you show that you're actually getting duplicate irq vectors? Thanks, Alex -- 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