remove pci_enable_msix() V3
Subsystems (7)
Hi all,
this series removes the remaining callers of the pci_enable_msix() function and then the function itself. The final removal has been Acked by Bjorn.
Changes since V2:
- add another patch on Dave's request
- add various acks
- spelling fixes in the commit logs
Changes since V1:
- replace the two previous thunderx patches with a new one from Thanneeru
PATCH 1/5 net: alx: switch to pci_alloc_irq_vectors
Remove the deprecated pci_enable_msix API in favour of its successor, and make sure to handle errors during IRQ setup properly.
--- drivers/net/ethernet/atheros/alx/alx.h | 6 -- drivers/net/ethernet/atheros/alx/main.c | 128 ++++++++++++++------------------ 2 files changed, 54 insertions(+), 80 deletions(-)
drivers/net/ethernet/atheros/alx/alx.h +0 -6
@@ -102,9 +102,6 @@ struct alx_napi {#define ALX_MAX_NAPIS 8 -#define ALX_FLAG_USING_MSIX BIT(0) -#define ALX_FLAG_USING_MSI BIT(1) -struct alx_priv {struct net_device *dev;
@@ -112,7 +109,6 @@ struct alx_priv {/* msi-x vectors */ int num_vec; -struct msix_entry *msix_entries;/* all descriptor memory */ struct {
@@ -139,8 +135,6 @@ struct alx_priv {u16 msg_enable; -int flags; -/* protects hw.stats */ spinlock_t stats_lock; };
drivers/net/ethernet/atheros/alx/main.c +54 -74
273 lines not on this page · raw message
Signature · 1 line
2.11.0
PATCH 2/5 net/ena: switch to pci_alloc_irq_vectors
In reply to Christoph HellwigRemove the deprecated pci_enable_msix API in favour of its successor.
--- drivers/net/ethernet/amazon/ena/ena_netdev.c | 55 ++++++---------------------- drivers/net/ethernet/amazon/ena/ena_netdev.h | 2 - 2 files changed, 12 insertions(+), 45 deletions(-)
drivers/net/ethernet/amazon/ena/ena_netdev.c +12 -43
@@ -133,7 +133,7 @@ static int ena_init_rx_cpu_rmap(struct ena_adapter *adapter)int irq_idx =ENA_IO_IRQ_IDX (i); rc =irq_cpu_rmap_add (adapter->netdev->rx_cpu_rmap, - adapter->msix_entries[irq_idx].vector); +pci_irq_vector (adapter->pdev, irq_idx));if (rc) {free_irq_cpu_rmap (adapter->netdev->rx_cpu_rmap); adapter->netdev->rx_cpu_rmap =NULL ;
@@ -1208,13 +1208,7 @@ static irqreturn_t ena_intr_msix_io(int irq, void *data)static int ena_enable_msix (struct ena_adapter *adapter,int num_queues) { -int i, msix_vecs, rc; - -if (test_bit (ENA_FLAG_MSIX_ENABLED , &adapter->flags)) { -netif_err (adapter, probe, adapter->netdev, -"Error, MSI-X is already enabled\n" ); -return -EPERM ; - } +int msix_vecs, rc;/* Reserved the max msix vectors we might need */ msix_vecs =ENA_MAX_MSIX_VEC (num_queues);
@@ -1222,16 +1216,9 @@ static int ena_enable_msix(struct ena_adapter *adapter, int num_queues)netif_dbg (adapter, probe, adapter->netdev,"trying to enable MSI-X, vectors %d\n" , msix_vecs); - adapter->msix_entries =vzalloc (msix_vecs *sizeof (struct msix_entry )); - -if (!adapter->msix_entries) -return -ENOMEM ; - -for (i =0 ; i < msix_vecs; i++) - adapter->msix_entries[i].entry = i; - - rc =pci_enable_msix (adapter->pdev, adapter->msix_entries, msix_vecs); -if (rc !=0 ) { + rc =pci_alloc_irq_vectors (adapter->pdev, msix_vecs, msix_vecs, +PCI_IRQ_MSIX ); +if (rc <0 ) {netif_err (adapter, probe, adapter->netdev,"Failed to enable MSI-X, vectors %d rc %d\n" , msix_vecs, rc);
@@ -1248,7 +1235,6 @@ static int ena_enable_msix(struct ena_adapter *adapter, int num_queues) } adapter->msix_vecs = msix_vecs; -set_bit (ENA_FLAG_MSIX_ENABLED , &adapter->flags);return 0 ; }
@@ -1264,7 +1250,7 @@ static void ena_setup_mgmnt_intr(struct ena_adapter *adapter) ena_intr_msix_mgmnt; adapter->irq_tbl[ENA_MGMNT_IRQ_IDX ].data = adapter; adapter->irq_tbl[ENA_MGMNT_IRQ_IDX ].vector = - adapter->msix_entries[ENA_MGMNT_IRQ_IDX ].vector; +pci_irq_vector (adapter->pdev,ENA_MGMNT_IRQ_IDX ); cpu =cpumask_first (cpu_online_mask); adapter->irq_tbl[ENA_MGMNT_IRQ_IDX ].cpu = cpu; cpumask_set_cpu(cpu,
@@ -1287,7 +1273,7 @@ static void ena_setup_io_intr(struct ena_adapter *adapter) adapter->irq_tbl[irq_idx].handler = ena_intr_msix_io; adapter->irq_tbl[irq_idx].data = &adapter->ena_napi[i]; adapter->irq_tbl[irq_idx].vector = - adapter->msix_entries[irq_idx].vector; +pci_irq_vector (adapter->pdev, irq_idx); adapter->irq_tbl[irq_idx].cpu = cpu; cpumask_set_cpu(cpu,
@@ -1325,12 +1311,6 @@ static int ena_request_io_irq(struct ena_adapter *adapter)struct ena_irq *irq;int rc =0 , i, k; -if (!test_bit (ENA_FLAG_MSIX_ENABLED , &adapter->flags)) { -netif_err (adapter, ifup, adapter->netdev, -"Failed to request I/O IRQ: MSI-X is not enabled\n" ); -return -EINVAL ; - } -for (i =ENA_IO_IRQ_FIRST_IDX ; i < adapter->msix_vecs; i++) { irq = &adapter->irq_tbl[i]; rc = request_irq(irq->vector, irq->handler, flags, irq->name,
@@ -1389,16 +1369,6 @@ static void ena_free_io_irq(struct ena_adapter *adapter) } } -static void ena_disable_msix (struct ena_adapter *adapter) -{ -if (test_and_clear_bit (ENA_FLAG_MSIX_ENABLED , &adapter->flags)) -pci_disable_msix (adapter->pdev); - -if (adapter->msix_entries) -vfree (adapter->msix_entries); - adapter->msix_entries =NULL ; -} -static void ena_disable_io_intr_sync (struct ena_adapter *adapter) {int i;
@@ -2479,8 +2449,7 @@ static int ena_enable_msix_and_set_admin_interrupts(struct ena_adapter *adapter,return 0 ; err_disable_msix: -ena_disable_msix (adapter); - +pci_free_irq_vectors (adapter->pdev);return rc; }
@@ -2518,7 +2487,7 @@ static void ena_fw_reset_device(struct work_struct *work)ena_free_mgmnt_irq (adapter); -ena_disable_msix (adapter); +pci_free_irq_vectors (adapter->pdev);ena_com_abort_admin_commands (ena_dev);
@@ -2569,7 +2538,7 @@ static void ena_fw_reset_device(struct work_struct *work)return ; err_disable_msix:ena_free_mgmnt_irq (adapter); -ena_disable_msix (adapter); +pci_free_irq_vectors (adapter->pdev); err_device_destroy:ena_com_admin_destroy (ena_dev); err:
@@ -3103,7 +3072,7 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent) err_free_msix:ena_com_dev_reset (ena_dev);ena_free_mgmnt_irq (adapter); -ena_disable_msix (adapter); +pci_free_irq_vectors (adapter->pdev); err_worker_destroy:ena_com_destroy_interrupt_moderation (ena_dev);del_timer (&adapter->timer_service);
@@ -3188,7 +3157,7 @@ static void ena_remove(struct pci_dev *pdev)ena_free_mgmnt_irq (adapter); -ena_disable_msix (adapter); +pci_free_irq_vectors (adapter->pdev);free_netdev (netdev);
drivers/net/ethernet/amazon/ena/ena_netdev.h +0 -2
@@ -248,7 +248,6 @@ enum ena_flags_t {ENA_FLAG_DEVICE_RUNNING ,ENA_FLAG_DEV_UP ,ENA_FLAG_LINK_UP , -ENA_FLAG_MSIX_ENABLED , ENA_FLAG_TRIGGER_RESET };
@@ -267,7 +266,6 @@ struct ena_adapter {int num_queues; -struct msix_entry *msix_entries;int msix_vecs;u32 tx_usecs, rx_usecs;/* interrupt moderation */
Signature · 1 line
2.11.0
PATCH 3/5 net: thunderx: Switch to pci_alloc_irq_vectors
In reply to Christoph HellwigFrom: Thanneeru Srinivasulu <[email protected]>
Remove deprecated pci_enable_msix API in favour of its successor pci_alloc_irq_vectors.
--- drivers/net/ethernet/cavium/thunder/nic.h | 2 - drivers/net/ethernet/cavium/thunder/nic_main.c | 64 ++++++---------------- drivers/net/ethernet/cavium/thunder/nicvf_main.c | 70 ++++++++---------------- 3 files changed, 40 insertions(+), 96 deletions(-)
drivers/net/ethernet/cavium/thunder/nic.h +0 -2
@@ -319,9 +319,7 @@ struct nicvf {struct bgx_stats bgx_stats;/* MSI-X */ -bool msix_enabled;u8 num_vec; -struct msix_entry msix_entries[NIC_VF_MSIX_VECTORS ];char irq_name[NIC_VF_MSIX_VECTORS ][IFNAMSIZ +15 ];bool irq_allocated[NIC_VF_MSIX_VECTORS ];cpumask_var_t affinity_mask[NIC_VF_MSIX_VECTORS ];
drivers/net/ethernet/cavium/thunder/nic_main.c +16 -48
115 lines not on this page · raw message
drivers/net/ethernet/cavium/thunder/nicvf_main.c +24 -46
155 lines not on this page · raw message
Signature · 1 line
2.11.0
PATCH 4/5 PCI: remove pci_enable_msix
In reply to Christoph HellwigUnused now that all callers switched to pci_alloc_irq_vectors.
--- drivers/pci/msi.c | 21 --------------------- include/linux/pci.h | 4 ---- 2 files changed, 25 deletions(-)
drivers/pci/msi.c +0 -21
@@ -973,27 +973,6 @@ static int __pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries,return msix_capability_init (dev, entries, nvec, affd); } -/** -* pci_enable_msix - configure device's MSI-X capability structure -* @dev: pointer to the pci_dev data structure of MSI-X device function -* @entries: pointer to an array of MSI-X entries (optional) -* @nvec: number of MSI-X irqs requested for allocation by device driver -* -* Setup the MSI-X capability structure of device function with the number -* of requested irqs upon its software driver call to request for -* MSI-X mode enabled on its hardware device function. A return of zero -* indicates the successful configuration of MSI-X capability structure -* with new allocated MSI-X irqs. A return of < 0 indicates a failure. -* Or a return of > 0 indicates that driver request is exceeding the number -* of irqs or MSI-X vectors available. Driver should use the returned value to -* re-send its request. -**/ -int pci_enable_msix (struct pci_dev *dev,struct msix_entry *entries,int nvec) -{ -return __pci_enable_msix (dev, entries, nvec,NULL ); -} -EXPORT_SYMBOL (pci_enable_msix); -void pci_msix_shutdown (struct pci_dev *dev) {struct msi_desc *entry;
include/linux/pci.h +0 -4
@@ -1300,7 +1300,6 @@ int pci_msi_vec_count(struct pci_dev *dev);void pci_msi_shutdown (struct pci_dev *dev);void pci_disable_msi (struct pci_dev *dev);int pci_msix_vec_count (struct pci_dev *dev); -int pci_enable_msix (struct pci_dev *dev,struct msix_entry *entries,int nvec);void pci_msix_shutdown (struct pci_dev *dev);void pci_disable_msix (struct pci_dev *dev);void pci_restore_msi_state (struct pci_dev *dev);
@@ -1330,9 +1329,6 @@ static inline int pci_msi_vec_count(struct pci_dev *dev) { return -ENOSYS; }static inline void pci_msi_shutdown (struct pci_dev *dev) { }static inline void pci_disable_msi (struct pci_dev *dev) { }static inline int pci_msix_vec_count (struct pci_dev *dev) {return -ENOSYS ; } -static inline int pci_enable_msix (struct pci_dev *dev, -struct msix_entry *entries,int nvec) -{return -ENOSYS ; }static inline void pci_msix_shutdown (struct pci_dev *dev) { }static inline void pci_disable_msix (struct pci_dev *dev) { }static inline void pci_restore_msi_state (struct pci_dev *dev) { }
Signature · 1 line
2.11.0
PATCH 5/5 mlxsw: convert to pci_alloc_irq_vectors
In reply to Christoph HellwigTrivial conversion as only one vector is supported, but at least we lose the useless msix_entry member in the per-device structure.
--- drivers/net/ethernet/mellanox/mlxsw/pci.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)
drivers/net/ethernet/mellanox/mlxsw/pci.c +6 -7
@@ -136,7 +136,6 @@ struct mlxsw_pci {u8 __iomem *hw_addr;struct mlxsw_pci_queue_type_group queues[MLXSW_PCI_QUEUE_TYPE_COUNT ];u32 doorbell_offset; -struct msix_entry msix_entry;struct mlxsw_core *core;struct {struct mlxsw_pci_mem_item *items;
@@ -1409,7 +1408,7 @@ static int mlxsw_pci_init(void *bus_priv, struct mlxsw_core *mlxsw_core,if (err) goto err_aqs_init; - err =request_irq (mlxsw_pci->msix_entry.vector, + err =request_irq (pci_irq_vector (pdev,0 ), mlxsw_pci_eq_irq_handler,0 , mlxsw_pci->bus_info.device_kind, mlxsw_pci);if (err) {
@@ -1442,7 +1441,7 @@ static void mlxsw_pci_fini(void *bus_priv) {struct mlxsw_pci *mlxsw_pci = bus_priv; -free_irq (mlxsw_pci->msix_entry.vector, mlxsw_pci); +free_irq (pci_irq_vector (mlxsw_pci->pdev,0 ), mlxsw_pci);mlxsw_pci_aqs_fini (mlxsw_pci);mlxsw_pci_fw_area_fini (mlxsw_pci);mlxsw_pci_mbox_free (mlxsw_pci, &mlxsw_pci->cmd.out_mbox);
@@ -1717,8 +1716,8 @@ static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto err_sw_reset; } - err =pci_enable_msix_exact (pdev, &mlxsw_pci->msix_entry,1 ); -if (err) { + err =pci_alloc_irq_vectors (pdev,1 ,1 ,PCI_IRQ_MSIX ); +if (err <0 ) {dev_err (&pdev->dev,"MSI-X init failed\n" ); goto err_msix_init; }
@@ -1737,7 +1736,7 @@ static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)return 0 ; err_bus_device_register: -pci_disable_msix (mlxsw_pci->pdev); +pci_free_irq_vectors (mlxsw_pci->pdev); err_msix_init: err_sw_reset:iounmap (mlxsw_pci->hw_addr);
@@ -1757,7 +1756,7 @@ static void mlxsw_pci_remove(struct pci_dev *pdev)struct mlxsw_pci *mlxsw_pci =pci_get_drvdata (pdev);mlxsw_core_bus_device_unregister (mlxsw_pci->core); -pci_disable_msix (mlxsw_pci->pdev); +pci_free_irq_vectors (mlxsw_pci->pdev);iounmap (mlxsw_pci->hw_addr);pci_release_regions (mlxsw_pci->pdev);pci_disable_device (mlxsw_pci->pdev);
Signature · 1 line
2.11.0
From: Christoph Hellwig <[email protected]>
Date: Tue, 11 Apr 2017 13:01:20 +0200
Quoted 11 lines
this series removes the remaining callers of the
pci_enable_msix()function and then the function itself. The final removal has been Acked by Bjorn.Changes since V2:
- add another patch on Dave's request
- add various acks
- spelling fixes in the commit logsChanges since V1:
- replace the two previous thunderx patches with a new one from Thanneeru
Series applied to net-next, thanks.