Date: Fri, 9 Dec 2011 11:03:03 -0500 From: John Baldwin <jhb@freebsd.org> To: lixin.pang@emc.com Cc: freebsd-drivers@freebsd.org Subject: Re: pci_alloc_msi error Message-ID: <201112091103.03065.jhb@freebsd.org> In-Reply-To: <04C45E3CCE5E1B46AE8A29F585F6743A0221EE4B58@MX32A.corp.emc.com> References: <04C45E3CCE5E1B46AE8A29F585F6743A0221EE4B19@MX32A.corp.emc.com> <201112090801.37711.jhb@freebsd.org> <04C45E3CCE5E1B46AE8A29F585F6743A0221EE4B58@MX32A.corp.emc.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Friday, December 09, 2011 9:31:04 am lixin.pang@emc.com wrote: > Thanks John, It turned that it's blacklisted. The reason is that some how it does not recognizes it as pcie or pcix chipset. > > I noticed that the MSI_CAP_NXT ptr is null for our PCI device, is that the reason why it doesn't recognize it as pcie or pcix? I looked at the code, pci_read_extcap is the only place that the pcie_chipset and pcix_chipset got set. It wants that set on at least some device somewhere in the system. I can look at your pciconf -lc output if that is something you are able to share. > I changed the parameter pci_honor_msi_blacklist to 0 and everything worked. I think there is a tunable and sysctl to let you do this as well: 'hw.pci.honor_msi_blacklist'. > Lixin > > -----Original Message----- > From: John Baldwin [mailto:jhb@freebsd.org] > Sent: Friday, December 09, 2011 8:02 AM > To: freebsd-drivers@freebsd.org > Cc: pang, lixin > Subject: Re: pci_alloc_msi error > > On Thursday, December 08, 2011 8:56:39 pm lixin.pang@emc.com wrote: > > I'm writing a PCI device driver for freebsd 7.3. In the driver attach > function, > > > > pci_enable_busmaster(dev) returns 0, > > > > pci_msi_count(dev) returns 1, > > > > however, error = pci_alloc_msi(dev, &msi) failed with error == 6 > > (device not > configured). > > I assume you set msi to 1 before you called it? (It is both an input and output parameter.) > > > Am I missing any steps before calling pci_alloc_msi? > > I don't believe so. The reasons I see that pci_alloc_msi() will fail with ENXIO are: > > - the driver has allocated its INTx IRQ via bus_alloc_resource() of rid 0 > of the SYS_RES_IRQ type > - the driver has already allocated MSI or MSI-X IRQs > - MSI is blacklisted for the system or for a parent PCI-PCI bridge > - APIC mode is disabled or your system has an unsupported CPU (only > Intel, AMD, and certain VIA CPUs are known to work, other CPUs > might work, we just haven't heard of it). > - The system is completely out of MSI IRQ tokens (there are 512 of > these, so this is doubtful) > > -- > John Baldwin > > -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201112091103.03065.jhb>