X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Focteontx%2Focteontx_ethdev.c;h=97b4298febe695749d3c64c5a5754b53eb190325;hb=5cbe184802aae6f3033617c7a281e9e33eaf41a1;hp=24c4e83a92b848e1cc166b03a4cda93c3b5fad8d;hpb=85221a0c7c28e10e6b31504448c37134e8facd55;p=dpdk.git diff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c index 24c4e83a92..97b4298feb 100644 --- a/drivers/net/octeontx/octeontx_ethdev.c +++ b/drivers/net/octeontx/octeontx_ethdev.c @@ -267,7 +267,9 @@ octeontx_tx_offload_flags(struct rte_eth_dev *eth_dev) struct octeontx_nic *nic = octeontx_pmd_priv(eth_dev); uint16_t flags = 0; - /* Created function for supoorting future offloads */ + if (!(nic->tx_offloads & DEV_TX_OFFLOAD_MBUF_FAST_FREE)) + flags |= OCCTX_TX_OFFLOAD_MBUF_NOFF_F; + if (nic->tx_offloads & DEV_TX_OFFLOAD_MULTI_SEGS) flags |= OCCTX_TX_MULTI_SEG_F; @@ -436,27 +438,20 @@ octeontx_recheck_rx_offloads(struct octeontx_rxq *rxq) return 0; } -static void -octeontx_set_tx_function(struct rte_eth_dev *dev) -{ - struct octeontx_nic *nic = octeontx_pmd_priv(dev); - - const eth_tx_burst_t tx_burst_func[2] = { - [0] = octeontx_xmit_pkts, - [1] = octeontx_xmit_pkts_mseg, - }; - - dev->tx_pkt_burst = - tx_burst_func[!!(nic->tx_offloads & DEV_TX_OFFLOAD_MULTI_SEGS)]; -} - static int octeontx_dev_start(struct rte_eth_dev *dev) { struct octeontx_nic *nic = octeontx_pmd_priv(dev); - int ret; + struct octeontx_rxq *rxq; + int ret = 0, i; - ret = 0; + /* Rechecking if any new offload set to update + * rx/tx burst function pointer accordingly. + */ + for (i = 0; i < dev->data->nb_rx_queues; i++) { + rxq = dev->data->rx_queues[i]; + octeontx_recheck_rx_offloads(rxq); + } PMD_INIT_FUNC_TRACE(); /* @@ -1159,7 +1154,7 @@ octeontx_create(struct rte_vdev_device *dev, int port, uint8_t evdev, eth_dev->dev_ops = &octeontx_dev_ops; eth_dev->device = &dev->device; - eth_dev->tx_pkt_burst = octeontx_xmit_pkts; + octeontx_set_tx_function(eth_dev); eth_dev->rx_pkt_burst = octeontx_recv_pkts; rte_eth_dev_probing_finish(eth_dev); return 0;