mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
synced 2026-10-31 06:14:39 +01:00
PCI/MSI: Clarify pci_free_irq_vectors() usage for managed devices
Update pci_free_irq_vectors() documentation to clarify that drivers using pcim_enable_device() must not call pci_free_irq_vectors(). For legacy reasons, pcim_enable_device() switches several normally un-managed functions into managed mode. Currently, the only function affected in this way is pcim_setup_msi_release(), which results in automatic IRQ vector management. This behavior is dangerous and confusing. Drivers using pcim_enable_device() should rely on the automatic IRQ vector management and avoid calling pci_free_irq_vectors() manually. Suggested-by: Philipp Stanner <[email protected]> Signed-off-by: Shawn Lin <[email protected]> [bhelgaas: squash both updates to pci_free_irq_vectors() documentation] Signed-off-by: Bjorn Helgaas <[email protected]> Link: https://patch.msgid.link/[email protected] Link: https://patch.msgid.link/[email protected]
This commit is contained in:
1 parent
6de23f81a5
commit
03e4905402
2 files changed
+10
-2
No files matched your search
@@ -113,8 +113,11 @@ vectors, use the following function::
|
||||
|
||||
int pci_irq_vector(struct pci_dev *dev, unsigned int nr);
|
||||
|
||||
Any allocated resources should be freed before removing the device using
|
||||
the following function::
|
||||
If the driver enables the device using pcim_enable_device(), the driver
|
||||
shouldn't call pci_free_irq_vectors() because pcim_enable_device()
|
||||
activates automatic management for IRQ vectors. Otherwise, the driver should
|
||||
free any allocated IRQ vectors before removing the device using the following
|
||||
function::
|
||||
|
||||
void pci_free_irq_vectors(struct pci_dev *dev);
|
||||
|
||||
|
||||
@@ -370,6 +370,11 @@ EXPORT_SYMBOL(pci_irq_get_affinity);
|
||||
* Undo the interrupt vector allocations and possible device MSI/MSI-X
|
||||
* enablement earlier done through pci_alloc_irq_vectors_affinity() or
|
||||
* pci_alloc_irq_vectors().
|
||||
*
|
||||
* WARNING: Do not call this function if the device has been enabled
|
||||
* with pcim_enable_device(). In that case, IRQ vectors are automatically
|
||||
* managed via pcim_msi_release() and calling pci_free_irq_vectors() can
|
||||
* lead to double-free issues.
|
||||
*/
|
||||
void pci_free_irq_vectors(struct pci_dev *dev)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user