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