Re: [PATCH] usb: enable pci MSI/MSIX in usb core

From: Sarah Sharp
Date: Tue Feb 07 2012 - 17:13:17 EST

On Tue, Feb 07, 2012 at 09:27:43AM -0800, Sarah Sharp wrote:
> I'm trying to track down an oops on my for-usb-linus queue that could
> either be related to Alex's original MSI work around patch, or the patch
> Oliver posted for working around PCI MMIO not being enabled fast enough.
> I don't want to review this MSI improvement patch until I'm sure the
> original MSI work around patch is stable.
> Alex, please give me time to debug bug fixes for 3.3 before pushing on
> features for 3.4.

Alex, your original MSI enabling patch simply does not work. The xHCI
PCI driver was marked as const and the xHCI PCI probe function oopsed as
soon as it tried to add HCD_MSI_FIRST to driver->flags. Please test all
the patches in your patchsets individually to make sure they don't cause
bugs, as this will break git-bisect. It's especially troublesome to not
test a patch I've said will be needed for stable, since we really try
not to break stable. </grumpy maintainer rant>

The oops brings up an interesting point. I think the reason the xHCI
PCI driver structure is marked as const is because it's shared across
all xHCI hosts in the system. Even if you remove the const keyword, you
could be modifying the flags while another xHCI host controller is being

I think PCI probe isn't run in parallel, but you could still have the
case where the Intel Panther Point xHCI PCI probe runs first,
HCD_MSI_FIRST gets added to the hcd driver flags, and then the PCI probe
runs for a Fresco Logic add-in card that doesn't handle MSI, and the USB
core doesn't attempt to allocate the legacy IRQ because HCD_MSI_FIRST is
set. Then the Fresco Logic host controller will be left with no

Alan, is the hc_driver structure (xhci_pci_hc_driver) shared across all
xHCI PCI hosts in the system?

Sarah Sharp
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at