The secondary process would crash trying to get the offload
capability of the device. Since the device capabilities were
already set by the primary process this was unnecessary.

Fixes: 4e9c73e96e83 ("net/netvsc: add Hyper-V network device")
Cc: sta...@dpdk.org
Signed-off-by: Stephen Hemminger <step...@networkplumber.org>
---
 drivers/net/netvsc/hn_ethdev.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/net/netvsc/hn_ethdev.c b/drivers/net/netvsc/hn_ethdev.c
index 159116f7f691..c79f924379fe 100644
--- a/drivers/net/netvsc/hn_ethdev.c
+++ b/drivers/net/netvsc/hn_ethdev.c
@@ -257,15 +257,16 @@ static int hn_dev_info_get(struct rte_eth_dev *dev,
        dev_info->max_rx_queues = hv->max_queues;
        dev_info->max_tx_queues = hv->max_queues;
 
-       rc = hn_rndis_get_offload(hv, dev_info);
-       if (rc != 0)
-               return rc;
+       if (rte_eal_process_type() != RTE_PROC_PRIMARY)
+               return 0;
 
-       rc = hn_vf_info_get(hv, dev_info);
+       /* fills in rx and tx offload capability */
+       rc = hn_rndis_get_offload(hv, dev_info);
        if (rc != 0)
                return rc;
 
-       return 0;
+       /* merges the offload and queues of vf */
+       return hn_vf_info_get(hv, dev_info);
 }
 
 static int hn_rss_reta_update(struct rte_eth_dev *dev,
@@ -929,6 +930,9 @@ eth_hn_dev_init(struct rte_eth_dev *eth_dev)
        eth_dev->tx_pkt_burst = &hn_xmit_pkts;
        eth_dev->rx_pkt_burst = &hn_recv_pkts;
 
+       /* Since Hyper-V only supports one MAC address, just use local data */
+       eth_dev->data->mac_addrs = &hv->mac_addr;
+
        /*
         * for secondary processes, we don't initialize any further as primary
         * has already done this work.
@@ -936,9 +940,6 @@ eth_hn_dev_init(struct rte_eth_dev *eth_dev)
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
                return 0;
 
-       /* Since Hyper-V only supports one MAC address, just use local data */
-       eth_dev->data->mac_addrs = &hv->mac_addr;
-
        hv->vmbus = vmbus;
        hv->rxbuf_res = &vmbus->resource[HV_RECV_BUF_MAP];
        hv->chim_res  = &vmbus->resource[HV_SEND_BUF_MAP];
-- 
2.20.1

Reply via email to