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? cheers -- Michael Ellerman OzLabs, IBM Australia Development Lab wwweb: http://michael.ellerman.id.au phone: +61 2 6212 1183 (tie line 70 21183) We do not inherit the earth from our ancestors, we borrow it from our children. - S.M.A.R.T Person
Attachment:
signature.asc
Description: This is a digitally signed message part