<div dir="ltr"><div>Hi ferruh, <br></div><div>We have limited support for secondary processes.  This patch simply avoids corrupting the FPGA state if a secondary process attaches. <br></div><div>Improved support for secondary processes is on our list, but we need a strong customer driver for this feature.</div><div>An update patch is following soon.</div><div>Thanks for the review.</div><div>Ed.<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Feb 20, 2023 at 9:17 AM Ferruh Yigit <<a href="mailto:ferruh.yigit@amd.com">ferruh.yigit@amd.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 2/17/2023 9:59 PM, Ed Czeck wrote:<br>
> From: John Miller <<a href="mailto:john.miller@atomicrules.com" target="_blank">john.miller@atomicrules.com</a>><br>
> <br>
> disable device configuration for secondary processes<br>
> <br>
> Signed-off-by: John Miller <<a href="mailto:john.miller@atomicrules.com" target="_blank">john.miller@atomicrules.com</a>><br>
> ---<br>
> v2:<br>
> * Use standard logging<br>
> ---<br>
>  drivers/net/ark/ark_ethdev.c | 11 ++++++++---<br>
>  1 file changed, 8 insertions(+), 3 deletions(-)<br>
> <br>
> diff --git a/drivers/net/ark/ark_ethdev.c b/drivers/net/ark/ark_ethdev.c<br>
> index b2995427c8..d237e80cf4 100644<br>
> --- a/drivers/net/ark/ark_ethdev.c<br>
> +++ b/drivers/net/ark/ark_ethdev.c<br>
> @@ -147,6 +147,9 @@ eth_ark_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,<br>
>       struct rte_eth_dev *eth_dev;<br>
>       int ret;<br>
>  <br>
> +     if (rte_eal_process_type() == RTE_PROC_SECONDARY)<br>
> +             ARK_PMD_LOG(DEBUG, "ARK probed by secondary process\n");<br>
> +<br>
>       eth_dev = rte_eth_dev_pci_allocate(pci_dev, sizeof(struct ark_adapter));<br>
>  <br>
>       if (eth_dev == NULL)<br>
> @@ -385,9 +388,11 @@ eth_ark_dev_init(struct rte_eth_dev *dev)<br>
>                   0xcafef00d, ark->sysctrl.t32[4], __func__);<br>
>  <br>
>       /* We are a single function multi-port device. */<br>
> -     ret = ark_config_device(dev);<br>
> -     if (ret)<br>
> -             return -1;<br>
> +     if (rte_eal_process_type() == RTE_PROC_PRIMARY) {<br>
> +             ret = ark_config_device(dev);<br>
> +             if (ret)<br>
> +                     return -1;<br>
> +     }<br>
<br>
<br>
Hi Ed,<br>
<br>
As far as I can see both primary and secondary process continues to run<br>
after this point, and below there are a few places that updates<br>
'eth_dev->data'.<br>
<br>
'eth_dev->data' is shared between primary and secondaries, so each<br>
secondary will be overwriting the shared data.<br>
Better usage is shared data only updated by primary process and<br>
secondary processes use available values.<br>
But 'eth_dev' is process specific and all primary and shared processes<br>
must set fields of this struct.<br>
<br>
You may need to re-order calls in function to make secondary quit after<br>
'eth_dev' fields updated and before 'eth_dev->data' updated, to make<br>
sure secondaries don't update shared data.<br>
<br>
>  <br>
>       dev->dev_ops = &ark_eth_dev_ops;<br>
>       dev->rx_queue_count = eth_ark_dev_rx_queue_count;<br>
<br>
</blockquote></div>