diff --git a/SOURCES/openvswitch-2.17.0.patch b/SOURCES/openvswitch-2.17.0.patch index ee7f07d..d854c86 100644 --- a/SOURCES/openvswitch-2.17.0.patch +++ b/SOURCES/openvswitch-2.17.0.patch @@ -24317,38 +24317,10 @@ index d1230f94cb..b5cd6188b4 100644 #endif /* _HNS3_STATS_H_ */ diff --git a/dpdk/drivers/net/i40e/i40e_ethdev.c b/dpdk/drivers/net/i40e/i40e_ethdev.c -index c0bfff43ee..ecef1a6e7e 100644 +index c0bfff43ee..1d417dbf8a 100644 --- a/dpdk/drivers/net/i40e/i40e_ethdev.c +++ b/dpdk/drivers/net/i40e/i40e_ethdev.c -@@ -386,6 +386,7 @@ 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, -@@ -1709,11 +1710,6 @@ eth_i40e_dev_init(struct rte_eth_dev *dev, void *init_params __rte_unused) - */ - i40e_add_tx_flow_control_drop_filter(pf); - -- /* Set the max frame size to 0x2600 by default, -- * in case other drivers changed the default value. -- */ -- i40e_aq_set_mac_config(hw, I40E_FRAME_SIZE_MAX, TRUE, false, 0, NULL); -- - /* initialize RSS rule list */ - TAILQ_INIT(&pf->rss_config_list); - -@@ -2364,6 +2360,7 @@ i40e_dev_start(struct rte_eth_dev *dev) - uint32_t intr_vector = 0; - struct i40e_vsi *vsi; - uint16_t nb_rxq, nb_txq; -+ uint16_t max_frame_size; - - hw->adapter_stopped = 0; - -@@ -2483,7 +2480,7 @@ i40e_dev_start(struct rte_eth_dev *dev) +@@ -2483,7 +2483,7 @@ i40e_dev_start(struct rte_eth_dev *dev) if (ret != I40E_SUCCESS) PMD_DRV_LOG(WARNING, "Fail to set phy mask"); @@ -24357,36 +24329,7 @@ index c0bfff43ee..ecef1a6e7e 100644 i40e_dev_link_update(dev, 0); } -@@ -2502,6 +2499,9 @@ 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); -+ - return I40E_SUCCESS; - - tx_err: -@@ -2848,6 +2848,9 @@ 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) - { -@@ -2914,8 +2917,6 @@ 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; -@@ -3555,7 +3556,7 @@ static int i40e_dev_xstats_get_names(__rte_unused struct rte_eth_dev *dev, +@@ -3555,7 +3555,7 @@ static int i40e_dev_xstats_get_names(__rte_unused struct rte_eth_dev *dev, count++; } @@ -24395,7 +24338,7 @@ index c0bfff43ee..ecef1a6e7e 100644 for (i = 0; i < I40E_NB_HW_PORT_XSTATS; i++) { strlcpy(xstats_names[count].name, rte_i40e_hw_port_strings[i].name, -@@ -3613,7 +3614,7 @@ i40e_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, +@@ -3613,7 +3613,7 @@ i40e_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, count++; } @@ -24404,7 +24347,7 @@ index c0bfff43ee..ecef1a6e7e 100644 for (i = 0; i < I40E_NB_HW_PORT_XSTATS; i++) { xstats[count].value = *(uint64_t *)(((char *)hw_stats) + rte_i40e_hw_port_strings[i].offset); -@@ -5544,7 +5545,7 @@ i40e_vsi_get_bw_config(struct i40e_vsi *vsi) +@@ -5544,7 +5544,7 @@ i40e_vsi_get_bw_config(struct i40e_vsi *vsi) &ets_sla_config, NULL); if (ret != I40E_SUCCESS) { PMD_DRV_LOG(ERR, @@ -24413,15 +24356,7 @@ index c0bfff43ee..ecef1a6e7e 100644 hw->aq.asq_last_status); return ret; } -@@ -6719,6 +6720,7 @@ i40e_dev_handle_aq_msg(struct rte_eth_dev *dev) - if (!ret) - rte_eth_dev_callback_process(dev, - RTE_ETH_EVENT_INTR_LSC, NULL); -+ - break; - default: - PMD_DRV_LOG(DEBUG, "Request %u is not supported yet", -@@ -6822,7 +6824,7 @@ i40e_handle_mdd_event(struct rte_eth_dev *dev) +@@ -6822,7 +6822,7 @@ i40e_handle_mdd_event(struct rte_eth_dev *dev) * @param handle * Pointer to interrupt handle. * @param param @@ -24430,7 +24365,7 @@ index c0bfff43ee..ecef1a6e7e 100644 * * @return * void -@@ -9719,7 +9721,7 @@ i40e_ethertype_filter_convert(const struct rte_eth_ethertype_filter *input, +@@ -9719,7 +9719,7 @@ i40e_ethertype_filter_convert(const struct rte_eth_ethertype_filter *input, return 0; } @@ -24439,47 +24374,6 @@ index c0bfff43ee..ecef1a6e7e 100644 struct i40e_ethertype_filter * i40e_sw_ethertype_filter_lookup(struct i40e_ethertype_rule *ethertype_rule, const struct i40e_ethertype_filter_input *input) -@@ -12103,6 +12105,40 @@ 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 diff --git a/dpdk/drivers/net/i40e/i40e_ethdev.h b/dpdk/drivers/net/i40e/i40e_ethdev.h index 2d182f8000..a1ebdc093c 100644 --- a/dpdk/drivers/net/i40e/i40e_ethdev.h diff --git a/SPECS/openvswitch2.17.spec b/SPECS/openvswitch2.17.spec index 7c72a4c..02eaa8c 100644 --- a/SPECS/openvswitch2.17.spec +++ b/SPECS/openvswitch2.17.spec @@ -57,7 +57,7 @@ Summary: Open vSwitch Group: System Environment/Daemons daemon/database/utilities URL: http://www.openvswitch.org/ Version: 2.17.0 -Release: 74%{?dist} +Release: 75%{?dist} # Nearly all of openvswitch is ASL 2.0. The bugtool is LGPLv2+, and the # lib/sflow*.[ch] files are SISSL @@ -748,6 +748,23 @@ exit 0 %endif %changelog +* Tue Mar 28 2023 David Marchand - 2.17.0-75 +- net/i40e: revert link status check on device start [RH git: 79a3a95a21] (#2138116) + [ upstream commit a8ca8edf8c076c765c6d142ab4664a1f61414233 ] + + The mentioned changes broke existing applications when the link status + of i40e ports is down at the time the port is started. + Revert those changes, the original issue will need a different fix. + + 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") + + Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2138116 + Signed-off-by: David Marchand + Acked-by: Simei Su + + * Mon Mar 27 2023 Open vSwitch CI - 2.17.0-74 - Merging upstream branch-2.17 [RH git: a86c3f2963] Commit list: