[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