aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Ellerman <michael@ellerman.id.au>2009-03-20 00:22:12 -0400
committerJesse Barnes <jbarnes@virtuousgeek.org>2009-03-20 14:35:04 -0400
commitfafad5bf06c3a3bb8b24b28b6f065367e7411872 (patch)
tree32f88260a757d9e24e913202fddcd2cdd420eb03
parent5546d6f56807115a035d140f7364ce5807dbcc87 (diff)
PCI MSI: Add example request loop to MSI-HOWTO.txt
Encourage driver writers to think about supporting a variable number of MSI-X interrupts, and give an example of how to do such a request. Acked-by: Matthew Wilcox <willy@linux.intel.com> Signed-off-by: Michael Ellerman <michael@ellerman.id.au> Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
-rw-r--r--Documentation/PCI/MSI-HOWTO.txt23
1 files changed, 22 insertions, 1 deletions
diff --git a/Documentation/PCI/MSI-HOWTO.txt b/Documentation/PCI/MSI-HOWTO.txt
index 9494f6dc38eb..dcf7acc720e1 100644
--- a/Documentation/PCI/MSI-HOWTO.txt
+++ b/Documentation/PCI/MSI-HOWTO.txt
@@ -176,7 +176,8 @@ request_irq() for each 'vector' that it decides to use.
176If this function returns a negative number, it indicates an error and 176If this function returns a negative number, it indicates an error and
177the driver should not attempt to allocate any more MSI-X interrupts for 177the driver should not attempt to allocate any more MSI-X interrupts for
178this device. If it returns a positive number, it indicates the maximum 178this device. If it returns a positive number, it indicates the maximum
179number of interrupt vectors that could have been allocated. 179number of interrupt vectors that could have been allocated. See example
180below.
180 181
181This function, in contrast with pci_enable_msi(), does not adjust 182This function, in contrast with pci_enable_msi(), does not adjust
182dev->irq. The device will not generate interrupts for this interrupt 183dev->irq. The device will not generate interrupts for this interrupt
@@ -187,6 +188,26 @@ free them again later.
187Device drivers should normally call this function once per device 188Device drivers should normally call this function once per device
188during the initialization phase. 189during the initialization phase.
189 190
191It is ideal if drivers can cope with a variable number of MSI-X interrupts,
192there are many reasons why the platform may not be able to provide the
193exact number a driver asks for.
194
195A request loop to achieve that might look like:
196
197static int foo_driver_enable_msix(struct foo_adapter *adapter, int nvec)
198{
199 while (nvec >= FOO_DRIVER_MINIMUM_NVEC) {
200 rc = pci_enable_msix(adapter->pdev,
201 adapter->msix_entries, nvec);
202 if (rc > 0)
203 nvec = rc;
204 else
205 return rc;
206 }
207
208 return -ENOSPC;
209}
210
1904.3.2 pci_disable_msix 2114.3.2 pci_disable_msix
191 212
192void pci_disable_msix(struct pci_dev *dev) 213void pci_disable_msix(struct pci_dev *dev)