On 2/17/2023 9:59 PM, Ed Czeck wrote:
> From: John Miller <john.miller@atomicrules.com>
>
> disable device configuration for secondary processes
>
> Signed-off-by: John Miller <john.miller@atomicrules.com>
> ---
> v2:
> * Use standard logging
> ---
> drivers/net/ark/ark_ethdev.c | 11 ++++++++---
> 1 file changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c
> index b2995427c8..d237e80cf4 100644
> --- a/drivers/net/ark/ark_ethdev.c
> +++ b/drivers/net/ark/ark_ethdev.c
> @@ -147,6 +147,9 @@ eth_ark_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
> struct rte_eth_dev *eth_dev;
> int ret;
>
> + if (rte_eal_process_type() == RTE_PROC_SECONDARY)
> + ARK_PMD_LOG(DEBUG, "ARK probed by secondary process\n");
> +
> eth_dev = rte_eth_dev_pci_allocate(pci_dev, sizeof(struct ark_adapter));
>
> if (eth_dev == NULL)
> @@ -385,9 +388,11 @@ eth_ark_dev_init(struct rte_eth_dev *dev)
> 0xcafef00d, ark->sysctrl.t32[4], __func__);
>
> /* We are a single function multi-port device. */
> - ret = ark_config_device(dev);
> - if (ret)
> - return -1;
> + if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
> + ret = ark_config_device(dev);
> + if (ret)
> + return -1;
> + }
Hi Ed,
As far as I can see both primary and secondary process continues to run
after this point, and below there are a few places that updates
'eth_dev->data'.
'eth_dev->data' is shared between primary and secondaries, so each
secondary will be overwriting the shared data.
Better usage is shared data only updated by primary process and
secondary processes use available values.
But 'eth_dev' is process specific and all primary and shared processes
must set fields of this struct.
You may need to re-order calls in function to make secondary quit after
'eth_dev' fields updated and before 'eth_dev->data' updated, to make
sure secondaries don't update shared data.
>
> dev->dev_ops = &ark_eth_dev_ops;
> dev->rx_queue_count = eth_ark_dev_rx_queue_count;