net/ena: fix dev init with multi-process
authorMichal Krawczyk <mk@semihalf.com>
Fri, 25 Jan 2019 08:10:25 +0000 (09:10 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Sun, 27 Jan 2019 22:38:37 +0000 (23:38 +0100)
The check for proc type in eth_ena_dev_init() should appear before
modyfing adapter structure.

Calling memset on ena_adapter from secondary process context, was
erasing all structure information, and it was causing the crash of the
main process.

Fixes: 1173fca25af9 ("ena: add polling-mode driver")
Cc: stable@dpdk.org
Signed-off-by: Michal Krawczyk <mk@semihalf.com>
drivers/net/ena/ena_ethdev.c

index fde5fa7..747390b 100644 (file)
@@ -1715,19 +1715,20 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev)
        static int adapters_found;
        bool wd_state;
 
-       memset(adapter, 0, sizeof(struct ena_adapter));
-       ena_dev = &adapter->ena_dev;
-
        eth_dev->dev_ops = &ena_dev_ops;
        eth_dev->rx_pkt_burst = &eth_ena_recv_pkts;
        eth_dev->tx_pkt_burst = &eth_ena_xmit_pkts;
        eth_dev->tx_pkt_prepare = &eth_ena_prep_pkts;
-       adapter->rte_eth_dev_data = eth_dev->data;
-       adapter->rte_dev = eth_dev;
 
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
                return 0;
 
+       memset(adapter, 0, sizeof(struct ena_adapter));
+       ena_dev = &adapter->ena_dev;
+
+       adapter->rte_eth_dev_data = eth_dev->data;
+       adapter->rte_dev = eth_dev;
+
        pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);
        adapter->pdev = pci_dev;