From c92c8350aa0eeb54254842323e50ae8e434a8290 Mon Sep 17 00:00:00 2001 From: Guangbin Huang Date: Sat, 4 Dec 2021 21:00:59 +0800 Subject: [PATCH] netlink: add two link extended substates and coalesce cqe mode Patch1 adds two link extended substates of bad signal integrity available in the kernel. Patch2 adds support for "ethtool -C cqe-mode-rx/cqe-mode-tx on/off" for setting coalesce cqe mode. Signed-off-by: Guangbin Huang --- ...-add-two-link-extended-substates-of-.patch | 52 ++++++++++ ...-add-netlink-support-for-coalesce-cq.patch | 94 +++++++++++++++++++ ethtool.spec | 2 + 3 files changed, 148 insertions(+) create mode 100644 0001-netlink-settings-add-two-link-extended-substates-of-.patch create mode 100644 0002-netlink-settings-add-netlink-support-for-coalesce-cq.patch diff --git a/0001-netlink-settings-add-two-link-extended-substates-of-.patch b/0001-netlink-settings-add-two-link-extended-substates-of-.patch new file mode 100644 index 0000000..ab23e80 --- /dev/null +++ b/0001-netlink-settings-add-two-link-extended-substates-of-.patch @@ -0,0 +1,52 @@ +From 45e8cbd8210c22da196cd9bc20cafd28bb043de2 Mon Sep 17 00:00:00 2001 +From: Guangbin Huang +Date: Thu, 25 Nov 2021 16:12:00 +0800 +Subject: [PATCH 1/2] netlink: settings: add two link extended substates of bad + signal integrity + +Add two link extended substates of bad signal integrity available in the +kernel. + +ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST means the input +external clock signal for SerDes is too weak or lost. + +ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS means the received signal for +SerDes is too weak because analog loss of signal. + +Signed-off-by: Guangbin Huang +--- + netlink/settings.c | 4 ++++ + uapi/linux/ethtool.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/netlink/settings.c b/netlink/settings.c +index e47a38f..6d10a07 100644 +--- a/netlink/settings.c ++++ b/netlink/settings.c +@@ -639,6 +639,10 @@ static const char *const names_bad_signal_integrity_link_ext_substate[] = { + "Large number of physical errors", + [ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE] = + "Unsupported rate", ++ [ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST] = ++ "Serdes reference clock lost", ++ [ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS] = ++ "Serdes ALOS", + }; + + static const char *const names_cable_issue_link_ext_substate[] = { +diff --git a/uapi/linux/ethtool.h b/uapi/linux/ethtool.h +index a951137..208f704 100644 +--- a/uapi/linux/ethtool.h ++++ b/uapi/linux/ethtool.h +@@ -636,6 +636,8 @@ enum ethtool_link_ext_substate_link_logical_mismatch { + enum ethtool_link_ext_substate_bad_signal_integrity { + ETHTOOL_LINK_EXT_SUBSTATE_BSI_LARGE_NUMBER_OF_PHYSICAL_ERRORS = 1, + ETHTOOL_LINK_EXT_SUBSTATE_BSI_UNSUPPORTED_RATE, ++ ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_REFERENCE_CLOCK_LOST, ++ ETHTOOL_LINK_EXT_SUBSTATE_BSI_SERDES_ALOS, + }; + + /** +-- +2.20.1 + diff --git a/0002-netlink-settings-add-netlink-support-for-coalesce-cq.patch b/0002-netlink-settings-add-netlink-support-for-coalesce-cq.patch new file mode 100644 index 0000000..b42d2b2 --- /dev/null +++ b/0002-netlink-settings-add-netlink-support-for-coalesce-cq.patch @@ -0,0 +1,94 @@ +From 7150c2a1afaf2b53a1bca47366e4ed56ec4d6e41 Mon Sep 17 00:00:00 2001 +From: Yufeng Mo +Date: Sat, 4 Dec 2021 20:46:45 +0800 +Subject: [PATCH 2/2] netlink: settings: add netlink support for coalesce cqe + mode parameter + +Add support for "ethtool -C cqe-mode-rx/cqe-mode-tx on/off" +for setting coalesce cqe mode. + +Signed-off-by: Yufeng Mo +Signed-off-by: Guangbin Huang +--- + ethtool.8.in | 2 ++ + ethtool.c | 2 ++ + netlink/coalesce.c | 16 ++++++++++++++++ + uapi/linux/ethtool_netlink.h | 2 ++ + 4 files changed, 22 insertions(+) + +diff --git a/ethtool.8.in b/ethtool.8.in +index 67fb325..abb4a4e 100644 +--- a/ethtool.8.in ++++ b/ethtool.8.in +@@ -186,6 +186,8 @@ ethtool \- query or control network driver and hardware settings + .BN tx\-usecs\-high + .BN tx\-frames\-high + .BN sample\-interval ++.B2 cqe\-mode\-rx on off ++.B2 cqe\-mode\-tx on off + .HP + .B ethtool \-g|\-\-show\-ring + .I devname +diff --git a/ethtool.c b/ethtool.c +index e4b36c1..c8c920c 100644 +--- a/ethtool.c ++++ b/ethtool.c +@@ -5693,6 +5693,8 @@ static const struct option args[] = { + " [tx-usecs-high N]\n" + " [tx-frames-high N]\n" + " [sample-interval N]\n" ++ " [cqe-mode-rx on|off]\n" ++ " [cqe-mode-tx on|off]\n" + }, + { + .opts = "-g|--show-ring", +diff --git a/netlink/coalesce.c b/netlink/coalesce.c +index 75922a9..15037c2 100644 +--- a/netlink/coalesce.c ++++ b/netlink/coalesce.c +@@ -66,6 +66,10 @@ int coalesce_reply_cb(const struct nlmsghdr *nlhdr, void *data) + show_u32(tb[ETHTOOL_A_COALESCE_TX_USECS_HIGH], "tx-usecs-high: "); + show_u32(tb[ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH], "tx-frame-high: "); + putchar('\n'); ++ show_bool("rx", "CQE mode RX: %s ", ++ tb[ETHTOOL_A_COALESCE_USE_CQE_MODE_RX]); ++ show_bool("tx", "TX: %s\n", tb[ETHTOOL_A_COALESCE_USE_CQE_MODE_TX]); ++ putchar('\n'); + + return MNL_CB_OK; + } +@@ -226,6 +230,18 @@ static const struct param_parser scoalesce_params[] = { + .handler = nl_parse_direct_u32, + .min_argc = 1, + }, ++ { ++ .arg = "cqe-mode-rx", ++ .type = ETHTOOL_A_COALESCE_USE_CQE_MODE_RX, ++ .handler = nl_parse_u8bool, ++ .min_argc = 1, ++ }, ++ { ++ .arg = "cqe-mode-tx", ++ .type = ETHTOOL_A_COALESCE_USE_CQE_MODE_TX, ++ .handler = nl_parse_u8bool, ++ .min_argc = 1, ++ }, + {} + }; + +diff --git a/uapi/linux/ethtool_netlink.h b/uapi/linux/ethtool_netlink.h +index 0cd6906..e817146 100644 +--- a/uapi/linux/ethtool_netlink.h ++++ b/uapi/linux/ethtool_netlink.h +@@ -367,6 +367,8 @@ enum { + ETHTOOL_A_COALESCE_TX_USECS_HIGH, /* u32 */ + ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH, /* u32 */ + ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL, /* u32 */ ++ ETHTOOL_A_COALESCE_USE_CQE_MODE_TX, /* u8 */ ++ ETHTOOL_A_COALESCE_USE_CQE_MODE_RX, /* u8 */ + + /* add new constants above here */ + __ETHTOOL_A_COALESCE_CNT, +-- +2.20.1 + diff --git a/ethtool.spec b/ethtool.spec index fd24004..4b7395a 100644 --- a/ethtool.spec +++ b/ethtool.spec @@ -7,6 +7,8 @@ License: GPLv2 URL: https://www.kernel.org/pub/software/network/ethtool Source0: https://www.kernel.org/pub/software/network/%{name}/%{name}-%{version}.tar.xz +Patch0: 0001-netlink-settings-add-two-link-extended-substates-of-.patch +Patch1: 0002-netlink-settings-add-netlink-support-for-coalesce-cq.patch BuildRequires: gcc BuildRequires: libmnl-devel -- Gitee