Hi ferruh, We have limited support for secondary processes. This patch simply avoids corrupting the FPGA state if a secondary process attaches. Improved support for secondary processes is on our list, but we need a strong customer driver for this feature. An update patch is following soon. Thanks for the review. Ed. On Mon, Feb 20, 2023 at 9:17 AM Ferruh Yigit wrote: > On 2/17/2023 9:59 PM, Ed Czeck wrote: > > From: John Miller > > > > disable device configuration for secondary processes > > > > Signed-off-by: John Miller > > --- > > 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; > >