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 8AB7E41CE4; Mon, 20 Feb 2023 09:00:59 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EDFE642FB4; Mon, 20 Feb 2023 09:00:58 +0100 (CET) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by mails.dpdk.org (Postfix) with ESMTP id 73CC340395; Mon, 20 Feb 2023 09:00:57 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1676880057; x=1708416057; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=8aS113/iPKKeG6IaDqDmrJcr+AEKHnOHoW6f1qjquqY=; b=NBSZcMsHqcbHFSPZFojjd2iiLkFL9v58CPgJDG3Ftkg9Q4OxT8lQpAnV bM5ksmylBVlwNWH8+wERMmdH4bbLrNlgSxbmnh3Ee71tvkEb+XRvjOS7C RVQSr8ExNvGRyO1JqJNwss9d85J905JbCDIs6WqAXhns10trNvpvCsgW1 jXAe9qwos4r4EPs09sQFYFuWTpEGtFXMx+m+bWpGZGAieWXOc6wUAHYvH bsHFt7ByPkISLOQKaLneAohwjwzNk02TMo84WRIJ0Ec/XfxCkg1gSt31+ fJZEqJzoMr4tvaZ++WWT8jV0a3k+N7DakrMtcPc7fla4QXYLPX7mOcU0Z w==; X-IronPort-AV: E=McAfee;i="6500,9779,10626"; a="330060146" X-IronPort-AV: E=Sophos;i="5.97,311,1669104000"; d="scan'208";a="330060146" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 20 Feb 2023 00:00:56 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10626"; a="916766600" X-IronPort-AV: E=Sophos;i="5.97,311,1669104000"; d="scan'208";a="916766600" Received: from unknown (HELO npg-dpdk-simeisu-cvl-119d218.sh.intel.com) ([10.67.119.208]) by fmsmga006.fm.intel.com with ESMTP; 20 Feb 2023 00:00:54 -0800 From: Simei Su To: beilei.xing@intel.com, yuying.zhang@intel.com, qi.z.zhang@intel.com, david.marchand@redhat.com Cc: dev@dpdk.org, qiming.yang@intel.com, Simei Su , stable@dpdk.org Subject: [PATCH v6] net/i40e: rework maximum frame size configuration Date: Mon, 20 Feb 2023 15:59:52 +0800 Message-Id: <20230220075952.444153-1-simei.su@intel.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20230202123632.56730-1-simei.su@intel.com> References: <20230202123632.56730-1-simei.su@intel.com> 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 One issue is reported by David Marchand that error occurs in OVS due to the fix patch in mentioned changes below. The detailed reproduce step and result are 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 Reported-by: David Marchand 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