Skip to content

Commit 18e1926

Browse files
Ahmed S. DarwishKAGA-KOKO
authored andcommitted
PCI/MSI: Move pci_disable_msix() to api.c
To disentangle the maze in msi.c, all exported device-driver MSI APIs are now to be grouped in one file, api.c. Move pci_disable_msix() and make its kernel-doc comprehensive. Signed-off-by: Ahmed S. Darwish <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Acked-by: Bjorn Helgaas <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 7b50f62 commit 18e1926

File tree

3 files changed

+26
-13
lines changed

3 files changed

+26
-13
lines changed

drivers/pci/msi/api.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,30 @@ int pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries,
111111
}
112112
EXPORT_SYMBOL(pci_enable_msix_range);
113113

114+
/**
115+
* pci_disable_msix() - Disable MSI-X interrupt mode on device
116+
* @dev: the PCI device to operate on
117+
*
118+
* Legacy device driver API to disable MSI-X interrupt mode on device,
119+
* free earlier-allocated interrupt vectors, and restore INTx.
120+
* The PCI device Linux IRQ (@dev->irq) is restored to its default pin
121+
* assertion IRQ. This is the cleanup pair of pci_enable_msix_range().
122+
*
123+
* NOTE: The newer pci_alloc_irq_vectors() / pci_free_irq_vectors() API
124+
* pair should, in general, be used instead.
125+
*/
126+
void pci_disable_msix(struct pci_dev *dev)
127+
{
128+
if (!pci_msi_enabled() || !dev || !dev->msix_enabled)
129+
return;
130+
131+
msi_lock_descs(&dev->dev);
132+
pci_msix_shutdown(dev);
133+
pci_free_msi_irqs(dev);
134+
msi_unlock_descs(&dev->dev);
135+
}
136+
EXPORT_SYMBOL(pci_disable_msix);
137+
114138
/**
115139
* pci_alloc_irq_vectors() - Allocate multiple device interrupt vectors
116140
* @dev: the PCI device to operate on

drivers/pci/msi/msi.c

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -736,7 +736,7 @@ static int __pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries,
736736
return msix_capability_init(dev, entries, nvec, affd);
737737
}
738738

739-
static void pci_msix_shutdown(struct pci_dev *dev)
739+
void pci_msix_shutdown(struct pci_dev *dev)
740740
{
741741
struct msi_desc *desc;
742742

@@ -758,18 +758,6 @@ static void pci_msix_shutdown(struct pci_dev *dev)
758758
pcibios_alloc_irq(dev);
759759
}
760760

761-
void pci_disable_msix(struct pci_dev *dev)
762-
{
763-
if (!pci_msi_enable || !dev || !dev->msix_enabled)
764-
return;
765-
766-
msi_lock_descs(&dev->dev);
767-
pci_msix_shutdown(dev);
768-
pci_free_msi_irqs(dev);
769-
msi_unlock_descs(&dev->dev);
770-
}
771-
EXPORT_SYMBOL(pci_disable_msix);
772-
773761
int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec,
774762
struct irq_affinity *affd)
775763
{

drivers/pci/msi/msi.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ static inline __attribute_const__ u32 msi_multi_mask(struct msi_desc *desc)
8686

8787
/* MSI internal functions invoked from the public APIs */
8888
void pci_msi_shutdown(struct pci_dev *dev);
89+
void pci_msix_shutdown(struct pci_dev *dev);
8990
void pci_free_msi_irqs(struct pci_dev *dev);
9091
int __pci_enable_msi_range(struct pci_dev *dev, int minvec, int maxvec, struct irq_affinity *affd);
9192
int __pci_enable_msix_range(struct pci_dev *dev, struct msix_entry *entries, int minvec,

0 commit comments

Comments
 (0)