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: sta...@dpdk.org
> 
> Signed-off-by: John Daley <johnd...@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);
>  }
>  

<...>

Reply via email to