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 2AE1A41CF8 for ; Mon, 20 Feb 2023 08:28:12 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0A4FF42F92; Mon, 20 Feb 2023 08:28:12 +0100 (CET) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id C62DB40395 for ; Mon, 20 Feb 2023 08:28:09 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1676878090; x=1708414090; h=from:to:cc:subject:date:message-id; bh=hd462CMab1zUFJKFWI5cOdv3Hv72yQXqkCYQTw7yINA=; b=aM86dp99HbL2ln/ugFg8P4QrChSwmlLvlVr6GcfPpRbzf6N6C/yVLK1d WmN+8+FoAalAa7li34iOn2uKVe9h9RStigqgLMtTOdGVB9XP3XiTlUCR/ eDP8hsDxxLM4AiWBcFJvGki76j/ui6IanhE/3ILpKZqSb6Opd79lIp/v4 nK+lK+FrDcpb282tTdj4nDHkIKBbkbVO2i6KyJp60d538mx5SDXii2KSV 23AqT8IGtYsuJ83u2/btFR1YK/KgvNuuVa4xN0mkHW4UOCo61+/6IHX9j ytZmJUXxZ45sr/UaPD2xvsZI2hvfvjo+Fl1Q53U/WGWy4FJ0NWNDyUsuI w==; X-IronPort-AV: E=McAfee;i="6500,9779,10626"; a="330054554" X-IronPort-AV: E=Sophos;i="5.97,311,1669104000"; d="scan'208";a="330054554" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Feb 2023 23:28:08 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10626"; a="795083810" X-IronPort-AV: E=Sophos;i="5.97,311,1669104000"; d="scan'208";a="795083810" Received: from unknown (HELO npg-dpdk-simeisu-cvl-119d218.sh.intel.com) ([10.67.119.208]) by orsmga004.jf.intel.com with ESMTP; 19 Feb 2023 23:28:06 -0800 From: Simei Su To: wenjun1.wu@intel.com Cc: Simei Su , stable@dpdk.org Subject: [PATCH v6] net/i40e: rework maximum frame size configuration Date: Mon, 20 Feb 2023 15:27:05 +0800 Message-Id: <20230220072705.438239-1-simei.su@intel.com> X-Mailer: git-send-email 2.9.5 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org The issue reported by David is that error occurs in OVS due to the fix patch in mentionned changes below. The detailed reproduce step and result is in https://patchwork.dpdk.org/project/dpdk/patch/ 20211207085946.121032-1-dapengx.yu@intel.com/. This patch removes unnecessary link status check and directly sets mac config in dev_start. Also, it sets the parameter "wait to complete" true to wait for more time to make sure adminq command execute completed. Fixes: a4ba77367923 ("net/i40e: enable maximum frame size at port level") Fixes: 2184f7cdeeaa ("net/i40e: fix max frame size config at port level") Fixes: 719469f13b11 ("net/i40e: fix jumbo frame Rx with X722") Cc: stable@dpdk.org Signed-off-by: Simei Su --- v6: * Refine commit log. * Remove return error. v5: * Fix misspelling in commit log. v4: * Refine commit log. * Avoid duplicate call to set parameter "wait to complete" true. v3: * Put link update before interrupt enable. v2: * Refine commit log. * Add link update. drivers/net/i40e/i40e_ethdev.c | 50 ++++++++---------------------------------- 1 file changed, 9 insertions(+), 41 deletions(-) diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c index 7726a89d..30c904c 100644 --- a/drivers/net/i40e/i40e_ethdev.c +++ b/drivers/net/i40e/i40e_ethdev.c @@ -387,7 +387,6 @@ static int i40e_set_default_mac_addr(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr); static int i40e_dev_mtu_set(struct rte_eth_dev *dev, uint16_t mtu); -static void i40e_set_mac_max_frame(struct rte_eth_dev *dev, uint16_t size); static int i40e_ethertype_filter_convert( const struct rte_eth_ethertype_filter *input, @@ -2449,7 +2448,7 @@ i40e_dev_start(struct rte_eth_dev *dev) PMD_DRV_LOG(WARNING, "Fail to set phy mask"); /* Call get_link_info aq command to enable/disable LSE */ - i40e_dev_link_update(dev, 0); + i40e_dev_link_update(dev, 1); } if (dev->data->dev_conf.intr_conf.rxq == 0) { @@ -2467,8 +2466,12 @@ i40e_dev_start(struct rte_eth_dev *dev) "please call hierarchy_commit() " "before starting the port"); - max_frame_size = dev->data->mtu + I40E_ETH_OVERHEAD; - i40e_set_mac_max_frame(dev, max_frame_size); + max_frame_size = dev->data->mtu ? + dev->data->mtu + I40E_ETH_OVERHEAD : + I40E_FRAME_SIZE_MAX; + + /* Set the max frame size to HW*/ + i40e_aq_set_mac_config(hw, max_frame_size, TRUE, false, 0, NULL); return I40E_SUCCESS; @@ -2809,9 +2812,6 @@ i40e_dev_set_link_down(struct rte_eth_dev *dev) return i40e_phy_conf_link(hw, abilities, speed, false); } -#define CHECK_INTERVAL 100 /* 100ms */ -#define MAX_REPEAT_TIME 10 /* 1s (10 * 100ms) in total */ - static __rte_always_inline void update_link_reg(struct i40e_hw *hw, struct rte_eth_link *link) { @@ -2878,6 +2878,8 @@ static __rte_always_inline void update_link_aq(struct i40e_hw *hw, struct rte_eth_link *link, bool enable_lse, int wait_to_complete) { +#define CHECK_INTERVAL 100 /* 100ms */ +#define MAX_REPEAT_TIME 10 /* 1s (10 * 100ms) in total */ uint32_t rep_cnt = MAX_REPEAT_TIME; struct i40e_link_status link_status; int status; @@ -12123,40 +12125,6 @@ i40e_cloud_filter_qinq_create(struct i40e_pf *pf) return ret; } -static void -i40e_set_mac_max_frame(struct rte_eth_dev *dev, uint16_t size) -{ - struct i40e_hw *hw = I40E_DEV_PRIVATE_TO_HW(dev->data->dev_private); - uint32_t rep_cnt = MAX_REPEAT_TIME; - struct rte_eth_link link; - enum i40e_status_code status; - bool can_be_set = true; - - /* - * I40E_MEDIA_TYPE_BASET link up can be ignored - * I40E_MEDIA_TYPE_BASET link down that hw->phy.media_type - * is I40E_MEDIA_TYPE_UNKNOWN - */ - if (hw->phy.media_type != I40E_MEDIA_TYPE_BASET && - hw->phy.media_type != I40E_MEDIA_TYPE_UNKNOWN) { - do { - update_link_reg(hw, &link); - if (link.link_status) - break; - rte_delay_ms(CHECK_INTERVAL); - } while (--rep_cnt); - can_be_set = !!link.link_status; - } - - if (can_be_set) { - status = i40e_aq_set_mac_config(hw, size, TRUE, 0, false, NULL); - if (status != I40E_SUCCESS) - PMD_DRV_LOG(ERR, "Failed to set max frame size at port level"); - } else { - PMD_DRV_LOG(ERR, "Set max frame size at port level not applicable on link down"); - } -} - RTE_LOG_REGISTER_SUFFIX(i40e_logtype_init, init, NOTICE); RTE_LOG_REGISTER_SUFFIX(i40e_logtype_driver, driver, NOTICE); #ifdef RTE_ETHDEV_DEBUG_RX -- 2.9.5