Re: [RFC 3/4] xHCI: Enable multiple interrupters

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

 



Hi Andiry,

Now that I have a bit of time on my hands (before the next crisis
comes), I finally took at look at your multiple event rings patchset.

The biggest issue is that when an interrupt comes in for any MSI-X
interrupter, you try to service the event rings for all interrupters.
I think you would have fewer cache misses if you only serviced the
interrupter that is tied to that particular CPU.

Matthew has a couple patches to make it easier to only service the MSI-X
vector that caused the xHCI driver interrupt.  He'll be sending those
shortly.  Can you please review them and look at rebasing this patchset
on top of those and the usb-next tree?  I'd like to try to get this
patchset into 2.6.41/3.1.

Sarah Sharp

On Thu, Feb 17, 2011 at 06:07:16PM +0800, Andiry Xu wrote:
> @@ -2088,9 +2092,9 @@ irqreturn_t xhci_irq(struct usb_hcd *hcd)]
...
> @@ -2126,53 +2121,75 @@ hw_died:
>  	 */
>  	status |= STS_EINT;
>  	xhci_writel(xhci, status, &xhci->op_regs->status);
> -	/* FIXME when MSI-X is supported and there are multiple vectors */
> -	/* Clear the MSI-X event interrupt status */
>  
> -	if (hcd->irq != -1) {
> -		u32 irq_pending;
> -		/* Acknowledge the PCI interrupt */
> -		irq_pending = xhci_readl(xhci, &xhci->ir_set->irq_pending);
> -		irq_pending |= 0x3;
> -		xhci_writel(xhci, irq_pending, &xhci->ir_set->irq_pending);
> -	}
> +	/* Check all the interrupters */
> +	for (i = 0; i < xhci->intr_num; i++) {
> +		xhci->ir_set = (void *) &xhci->run_regs->ir_set[i];
> +		if (hcd->irq != -1) {
> +			u32 irq_pending;
> +			/* Acknowledge the PCI interrupt */
> +			irq_pending =
> +				xhci_readl(xhci, &xhci->ir_set->irq_pending);
> +			/* If the interrupt is not from this interrupter,
> +			 * continue immediately
> +			 */
> +			if (!(irq_pending & 0x1))
> +				continue;
> +			irq_pending |= 0x3;
> +			xhci_writel(xhci, irq_pending,
> +				&xhci->ir_set->irq_pending);
> +		}
>  
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux