From a379430126d878d1149793b70fd7deffcf3e4207 Mon Sep 17 00:00:00 2001 From: Zhe Tao Date: Thu, 10 Mar 2016 15:26:22 +0000 Subject: [PATCH] ixgbe: fix VF Rx/Tx function assignment For the secondary process of DPDK to initialize ixgbevf, it will always use the simple RX function or LRO RX function, and this behavior is not the same RX/TX function selection logic as it is for the primary process. Use the ixgbe_set_tx_function and ixgbe_set_rx_function to select the RX/TX function when secondary process calls the init function for eth dev. Fixes: 9d8a92628f21 ("ixgbe: remove simple scalar scattered Rx method") Signed-off-by: Zhe Tao Signed-off-by: Bruce Richardson Acked-by: Helin Zhang --- drivers/net/ixgbe/ixgbe_ethdev.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 1402c65041..c133310a1d 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -1326,8 +1326,21 @@ eth_ixgbevf_dev_init(struct rte_eth_dev *eth_dev) * has already done this work. Only check we don't need a different * RX function */ if (rte_eal_process_type() != RTE_PROC_PRIMARY){ - if (eth_dev->data->scattered_rx) - eth_dev->rx_pkt_burst = ixgbe_recv_pkts_lro_single_alloc; + struct ixgbe_tx_queue *txq; + /* TX queue function in primary, set by last queue initialized + * Tx queue may not initialized by primary process + */ + if (eth_dev->data->tx_queues) { + txq = eth_dev->data->tx_queues[eth_dev->data->nb_tx_queues - 1]; + ixgbe_set_tx_function(eth_dev, txq); + } else { + /* Use default TX function if we get here */ + PMD_INIT_LOG(NOTICE, + "No TX queues configured yet. Using default TX function."); + } + + ixgbe_set_rx_function(eth_dev); + return 0; } -- 2.20.1