[dpdk-dev] net/mlx5: fix device reference in secondary process

Message ID 20180502061320.6675-1-yskoh@mellanox.com (mailing list archive)
State Changes Requested, archived
Delegated to: Shahaf Shuler
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Yongseok Koh May 2, 2018, 6:13 a.m. UTC
  rte_eth_devices[] is not shared between primary and secondary process, but
a static array to each process. The backward pointer of device (priv->dev)
must be reset when a secondary process attaches to a device.

Fixes: f8b9a3bad467 ("net/mlx5: install a socket to exchange a file descriptor")
Cc: stable@dpdk.org

Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
---
 drivers/net/mlx5/mlx5.c | 6 ++++++
 1 file changed, 6 insertions(+)
  

Comments

Nélio Laranjeiro May 2, 2018, 6:53 a.m. UTC | #1
On Tue, May 01, 2018 at 11:13:20PM -0700, Yongseok Koh wrote:
> rte_eth_devices[] is not shared between primary and secondary process, but
> a static array to each process. The backward pointer of device (priv->dev)
> must be reset when a secondary process attaches to a device.
> 
> Fixes: f8b9a3bad467 ("net/mlx5: install a socket to exchange a file descriptor")
> Cc: stable@dpdk.org
> 
> Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>
> ---
>  drivers/net/mlx5/mlx5.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
> index 8f983061a..f606e3dd4 100644
> --- a/drivers/net/mlx5/mlx5.c
> +++ b/drivers/net/mlx5/mlx5.c
> @@ -799,6 +799,12 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
>  			}
>  			eth_dev->device = &pci_dev->device;
>  			eth_dev->dev_ops = &mlx5_dev_sec_ops;
> +			/*
> +			 * rte_eth_devices[] is not shared but static to each
> +			 * process. The backward pointer should be reset.
> +			 */
> +			priv = eth_dev->data->dev_private;
> +			priv->dev = eth_dev;
>  			err = mlx5_uar_init_secondary(eth_dev);
>  			if (err)
>  				goto error;
> -- 
> 2.11.0
>
  
Yongseok Koh May 2, 2018, 7:12 a.m. UTC | #2
> On May 1, 2018, at 11:53 PM, Nélio Laranjeiro <nelio.laranjeiro@6wind.com> wrote:

> 

> On Tue, May 01, 2018 at 11:13:20PM -0700, Yongseok Koh wrote:

>> rte_eth_devices[] is not shared between primary and secondary process, but

>> a static array to each process. The backward pointer of device (priv->dev)

>> must be reset when a secondary process attaches to a device.

>> 

>> Fixes: f8b9a3bad467 ("net/mlx5: install a socket to exchange a file descriptor")

>> Cc: stable@dpdk.org

>> 

>> Signed-off-by: Yongseok Koh <yskoh@mellanox.com>

> Acked-by: Nelio Laranjeiro <nelio.laranjeiro@6wind.com>


Sorry, self NACK.
priv->dev is shared, so if it is changed by secondary process, primary will get
affected. Will come up with a different idea...

Thanks,
Yongseok


>> ---

>> drivers/net/mlx5/mlx5.c | 6 ++++++

>> 1 file changed, 6 insertions(+)

>> 

>> diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c

>> index 8f983061a..f606e3dd4 100644

>> --- a/drivers/net/mlx5/mlx5.c

>> +++ b/drivers/net/mlx5/mlx5.c

>> @@ -799,6 +799,12 @@ mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,

>> 			}

>> 			eth_dev->device = &pci_dev->device;

>> 			eth_dev->dev_ops = &mlx5_dev_sec_ops;

>> +			/*

>> +			 * rte_eth_devices[] is not shared but static to each

>> +			 * process. The backward pointer should be reset.

>> +			 */

>> +			priv = eth_dev->data->dev_private;

>> +			priv->dev = eth_dev;

>> 			err = mlx5_uar_init_secondary(eth_dev);

>> 			if (err)

>> 				goto error;

>> -- 

>> 2.11.0

>> 

> 

> -- 

> Nélio Laranjeiro

> 6WIND
  

Patch

diff --git a/drivers/net/mlx5/mlx5.c b/drivers/net/mlx5/mlx5.c
index 8f983061a..f606e3dd4 100644
--- a/drivers/net/mlx5/mlx5.c
+++ b/drivers/net/mlx5/mlx5.c
@@ -799,6 +799,12 @@  mlx5_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
 			}
 			eth_dev->device = &pci_dev->device;
 			eth_dev->dev_ops = &mlx5_dev_sec_ops;
+			/*
+			 * rte_eth_devices[] is not shared but static to each
+			 * process. The backward pointer should be reset.
+			 */
+			priv = eth_dev->data->dev_private;
+			priv->dev = eth_dev;
 			err = mlx5_uar_init_secondary(eth_dev);
 			if (err)
 				goto error;