Fixes the secondary process changed shared memory
in "rte_eth_copy_pci_info" function.In that function
only primary can update the value of "eth_dev->data"
which shared by primary and secondary.

Signed-off-by: Fang TongHao <fangtong...@sangfor.com.cn>
---
 lib/librte_ethdev/rte_ethdev_pci.h | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/lib/librte_ethdev/rte_ethdev_pci.h 
b/lib/librte_ethdev/rte_ethdev_pci.h
index ccdbb46ec..e7dae0545 100644
--- a/lib/librte_ethdev/rte_ethdev_pci.h
+++ b/lib/librte_ethdev/rte_ethdev_pci.h
@@ -60,14 +60,16 @@ rte_eth_copy_pci_info(struct rte_eth_dev *eth_dev,
 
        eth_dev->intr_handle = &pci_dev->intr_handle;
 
-       eth_dev->data->dev_flags = 0;
-       if (pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC)
-               eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC;
-       if (pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_RMV)
-               eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_RMV;
-
-       eth_dev->data->kdrv = pci_dev->kdrv;
-       eth_dev->data->numa_node = pci_dev->device.numa_node;
+       if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
+               eth_dev->data->dev_flags = 0;
+               if (pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_LSC)
+                       eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_LSC;
+               if (pci_dev->driver->drv_flags & RTE_PCI_DRV_INTR_RMV)
+                       eth_dev->data->dev_flags |= RTE_ETH_DEV_INTR_RMV;
+
+               eth_dev->data->kdrv = pci_dev->kdrv;
+               eth_dev->data->numa_node = pci_dev->device.numa_node;
+       }
 }
 
 static inline int
-- 
2.24.1.windows.2

Reply via email to