mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 05:04:02 +02: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 <phasta@kernel.org> Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> [bhelgaas: squash both updates to pci_free_irq_vectors() documentation] Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Link: https://patch.msgid.link/1770798299-202288-2-git-send-email-shawn.lin@rock-chips.com Link: https://patch.msgid.link/1770798299-202288-3-git-send-email-shawn.lin@rock-chips.com
This commit is contained in:
parent
6de23f81a5
commit
03e4905402
|
|
@ -113,8 +113,11 @@ vectors, use the following function::
|
||||||
|
|
||||||
int pci_irq_vector(struct pci_dev *dev, unsigned int nr);
|
int pci_irq_vector(struct pci_dev *dev, unsigned int nr);
|
||||||
|
|
||||||
Any allocated resources should be freed before removing the device using
|
If the driver enables the device using pcim_enable_device(), the driver
|
||||||
the following function::
|
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);
|
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
|
* Undo the interrupt vector allocations and possible device MSI/MSI-X
|
||||||
* enablement earlier done through pci_alloc_irq_vectors_affinity() or
|
* enablement earlier done through pci_alloc_irq_vectors_affinity() or
|
||||||
* pci_alloc_irq_vectors().
|
* 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)
|
void pci_free_irq_vectors(struct pci_dev *dev)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user