86 lines
3.4 KiB
Diff
86 lines
3.4 KiB
Diff
From 3199dbc5cd688e8b9239a17ba6602779e7b1ba01 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= <ihuguet@redhat.com>
|
|
Date: Thu, 3 Apr 2025 09:20:58 +0200
|
|
Subject: [PATCH 1/2] core: fail early if we cannot get current FEC value
|
|
|
|
If we cannot get current FEC value probably we won't be able to set it a
|
|
few lines later. Also, if it fails to set, we try to use the value of
|
|
the old one that we tried to retrieve without success. In that case, the
|
|
variable old_fec_mode would be uninitialized. Fix it by returning early
|
|
if we cannot get the current value.
|
|
|
|
Fixes: 19bed3121fb6 ('ethtool: support Forward Error Correction(fec)')
|
|
(cherry picked from commit cbdd0d9cca34f4e1cbd177e347e14265e1afaf6c)
|
|
(cherry picked from commit b7e34f225a57b5374d39e095284d6ad03da59097)
|
|
---
|
|
src/core/devices/nm-device.c | 7 +++++--
|
|
1 file changed, 5 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
|
|
index 801dc7cd76..8d7eaa5676 100644
|
|
--- a/src/core/devices/nm-device.c
|
|
+++ b/src/core/devices/nm-device.c
|
|
@@ -2768,13 +2768,16 @@ _ethtool_fec_set(NMDevice *self,
|
|
fec_mode = g_variant_get_uint32(variant);
|
|
}
|
|
|
|
- nm_platform_ethtool_get_fec_mode(platform, ethtool_state->ifindex, &old_fec_mode);
|
|
-
|
|
/* The NM_SETTING_ETHTOOL_FEC_MODE_NONE is query only value, hence do nothing. */
|
|
if (!fec_mode || fec_mode == NM_SETTING_ETHTOOL_FEC_MODE_NONE) {
|
|
return;
|
|
}
|
|
|
|
+ if (!nm_platform_ethtool_get_fec_mode(platform, ethtool_state->ifindex, &old_fec_mode)) {
|
|
+ _LOGW(LOGD_DEVICE, "ethtool: failure setting FEC %d: cannot get current value", fec_mode);
|
|
+ return;
|
|
+ }
|
|
+
|
|
if (!nm_platform_ethtool_set_fec_mode(platform, ethtool_state->ifindex, fec_mode))
|
|
_LOGW(LOGD_DEVICE, "ethtool: failure setting FEC %d", fec_mode);
|
|
else {
|
|
--
|
|
2.49.0
|
|
|
|
|
|
From 85e98d98e5511e3b4faa5248b51c32d650a098af Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?=C3=8D=C3=B1igo=20Huguet?= <ihuguet@redhat.com>
|
|
Date: Thu, 3 Apr 2025 09:32:26 +0200
|
|
Subject: [PATCH 2/2] core: optimize hash table search in _ethtool_fec_set
|
|
|
|
Break the loop as soon as we've found the value.
|
|
|
|
Fixes: 19bed3121fb6 ('ethtool: support Forward Error Correction(fec)')
|
|
(cherry picked from commit 245f0e0b35d385e966289080dbd2594e74a189b2)
|
|
(cherry picked from commit 094a542546b158038473cc59f3f8ab03851e63eb)
|
|
---
|
|
src/core/devices/nm-device.c | 12 +++++-------
|
|
1 file changed, 5 insertions(+), 7 deletions(-)
|
|
|
|
diff --git a/src/core/devices/nm-device.c b/src/core/devices/nm-device.c
|
|
index 8d7eaa5676..c777d934d6 100644
|
|
--- a/src/core/devices/nm-device.c
|
|
+++ b/src/core/devices/nm-device.c
|
|
@@ -2759,13 +2759,11 @@ _ethtool_fec_set(NMDevice *self,
|
|
|
|
g_hash_table_iter_init(&iter, hash);
|
|
while (g_hash_table_iter_next(&iter, (gpointer *) &name, (gpointer *) &variant)) {
|
|
- NMEthtoolID ethtool_id = nm_ethtool_id_get_by_name(name);
|
|
-
|
|
- if (!nm_ethtool_id_is_fec(ethtool_id))
|
|
- continue;
|
|
-
|
|
- nm_assert(g_variant_is_of_type(variant, G_VARIANT_TYPE_UINT32));
|
|
- fec_mode = g_variant_get_uint32(variant);
|
|
+ if (nm_ethtool_id_is_fec(nm_ethtool_id_get_by_name(name))) {
|
|
+ nm_assert(g_variant_is_of_type(variant, G_VARIANT_TYPE_UINT32));
|
|
+ fec_mode = g_variant_get_uint32(variant);
|
|
+ break;
|
|
+ }
|
|
}
|
|
|
|
/* The NM_SETTING_ETHTOOL_FEC_MODE_NONE is query only value, hence do nothing. */
|
|
--
|
|
2.49.0
|
|
|