net/mlx5: fix representor interrupts handler assignment
PATCH 1/1 net/mlx5: fix representor interrupts handler assignment
In mlx5 PMD the PCI device interrupt vector was used by Uplink representor exclusively and other VF representors did not support interrupt mode.
All the VFs and Uplink representors are separate ethernet devices and must have dedicated interrupt vectors.
The fix provides each representor with a dedicated interrupt vector.
--- drivers/net/mlx5/linux/mlx5_os.c | 25 +++++++++++++++++++++++++ drivers/net/mlx5/mlx5.c | 5 +++++ drivers/net/mlx5/mlx5_rxq.c | 6 ------ 3 files changed, 30 insertions(+), 6 deletions(-)
drivers/net/mlx5/linux/mlx5_os.c +25 -0
@@ -2389,6 +2389,31 @@ mlx5_os_pci_probe_pf(struct rte_pci_device *pci_dev, } restore = list[i].eth_dev->data->dev_flags;rte_eth_copy_pci_info (list[i].eth_dev, pci_dev); +/** +* Each representor has a dedicated interrupts vector. +* rte_eth_copy_pci_info() assigns PF interrupts handle to +* representor eth_dev object because representor and PF +* share the same PCI address. +* Override representor device with a dedicated +* interrupts handle here. +* Representor interrupts handle is released in mlx5_dev_stop(). +*/ +if (list[i].info.representor) { +struct rte_intr_handle *intr_handle; + intr_handle =mlx5_malloc (MLX5_MEM_SYS |MLX5_MEM_ZERO , +sizeof (*intr_handle),0 , +SOCKET_ID_ANY ); +if (!intr_handle) { +DRV_LOG (ERR , +"port %u failed to allocate memory for interrupt handler " +"Rx interrupts will not be supported" , + i); + rte_errno =ENOMEM ; + ret = -rte_errno; + goto exit; + } + list[i].eth_dev->intr_handle = intr_handle; + }/* Restore non-PCI flags cleared by the above call. */ list[i].eth_dev->data->dev_flags |= restore;rte_eth_dev_probing_finish (list[i].eth_dev);
drivers/net/mlx5/mlx5.c +5 -0
@@ -1548,6 +1548,11 @@ mlx5_dev_close(struct rte_eth_dev *dev) priv->rxqs_n =0 ; priv->rxqs =NULL ; } +if (priv->representor) { +/* Each representor has a dedicated interrupts handler */ +mlx5_free (dev->intr_handle); + dev->intr_handle =NULL ; + }if (priv->txqs !=NULL ) {/* XXX race condition if mlx5_tx_burst() is still running. */ rte_delay_us_sleep (1000 );
drivers/net/mlx5/mlx5_rxq.c +0 -6
@@ -834,9 +834,6 @@ mlx5_rx_intr_vec_enable(struct rte_eth_dev *dev)unsigned int count =0 ;struct rte_intr_handle *intr_handle = dev->intr_handle; -/* Representor shares dev->intr_handle with PF. */ -if (priv->representor) -return 0 ;if (!dev->data->dev_conf.intr_conf.rxq)return 0 ;mlx5_rx_intr_vec_disable (dev);
@@ -917,9 +914,6 @@ mlx5_rx_intr_vec_disable(struct rte_eth_dev *dev)unsigned int rxqs_n = priv->rxqs_n;unsigned int n =RTE_MIN (rxqs_n, (uint32_t )RTE_MAX_RXTX_INTR_VEC_ID ); -/* Representor shares dev->intr_handle with PF. */ -if (priv->representor) -return ;if (!dev->data->dev_conf.intr_conf.rxq)return ;if (!intr_handle->intr_vec)
Signature · 1 line
2.31.1
Hi,
Quoted 16 lines
-----Original Message-----
From: dev <[email protected]> On Behalf Of Gregory Etelson
Sent: Tuesday, July 20, 2021 6:38 PM
To: [email protected]
Cc: Gregory Etelson <[email protected]>; [email protected]; Slava Ovsiienko <[email protected]>; Matan Azrad <[email protected]>; Shahaf Shuler <[email protected]>
Subject: [dpdk-dev] [PATCH] net/mlx5: fix representor interrupts handler assignmentIn mlx5 PMD the PCI device interrupt vector was used by Uplink representor exclusively and other VF representors did not support interrupt mode. All the VFs and Uplink representors are separate ethernet devices and must have dedicated interrupt vectors.
The fix provides each representor with a dedicated interrupt vector.
Quoted 6 lines
Fixes 5882bde88da2 ("net/mlx5: fix representor interrupts handler")Signed-off-by Gregory Etelson <[email protected]>
Patch applied to next-net-mlx,
Kindest regards,
Raslan Darawsheh