diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2014-02-14 16:38:00 -0500 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-02-14 16:38:00 -0500 |
commit | c128856b48b1a7132166c6b37a53b086d549fbde (patch) | |
tree | c4c1bb2baa1e25a436f09efb17a8304364bf7901 /include/linux/pci.h | |
parent | c80ef97ae4848c4592f0fac9c06d7f436862a28d (diff) | |
parent | 94cccde648d32abe61e2d0d1b18178f3027f1a78 (diff) |
Merge branch 'pci/msi' into next
* pci/msi:
vfio: Use pci_enable_msi_range() and pci_enable_msix_range()
ahci: Use pci_enable_msi_range() instead of pci_enable_msi_block()
ahci: Fix broken fallback to single MSI mode
PCI/MSI: Add pci_enable_msi_exact() and pci_enable_msix_exact()
PCI/MSI: Fix cut-and-paste errors in documentation
PCI/MSI: Add pci_enable_msi() documentation back
PCI/MSI: Fix pci_msix_vec_count() htmldocs failure
PCI/MSI: Fix leak of msi_attrs
PCI/MSI: Check kmalloc() return value, fix leak of name
Diffstat (limited to 'include/linux/pci.h')
-rw-r--r-- | include/linux/pci.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/include/linux/pci.h b/include/linux/pci.h index 60ab8d782f8c..1e26fc602adc 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -1171,8 +1171,23 @@ void msi_remove_pci_irq_vectors(struct pci_dev *dev); | |||
1171 | void pci_restore_msi_state(struct pci_dev *dev); | 1171 | void pci_restore_msi_state(struct pci_dev *dev); |
1172 | int pci_msi_enabled(void); | 1172 | int pci_msi_enabled(void); |
1173 | int pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec); | 1173 | int pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec); |
1174 | static inline int pci_enable_msi_exact(struct pci_dev *dev, int nvec) | ||
1175 | { | ||
1176 | int rc = pci_enable_msi_range(dev, nvec, nvec); | ||
1177 | if (rc < 0) | ||
1178 | return rc; | ||
1179 | return 0; | ||
1180 | } | ||
1174 | int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries, | 1181 | int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries, |
1175 | int minvec, int maxvec); | 1182 | int minvec, int maxvec); |
1183 | static inline int pci_enable_msix_exact(struct pci_dev *dev, | ||
1184 | struct msix_entry *entries, int nvec) | ||
1185 | { | ||
1186 | int rc = pci_enable_msix_range(dev, entries, nvec, nvec); | ||
1187 | if (rc < 0) | ||
1188 | return rc; | ||
1189 | return 0; | ||
1190 | } | ||
1176 | #else | 1191 | #else |
1177 | static inline int pci_msi_vec_count(struct pci_dev *dev) { return -ENOSYS; } | 1192 | static inline int pci_msi_vec_count(struct pci_dev *dev) { return -ENOSYS; } |
1178 | static inline int pci_enable_msi_block(struct pci_dev *dev, int nvec) | 1193 | static inline int pci_enable_msi_block(struct pci_dev *dev, int nvec) |
@@ -1191,9 +1206,14 @@ static inline int pci_msi_enabled(void) { return 0; } | |||
1191 | static inline int pci_enable_msi_range(struct pci_dev *dev, int minvec, | 1206 | static inline int pci_enable_msi_range(struct pci_dev *dev, int minvec, |
1192 | int maxvec) | 1207 | int maxvec) |
1193 | { return -ENOSYS; } | 1208 | { return -ENOSYS; } |
1209 | static inline int pci_enable_msi_exact(struct pci_dev *dev, int nvec) | ||
1210 | { return -ENOSYS; } | ||
1194 | static inline int pci_enable_msix_range(struct pci_dev *dev, | 1211 | static inline int pci_enable_msix_range(struct pci_dev *dev, |
1195 | struct msix_entry *entries, int minvec, int maxvec) | 1212 | struct msix_entry *entries, int minvec, int maxvec) |
1196 | { return -ENOSYS; } | 1213 | { return -ENOSYS; } |
1214 | static inline int pci_enable_msix_exact(struct pci_dev *dev, | ||
1215 | struct msix_entry *entries, int nvec) | ||
1216 | { return -ENOSYS; } | ||
1197 | #endif | 1217 | #endif |
1198 | 1218 | ||
1199 | #ifdef CONFIG_PCIEPORTBUS | 1219 | #ifdef CONFIG_PCIEPORTBUS |