From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by dpdk.org (Postfix) with ESMTP id 286BC14E8 for ; Mon, 11 Dec 2017 12:08:12 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Dec 2017 03:08:11 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.45,391,1508828400"; d="scan'208";a="1605140" Received: from rnicolau-mobl.ger.corp.intel.com (HELO [10.237.221.73]) ([10.237.221.73]) by fmsmga008.fm.intel.com with ESMTP; 11 Dec 2017 03:08:11 -0800 To: Shahaf Shuler , dev@dpdk.org References: <20171123121419.144132-1-shahafs@mellanox.com> <20171123121419.144132-10-shahafs@mellanox.com> From: Radu Nicolau Message-ID: <147e40cf-ff76-079b-a6f3-7a9567bd4a36@intel.com> Date: Mon, 11 Dec 2017 11:08:10 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <20171123121419.144132-10-shahafs@mellanox.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Subject: Re: [dpdk-dev] [PATCH 09/39] examples/bond: convert to new ethdev offloads API X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 11 Dec 2017 11:08:13 -0000 On 11/23/2017 12:14 PM, Shahaf Shuler wrote: > 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 > --- > examples/bond/main.c | 68 ++++++++++++++++++++++++++++++++++++++++------- > 1 file changed, 58 insertions(+), 10 deletions(-) > > diff --git a/examples/bond/main.c b/examples/bond/main.c > index 8e3b1f340..306447e6b 100644 > --- a/examples/bond/main.c > +++ b/examples/bond/main.c > @@ -151,11 +151,8 @@ static struct rte_eth_conf port_conf = { > .mq_mode = ETH_MQ_RX_NONE, > .max_rx_pkt_len = ETHER_MAX_LEN, > .split_hdr_size = 0, > - .header_split = 0, /**< Header Split disabled */ > - .hw_ip_checksum = 0, /**< 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, > }, > .rx_adv_conf = { > .rss_conf = { > @@ -174,10 +171,30 @@ slave_port_init(uint16_t portid, struct rte_mempool *mbuf_pool) > int retval; > uint16_t nb_rxd = RTE_RX_DESC_DEFAULT; > uint16_t nb_txd = RTE_TX_DESC_DEFAULT; > + struct rte_eth_dev_info dev_info; > + struct rte_eth_rxconf rxq_conf; > + struct rte_eth_txconf txq_conf; > > if (portid >= rte_eth_dev_count()) > rte_exit(EXIT_FAILURE, "Invalid port\n"); > > + 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); > + 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); > + port_conf.txmode.offloads &= dev_info.tx_offload_capa; > + } > retval = rte_eth_dev_configure(portid, 1, 1, &port_conf); > if (retval != 0) > rte_exit(EXIT_FAILURE, "port %u: configuration failed (res=%d)\n", > @@ -189,16 +206,22 @@ slave_port_init(uint16_t portid, struct rte_mempool *mbuf_pool) > "failed (res=%d)\n", portid, retval); > > /* RX setup */ > + rxq_conf = dev_info.default_rxconf; > + rxq_conf.offloads = port_conf.rxmode.offloads; > retval = rte_eth_rx_queue_setup(portid, 0, nb_rxd, > - rte_eth_dev_socket_id(portid), NULL, > + rte_eth_dev_socket_id(portid), > + &rxq_conf, > mbuf_pool); > if (retval < 0) > rte_exit(retval, " port %u: RX queue 0 setup failed (res=%d)", > portid, retval); > > /* TX setup */ > + txq_conf = dev_info.default_txconf; > + txq_conf.txq_flags = ETH_TXQ_FLAGS_IGNORE; > + txq_conf.offloads = port_conf.txmode.offloads; > retval = rte_eth_tx_queue_setup(portid, 0, nb_txd, > - rte_eth_dev_socket_id(portid), NULL); > + rte_eth_dev_socket_id(portid), &txq_conf); > > if (retval < 0) > rte_exit(retval, "port %u: TX queue 0 setup failed (res=%d)", > @@ -225,6 +248,9 @@ bond_port_init(struct rte_mempool *mbuf_pool) > uint8_t i; > uint16_t nb_rxd = RTE_RX_DESC_DEFAULT; > uint16_t nb_txd = RTE_TX_DESC_DEFAULT; > + struct rte_eth_dev_info dev_info; > + struct rte_eth_rxconf rxq_conf; > + struct rte_eth_txconf txq_conf; > > retval = rte_eth_bond_create("bond0", BONDING_MODE_ALB, > 0 /*SOCKET_ID_ANY*/); > @@ -234,6 +260,23 @@ bond_port_init(struct rte_mempool *mbuf_pool) > > BOND_PORT = retval; > > + rte_eth_dev_info_get(BOND_PORT, &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", > + BOND_PORT, port_conf.rxmode.offloads, > + dev_info.rx_offload_capa); > + 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", > + BOND_PORT, port_conf.txmode.offloads, > + dev_info.tx_offload_capa); > + port_conf.txmode.offloads &= dev_info.tx_offload_capa; > + } > retval = rte_eth_dev_configure(BOND_PORT, 1, 1, &port_conf); > if (retval != 0) > rte_exit(EXIT_FAILURE, "port %u: configuration failed (res=%d)\n", > @@ -245,16 +288,21 @@ bond_port_init(struct rte_mempool *mbuf_pool) > "failed (res=%d)\n", BOND_PORT, retval); > > /* RX setup */ > + rxq_conf = dev_info.default_rxconf; > + rxq_conf.offloads = port_conf.rxmode.offloads; > retval = rte_eth_rx_queue_setup(BOND_PORT, 0, nb_rxd, > - rte_eth_dev_socket_id(BOND_PORT), NULL, > - mbuf_pool); > + rte_eth_dev_socket_id(BOND_PORT), > + &rxq_conf, mbuf_pool); > if (retval < 0) > rte_exit(retval, " port %u: RX queue 0 setup failed (res=%d)", > BOND_PORT, retval); > > /* TX setup */ > + txq_conf = dev_info.default_txconf; > + txq_conf.txq_flags = ETH_TXQ_FLAGS_IGNORE; > + txq_conf.offloads = port_conf.txmode.offloads; > retval = rte_eth_tx_queue_setup(BOND_PORT, 0, nb_txd, > - rte_eth_dev_socket_id(BOND_PORT), NULL); > + rte_eth_dev_socket_id(BOND_PORT), &txq_conf); > > if (retval < 0) > rte_exit(retval, "port %u: TX queue 0 setup failed (res=%d)", Reviewed-by:  Radu Nicolau