On Wednesday 21 January 2009, Michael Ellerman wrote: > On Wed, 2009-01-21 at 01:18 +0100, Rafael J. Wysocki wrote: > > From: Rafael J. Wysocki <rjw@xxxxxxx> > > > > Introduce new function pci_msix_table_size() returning the size of > > the MSI-X table of given PCI device or 0 if the device doesn't > > support MSI-X. > > > > Signed-off-by: Rafael J. Wysocki <rjw@xxxxxxx> > > --- > > drivers/pci/msi.c | 24 +++++++++++++++++++----- > > include/linux/pci.h | 5 +++++ > > 2 files changed, 24 insertions(+), 5 deletions(-) > > > > Index: linux-2.6/drivers/pci/msi.c > > =================================================================== > > --- linux-2.6.orig/drivers/pci/msi.c > > +++ linux-2.6/drivers/pci/msi.c > > @@ -670,6 +670,23 @@ static int msi_free_irqs(struct pci_dev* > > } > > > > /** > > + * pci_msix_table_size - return the number of device's MSI-X table entries > > + * @dev: pointer to the pci_dev data structure of MSI-X device function > > + */ > > +int pci_msix_table_size(struct pci_dev *dev) > > +{ > > + int pos; > > + u16 control; > > + > > + pos = pci_find_capability(dev, PCI_CAP_ID_MSIX); > > + if (!pos) > > + return 0; > > + > > + pci_read_config_word(dev, msi_control_reg(pos), &control); > > + return multi_msix_capable(control); > > +} > > + > > +/** > > * pci_enable_msix - configure device's MSI-X capability structure > > * @dev: pointer to the pci_dev data structure of MSI-X device function > > * @entries: pointer to an array of MSI-X entries > > @@ -686,9 +703,8 @@ static int msi_free_irqs(struct pci_dev* > > **/ > > int pci_enable_msix(struct pci_dev* dev, struct msix_entry *entries, int nvec) > > { > > - int status, pos, nr_entries; > > + int status, nr_entries; > > int i, j; > > - u16 control; > > > > if (!entries) > > return -EINVAL; > > @@ -697,9 +713,7 @@ int pci_enable_msix(struct pci_dev* dev, > > if (status) > > return status; > > > > - pos = pci_find_capability(dev, PCI_CAP_ID_MSIX); > > - pci_read_config_word(dev, msi_control_reg(pos), &control); > > - nr_entries = multi_msix_capable(control); > > + nr_entries = pci_msix_table_size(dev); > > if (nvec > nr_entries) > > return -EINVAL; > > I see similar code in msix_capability_init(), although it still needs > pos. Did you deliberately not replace that, or just miss it? I didn't replace it exactly because it required the pos anyway. Thanks, Rafael -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html