Tuesday, December 12, 2017 7:12 PM, Ananyev, Konstantin: > > -----Original Message----- > > From: Shahaf Shuler [mailto:shah...@mellanox.com] > > Sent: Tuesday, December 12, 2017 12:26 PM > > To: dev@dpdk.org; Ananyev, Konstantin > <konstantin.anan...@intel.com>; > > Nicolau, Radu <radu.nico...@intel.com>; arybche...@solarflare.com > > Subject: [PATCH v2 05/39] examples/l3fwd: move to ethdev offloads API > > > > Ethdev offloads API has changed since: > > > > commit ce17eddefc20 ("ethdev: introduce Rx queue offloads API") commit > > cba7f53b717d ("ethdev: introduce Tx queue offloads API") > > > > This commit support the new API. > > > > Signed-off-by: Shahaf Shuler <shah...@mellanox.com> > > --- > > examples/l3fwd/main.c | 40 ++++++++++++++++++++++++++++++-------- > -- > > 1 file changed, 30 insertions(+), 10 deletions(-) > > > > diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c index > > 6229568..3bdf4d5 100644 > > --- a/examples/l3fwd/main.c > > +++ b/examples/l3fwd/main.c > > @@ -149,11 +149,9 @@ struct lcore_params { > > .mq_mode = ETH_MQ_RX_RSS, > > .max_rx_pkt_len = ETHER_MAX_LEN, > > .split_hdr_size = 0, > > - .header_split = 0, /**< Header Split disabled */ > > - .hw_ip_checksum = 1, /**< IP checksum offload enabled */ > > - .hw_vlan_filter = 0, /**< VLAN filtering disabled */ > > - .jumbo_frame = 0, /**< Jumbo Frame Support disabled */ > > - .hw_strip_crc = 1, /**< CRC stripped by hardware */ > > + .ignore_offload_bitfield = 1, > > + .offloads = (DEV_RX_OFFLOAD_CRC_STRIP | > > + DEV_RX_OFFLOAD_CHECKSUM), > > }, > > .rx_adv_conf = { > > .rss_conf = { > > @@ -163,6 +161,7 @@ struct lcore_params { > > }, > > .txmode = { > > .mq_mode = ETH_MQ_TX_NONE, > > + .offloads = DEV_TX_OFFLOAD_MBUF_FAST_FREE, > > Hmm, does it mean a new warning for all PMDs (majority) which don't > support DEV_TX_OFFLOAD_MBUF_FAST_FREE?
Good point. Unlike other offloads which are must for the application proper run, this one it only for optimizing the performance and should be set only if PMD supports. Am continuing to aggregate reasons why the DEV_TX_OFFLOAD_MBUF_FAST_FREE should not be defined as an offload. Anyway we passed that... I will fix on v3. > Konstantin > > > }, > > }; > > > > @@ -612,7 +611,8 @@ enum { > > }; > > > > printf("%s\n", str8); > > - port_conf.rxmode.jumbo_frame = 1; > > + port_conf.rxmode.offloads |= > DEV_RX_OFFLOAD_JUMBO_FRAME; > > + port_conf.txmode.offloads |= > DEV_TX_OFFLOAD_MULTI_SEGS; > > > > /* > > * if no max-pkt-len set, use the default @@ -908,6 > +908,22 @@ > > enum { > > n_tx_queue = MAX_TX_QUEUE_PER_PORT; > > printf("Creating queues: nb_rxq=%d nb_txq=%u... ", > > nb_rx_queue, (unsigned)n_tx_queue ); > > + > > + rte_eth_dev_info_get(portid, &dev_info); > > + if ((dev_info.rx_offload_capa & port_conf.rxmode.offloads) > != > > + port_conf.rxmode.offloads) { > > + printf("Some Rx offloads are not supported " > > + "by port %d: requested 0x%lx supported > 0x%lx\n", > > + portid, port_conf.rxmode.offloads, > > + dev_info.rx_offload_capa); > > + } > > + if ((dev_info.tx_offload_capa & port_conf.txmode.offloads) > != > > + port_conf.txmode.offloads) { > > + printf("Some Tx offloads are not supported " > > + "by port %d: requested 0x%lx supported > 0x%lx\n", > > + portid, port_conf.txmode.offloads, > > + dev_info.tx_offload_capa); > > + } > > ret = rte_eth_dev_configure(portid, nb_rx_queue, > > (uint16_t)n_tx_queue, &port_conf); > > if (ret < 0) > > @@ -955,10 +971,9 @@ enum { > > printf("txq=%u,%d,%d ", lcore_id, queueid, > socketid); > > fflush(stdout); > > > > - rte_eth_dev_info_get(portid, &dev_info); > > txconf = &dev_info.default_txconf; > > - if (port_conf.rxmode.jumbo_frame) > > - txconf->txq_flags = 0; > > + txconf->txq_flags = ETH_TXQ_FLAGS_IGNORE; > > + txconf->offloads = port_conf.txmode.offloads; > > ret = rte_eth_tx_queue_setup(portid, queueid, > nb_txd, > > socketid, txconf); > > if (ret < 0) > > @@ -984,6 +999,8 @@ enum { > > fflush(stdout); > > /* init RX queues */ > > for(queue = 0; queue < qconf->n_rx_queue; ++queue) { > > + struct rte_eth_rxconf rxq_conf; > > + > > portid = qconf->rx_queue_list[queue].port_id; > > queueid = qconf->rx_queue_list[queue].queue_id; > > > > @@ -996,9 +1013,12 @@ enum { > > printf("rxq=%d,%d,%d ", portid, queueid, socketid); > > fflush(stdout); > > > > + rte_eth_dev_info_get(portid, &dev_info); > > + rxq_conf = dev_info.default_rxconf; > > + rxq_conf.offloads = port_conf.rxmode.offloads; > > ret = rte_eth_rx_queue_setup(portid, queueid, > nb_rxd, > > socketid, > > - NULL, > > + &rxq_conf, > > pktmbuf_pool[socketid]); > > if (ret < 0) > > rte_exit(EXIT_FAILURE, > > -- > > 1.8.3.1