X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fqede%2Fqede_ethdev.c;h=74dfe895ad80068d0b176dcaa94f2c1e45b78a62;hb=1b7b9f170fcebbbd0708fab554dcb5a7badef8cf;hp=fdbfa6af994b47e196673adf690abb6fa283fcdd;hpb=81f8804992c9af87a59f2fd8acda5ac58dd976bb;p=dpdk.git diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index fdbfa6af99..74dfe895ad 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -270,8 +270,10 @@ qede_interrupt_handler(void *param) static void qede_assign_rxtx_handlers(struct rte_eth_dev *dev) { + uint64_t tx_offloads = dev->data->dev_conf.txmode.offloads; struct qede_dev *qdev = dev->data->dev_private; struct ecore_dev *edev = &qdev->edev; + bool use_tx_offload = false; if (ECORE_IS_CMT(edev)) { dev->rx_pkt_burst = qede_recv_pkts_cmt; @@ -287,7 +289,18 @@ qede_assign_rxtx_handlers(struct rte_eth_dev *dev) dev->rx_pkt_burst = qede_recv_pkts_regular; } - dev->tx_pkt_burst = qede_xmit_pkts; + use_tx_offload = !!(tx_offloads & + (DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM | /* tunnel */ + DEV_TX_OFFLOAD_TCP_TSO | /* tso */ + DEV_TX_OFFLOAD_VLAN_INSERT)); /* vlan insert */ + + if (use_tx_offload) { + DP_INFO(edev, "Assigning qede_xmit_pkts\n"); + dev->tx_pkt_burst = qede_xmit_pkts; + } else { + DP_INFO(edev, "Assigning qede_xmit_pkts_regular\n"); + dev->tx_pkt_burst = qede_xmit_pkts_regular; + } } static void @@ -1496,7 +1509,8 @@ static void qede_dev_close(struct rte_eth_dev *eth_dev) if (eth_dev->data->dev_started) qede_dev_stop(eth_dev); - qede_stop_vport(edev); + if (qdev->vport_started) + qede_stop_vport(edev); qdev->vport_started = false; qede_fdir_dealloc_resc(eth_dev); qede_dealloc_fp_resc(eth_dev);