On 02/17/2012 06:15 PM, Clemens Ladisch wrote: > Alex,Shi wrote: >>> The controller driver will need to know which of the multiple MSI-X >>> interrupts has been raised: >>> >>> irqreturn_t (*msix_irq)(struct usb_hcd *hcd, unsigned int nr_or_index); >> >> Actually, hcd has 2 object for msix, msix_count and msix_entries. >> >> Do you mean msix_count maybe smaller than we decide in hcd_setup_msix()? > > No. But when msic_count > 1, we have multiple interrupts. > >> Which situation will make this? > > Assume that an XHCI controller has two rings, and that each one gets its > own MSI-X interrupt. How should the driver decide which of the rings > needs to be handled? > > irqreturn_t xhci_msix_irq(struct usb_hcd *hcd) > { > struct xhci_hcd *xhci = hcd_to_xhci(hcd); > > if (...) > handle(xhci->ring[0]); > else > handle(xhci->ring[1]); > } > > I.e., what should go into the if()? > > Currently xHCI driver only support one ERST event ring. If we need to support multiple event rings in the future, it's simple: in usb_hcd_request_msi_msix_irqs, change the last parameter of request_irq() to xhci->erst[i], and we can get the corresponding erst[i] in xhci_msi_irq() like this: irqreturn_t xhci_msi_irq(int irq, void *dev_id) { struct xhci_erst *erst = dev_id; ... /* Handle corresponding event ring pointed by erst */ } See Matthew Wilcox's patchset below for reference: www.spinics.net/lists/linux-usb/msg47353.html Thanks, Andiry Andiry -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html