From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E2EF4A09D9; Wed, 11 Nov 2020 13:58:32 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 6B6C5137D; Wed, 11 Nov 2020 13:58:30 +0100 (CET) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id 7C989F90 for ; Wed, 11 Nov 2020 13:58:28 +0100 (CET) IronPort-SDR: dunImccveZdV8Qz/yntvWtey4DYvGF8UisU9BEkKo88wN+G4iJ8CMhEc5Rcn33sySQvCj+728v yDftsl8zR8QA== X-IronPort-AV: E=McAfee;i="6000,8403,9801"; a="166630369" X-IronPort-AV: E=Sophos;i="5.77,469,1596524400"; d="scan'208";a="166630369" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Nov 2020 04:58:24 -0800 IronPort-SDR: 7QRbGTjAUhgIrdYR/6BXkrhTLZVx0I6JWDiJ+bDVDIvhFEKDsh/X+5F++dX/kRb9B7oUv5uBjC UbB0wJ3FzhjQ== X-IronPort-AV: E=Sophos;i="5.77,469,1596524400"; d="scan'208";a="473841319" Received: from fyigit-mobl1.ger.corp.intel.com (HELO [10.213.241.123]) ([10.213.241.123]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Nov 2020 04:58:22 -0800 To: Wenzhuo Lu , Beilei Xing , Bernard Iremonger Cc: dev@dpdk.org, Steve Yang , Thomas Monjalon , Andrew Rybchenko , Konstantin Ananyev , Olivier Matz , Lance Richardson References: <20201105180942.2938152-1-ferruh.yigit@intel.com> From: Ferruh Yigit Message-ID: <5e5f6ac8-be14-4205-f520-69369ede9c51@intel.com> Date: Wed, 11 Nov 2020 12:58:18 +0000 MIME-Version: 1.0 In-Reply-To: <20201105180942.2938152-1-ferruh.yigit@intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Subject: Re: [dpdk-dev] [RFC] app/testpmd: fix MTU after device configure 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 11/5/2020 6:09 PM, Ferruh Yigit wrote: > In 'rte_eth_dev_configure()', if 'DEV_RX_OFFLOAD_JUMBO_FRAME' is not set > the max frame size is limited to 'RTE_ETHER_MAX_LEN' (1518). > This is mistake because for the PMDs that has frame size bigger than > "RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN" (18 bytes), the MTU becomes > less than 1500, causing a valid frame with 1500 bytes payload to be > dropped. > > Since 'rte_eth_dev_set_mtu()' works as expected, it is called after > 'rte_eth_dev_configure()' to fix the MTU. > It may look redundant to set MTU after 'rte_eth_dev_configure()', both > with default values, but it is not, the resulting MTU config can be > different in the device based on frame overhead of the PMD. > > And instead of setting the MTU to default value, it is first get via > 'rte_eth_dev_get_mtu()' and set again, this is to cover cases MTU > changed from testpmd command line. > > 'rte_eth_dev_set_mtu()', '-ENOTSUP' error is ignored to prevent > irrelevant warning messages for the virtual PMDs. > > Signed-off-by: Ferruh Yigit > --- > Cc: Steve Yang > Cc: Thomas Monjalon > Cc: Andrew Rybchenko > Cc: Konstantin Ananyev > Cc: Olivier Matz > Cc: Lance Richardson > --- > app/test-pmd/testpmd.c | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+) > > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c > index 33fc0fddf5..48e9647fc7 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -2537,6 +2537,8 @@ start_port(portid_t pid) > } > > if (port->need_reconfig > 0) { > + uint16_t mtu = RTE_ETHER_MTU; > + > port->need_reconfig = 0; > > if (flow_isolate_all) { > @@ -2570,6 +2572,23 @@ start_port(portid_t pid) > port->need_reconfig = 1; > return -1; > } > + > + /* > + * Workaround for rte_eth_dev_configure(), max_rx_pkt_len > + * set MTU wrong for the PMDs that have frame overhead > + * bigger than RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN. > + * For a PMD that has 26 bytes overhead, rte_eth_dev_configure() > + * can set MTU to max 1492, not to expected 1500 bytes. > + * Using rte_eth_dev_set_mtu() to be able to set MTU correctly, > + * default MTU value is 1500. > + */ > + diag = rte_eth_dev_get_mtu(pi, &mtu); > + if (diag) > + printf("Failed to get MTU for port %d\n", pi); > + diag = rte_eth_dev_set_mtu(pi, mtu); > + if (diag != 0 && diag != -ENOTSUP) > + printf("Failed to set MTU to %u for port %d\n", > + mtu, pi); > } > if (port->need_reconfig_queues > 0) { > port->need_reconfig_queues = 0; > Hi Steve, Since your patch [1] for the fix reverted [2], can you please test above patch? If it works as expected I will send as actual patch. Thanks, ferruh [1] https://git.dpdk.org/dpdk/commit/?id=f6870a7ed6b3 [2] https://git.dpdk.org/dpdk/commit/?id=13e0b599acfd