On 2/17/2023 9:59 PM, Ed Czeck wrote: > From: John Miller <john.mil...@atomicrules.com> > > disable device configuration for secondary processes > > Signed-off-by: John Miller <john.mil...@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;