Releasing MSI Resources in a Module Causes Kernel Panic on -CURRENT

David Christensen davidch at broadcom.com
Tue May 15 17:08:18 UTC 2007


>  > What is going wrong? 
>  > 
> 
> I don't know any 5708 hardware details but pci_alloc_msi() may have
> failed. AFAIK just checking pci_alloc_msi() == 0 is not enough
> and you may have to check count is 1 before proceeding to use MSI.
> I've also noted that MSIX supports needs additional resource to
> enable MSIX table/PBA on nfe(4) hardware. I'm not sure it's applicable
> to you, though.

The 5708 is a PCI-X controller behind a PCIe to PCI-X bridge.  There are
no known problems with MSI on the device and it works correctly when 
configured under Linx (and apparently under FreeBSD too).  There's just
this problem with releasing the MSI resource.  MSI-X is not supported on
this controller.
 
> 
> I guess the following code could be changed from
> 	if (count == 1 && pci_alloc_msi(dev, &count) == 0) {
> 		rid = 1;
> 		sc->bce_flags |= BCE_USING_MSI_FLAG;
> 	} else
> 		rid = 0;
> 
> To:
> 	if (count == 1 && pci_alloc_msi(dev, &count) == 0 && 
> count == 1) {
>                                                              
> ^^^^^^^^^^
> 		rid = 1;
> 		sc->bce_flags |= BCE_USING_MSI_FLAG;
> 	} else
> 		rid = 0;
> 
> It would be even better if you can provide a 
> tunable(hw.bce.msi_disable)
> to disable MSI capability for bce(4).

Thanks Pyun but that doesn't appear to be the problem.  The call to
pci_alloc_msi() is returning correctly with a count of 1.  I can 
certainly add a sysctl to disable MSI but that just masks the problem
without getting to the root cause.

Dave



More information about the freebsd-current mailing list