From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 853AAA052A; Mon, 25 Jan 2021 08:12:25 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 092A2140D25; Mon, 25 Jan 2021 08:12:25 +0100 (CET) Received: from szxga07-in.huawei.com (szxga07-in.huawei.com [45.249.212.35]) by mails.dpdk.org (Postfix) with ESMTP id 45BF7140D23 for ; Mon, 25 Jan 2021 08:12:22 +0100 (CET) Received: from DGGEMS409-HUB.china.huawei.com (unknown [172.30.72.58]) by szxga07-in.huawei.com (SkyGuard) with ESMTP id 4DPLcq5DCJz7Zgh; Mon, 25 Jan 2021 15:11:07 +0800 (CST) Received: from [10.66.74.184] (10.66.74.184) by DGGEMS409-HUB.china.huawei.com (10.3.19.209) with Microsoft SMTP Server id 14.3.498.0; Mon, 25 Jan 2021 15:12:07 +0800 To: Steve Yang , CC: , , , , , , , , References: <20201223085152.20866-1-stevex.yang@intel.com> <20210122090110.50453-1-stevex.yang@intel.com> <20210122090110.50453-2-stevex.yang@intel.com> From: Huisong Li Message-ID: <25b3da8b-a193-d130-0bb5-da2526a48743@huawei.com> Date: Mon, 25 Jan 2021 15:12:06 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.6.1 MIME-Version: 1.0 In-Reply-To: <20210122090110.50453-2-stevex.yang@intel.com> X-Originating-IP: [10.66.74.184] X-CFilter-Loop: Reflected Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: Re: [dpdk-dev] [PATCH v3 1/3] ethdev: fix MTU doesn't update when jumbo frame disabled X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Steve, In the current modification, the MTU is updated based on 'max_rx_pkt_len' regardless of whether jumbo frame is enabled. Now, MTU is correct when jumbo frmae is disabled. However, when jumbo frame is enabled, the MTU value may be inconsistent with the definition of the enabled jumbo frame. Like: 1/ DEV_RX_OFFLOAD_JUMBO_FRAME is set; 2/ max_rx_pkt_len = 1200 3/ dev->data->mtu = 1200 - overhead_len(18) = 1182 In rte_eth_dev_configure API, the check for 'max_rx_pkt_len' is as follows: if (dev_conf->rxmode.offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) {  //jumbo frame enabled         if (dev_conf->rxmode.max_rx_pkt_len > dev_info.max_rx_pktlen) {             xxxx             goto rollback;         } else if (*dev_conf->rxmode.max_rx_pkt_len < RTE_ETHER_MIN_LEN*) {             xxxx             goto rollback;         } } else { //jumbo frame disabled         if (pktlen < RTE_ETHER_MIN_MTU + overhead_len ||                     pktlen > RTE_ETHER_MTU + overhead_len)                         /* Use default value */ dev->data->dev_conf.rxmode.max_rx_pkt_len =                                                 RTE_ETHER_MTU + overhead_len; } Since the applicatin sets DEV_RX_OFFLOAD_JUMBO_FRAME to enable jumbo frame, and the framework API needs to update the MTU based on 'max_rx_pkt_len', but the framework API uses *RTE_ETHER_MIN_LEN(64)* to verify the boundary value of 'max_rx_pkt_len', instead of "RTE_ETHER_MTU + overhead_len".  As far as I know, if the applicatin sets DEV_RX_OFFLOAD_JUMBO_FRAME and 'max_rx_pkt_len' is 1200, the framework API or driver should return a failure. As mentioned in this patch set, the jumbo frame offload is set only when 'max_rx_pkt_len' requested is greater than "RTE_ETHER_MTU + eth_overhead" in testpmd. I really don't understand it.  How do you understand this behavior? Thanks. 在 2021/1/22 17:01, Steve Yang 写道: > The MTU value should be updated to 'max_rx_pkt_len - overhead' > no matter if the JUMBO FRAME offload enabled. If not update this MTU, > use will get the wrong MTU info via some command. > E.g.: 'show port info all' in testpmd tool. > > Actually, the 'max_rx_pkt_len' has been used for other purposes in many > places now, even though the 'max_rx_pkt_len' is expected 'Only used if > JUMBO_FRAME enabled'. > > For examples, > 'max_rx_pkt_len' perhaps can be used as the 'rx_ctx.rxmax' in i40e. > > Fixes: bf0f90d92d30 ("ethdev: fix max Rx packet length check") > > Signed-off-by: Steve Yang > --- > lib/librte_ethdev/rte_ethdev.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/lib/librte_ethdev/rte_ethdev.c b/lib/librte_ethdev/rte_ethdev.c > index daf5f24f7e..42857e3b67 100644 > --- a/lib/librte_ethdev/rte_ethdev.c > +++ b/lib/librte_ethdev/rte_ethdev.c > @@ -1421,10 +1421,6 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q, > ret = -EINVAL; > goto rollback; > } > - > - /* Scale the MTU size to adapt max_rx_pkt_len */ > - dev->data->mtu = dev->data->dev_conf.rxmode.max_rx_pkt_len - > - overhead_len; > } else { > uint16_t pktlen = dev_conf->rxmode.max_rx_pkt_len; > if (pktlen < RTE_ETHER_MIN_MTU + overhead_len || > @@ -1434,6 +1430,10 @@ rte_eth_dev_configure(uint16_t port_id, uint16_t nb_rx_q, uint16_t nb_tx_q, > RTE_ETHER_MTU + overhead_len; > } > > + /* Scale the MTU size to adapt max_rx_pkt_len */ > + dev->data->mtu = dev->data->dev_conf.rxmode.max_rx_pkt_len - > + overhead_len; > + > /* > * If LRO is enabled, check that the maximum aggregated packet > * size is supported by the configured device.