Re: pci_enable_msix() fails with ENOMEM/EINVAL

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

 



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


[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