[dpdk-dev] [PATCH] net/enic: fix multi-process operation

Ferruh Yigit ferruh.yigit at intel.com
Mon Sep 18 23:27:15 CEST 2017


On 9/11/2017 7:58 PM, John Daley wrote:
> - Use rte_malloc() instead of malloc() for the per device 'vdev' structure
>   so that it can be shared across processes.
> - Only initialize the device if the process type is RTE_PROC_PRIMARY
> - Only allow the primary process to do queue setup, start/stop, promisc
>   allmulticast, mac add/del, mtu.
> 
> Fixes: fefed3d1e62c ("enic: new driver")
> Cc: stable at dpdk.org
> 
> Signed-off-by: John Daley <johndale at cisco.com>

<...>

> diff --git a/drivers/net/enic/enic_ethdev.c b/drivers/net/enic/enic_ethdev.c
> index da8fec2d0..33a3f87e2 100644
> --- a/drivers/net/enic/enic_ethdev.c
> +++ b/drivers/net/enic/enic_ethdev.c
> @@ -142,6 +142,10 @@ enicpmd_dev_filter_ctrl(struct rte_eth_dev *dev,
>  static void enicpmd_dev_tx_queue_release(void *txq)
>  {
>  	ENICPMD_FUNC_TRACE();
> +
> +	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
> +		return;
> +

Hi John,

I am not sure about these updates. Agree that these functions should
know process type, but all others PMDs don't do this.

Added a few more people for comment, but as far I understand its
application responsibility to NOT call these functions if it is
secondary process.

For device init/uninit, that is part of eal_init() and have to be called
both for primary and secondary process and PMD needs to protect it, for
other functions application's responsibility.


>  	enic_free_wq(txq);
>  }
>  
> @@ -196,6 +200,9 @@ static int enicpmd_dev_tx_queue_setup(struct rte_eth_dev *eth_dev,
>  	int ret;
>  	struct enic *enic = pmd_priv(eth_dev);
>  
> +	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
> +		return -E_RTE_SECONDARY;
> +
>  	ENICPMD_FUNC_TRACE();
>  	if (queue_idx >= ENIC_WQ_MAX) {
>  		dev_err(enic,
> @@ -272,6 +279,10 @@ static int enicpmd_dev_rx_queue_stop(struct rte_eth_dev *eth_dev,
>  static void enicpmd_dev_rx_queue_release(void *rxq)
>  {
>  	ENICPMD_FUNC_TRACE();
> +
> +	if (rte_eal_process_type() != RTE_PROC_PRIMARY)
> +		return;
> +
>  	enic_free_rq(rxq);
>  }
>  

<...>



More information about the dev mailing list