On Saturday, April 30, 2011 2:42:11 am Wiktor Niesiobedzki wrote:
> 2011/4/29 Wiktor Niesiobedzki <b...@vink.pl>:
> > 2011/4/28 Jack Vogel <jfvo...@gmail.com>:
> >> On Thu, Apr 28, 2011 at 2:28 PM, John Baldwin <j...@freebsd.org> wrote:
> >>>
> >>> On Thursday, April 28, 2011 5:17:11 pm Wiktor Niesiobedzki wrote:
> >>> > Though they mention that HT MSI windows is disabled. I'm not sure,
> >>> > whether this matters.
> >>>
> >>> Yes, that is probably what breaks this.
> >>>
> >>> --
> >>> John Baldwin
> >>
> >> Opps, missed that, thanks John.  So, disable MSIX and MSI using sysctl,
> >> then the driver should use legacy when it loads.
> >>
> >> Still, I'd get a different motherboard, sucks to not have MSIX :(
> >>
> >
> > Thanks for hints. I've disabled MSIX and MSI:
> > kadlubek# sysctl hw.pci | grep msi
> > hw.pci.honor_msi_blacklist: 1
> > hw.pci.enable_msix: 0
> > hw.pci.enable_msi: 0
> >
> 
> Ok, I found other way round about this. I've did some source code
> reading and found following tunable:
> hw.em.enable_msix=0
> 
> When set in loader.conf to 0, then the card magically starts to work
> properly. The only thing in our code in em_setup_msix(), that raises
> my doubts, is the following code path:
> 
> 
>                 int rid = PCIR_BAR(EM_MSIX_BAR);
>                 adapter->msix_mem = bus_alloc_resource_any(dev,
> SYS_RES_MEMORY, &rid, RF_ACTIVE);
> ...
>                 bus_release_resource(dev, SYS_RES_MEMORY,
> PCIR_BAR(EM_MSIX_BAR), adapter->msix_mem);
> 
> Though manpage for bus_release_resource specifies, that rid needs to
> be exactly the same, as this returned by bus_alloc_resource.

In practice the rid is not changed for PCI resources, so the code is fine.

> Changing the bus_release_resource to use rid instead of
> PCIR_BAR(EM_MSIX_BAR) makes the card working, with sysctl settings:
> hw.pci.enable_msix: 0
> hw.pci.enable_msi: 0
> 
> instead of hw.em.enable_msix=0
> 
> The only thing that worries me, that when I don't have MSIX disabled
> (anyway), then driver succeeds with the MSI-X allocation. Shouldn't we
> in em_setup_msix check, how many vectors we have allocated with
> pci_alloc_msix and if this is 0, then fallback to MSI/Legacy?
> 
> Or maybe pci_alloc_msix should report an error, when no
> PCIB_ALLOC_MSIX succeded?

Well, the problem here is that PCIB_ALLOC_MSIX() worked fine.  There is
another bug that is breaking MSI in your system that I need to finish the
fix for in 9 before it can be MFC'd.

-- 
John Baldwin
_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"

Reply via email to