From: Hao Chen <chenhao288@xxxxxxxxxxxxx> Add support for ethtool to set/get tx copybreak buf size. Signed-off-by: Hao Chen <chenhao288@xxxxxxxxxxxxx> Signed-off-by: Guangbin Huang <huangguangbin2@xxxxxxxxxx> --- Documentation/networking/ethtool-netlink.rst | 24 ++++++++++++++++++++ include/uapi/linux/ethtool.h | 1 + net/ethtool/common.c | 1 + net/ethtool/ioctl.c | 1 + 4 files changed, 27 insertions(+) diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst index d9b55b7a1a4d..a47b0255aaf9 100644 --- a/Documentation/networking/ethtool-netlink.rst +++ b/Documentation/networking/ethtool-netlink.rst @@ -1521,6 +1521,30 @@ Kernel response contents: ``ETHTOOL_A_PHC_VCLOCKS_INDEX`` s32 PHC index array ==================================== ====== ========================== +TUNABLE_SET +=========== + +Request contents: + + ===================================== ====== ========================== + ``ETHTOOL_TX_COPYBREAK_BUF_SIZE`` u32 buf size for tx copybreak + ===================================== ====== ========================== + +Tx copybreak buf size is used for tx copybreak feature, the feature is used +for small size packet or frag. It adds a queue based tx shared bounce buffer +to memcpy the small packet when the len of xmitted skb is below tx_copybreak +(value to distinguish small size and normal size), and reduce the overhead +of dma map and unmap when IOMMU is on. + +TUNABLE_GET +=========== + +Kernel response contents: + + ==================================== ====== ========================== + ``ETHTOOL_TX_COPYBREAK_BUF_SIZE`` u32 buf size for tx copybreak + ==================================== ====== ========================== + Request translation =================== diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h index b6db6590baf0..266e95e4fb33 100644 --- a/include/uapi/linux/ethtool.h +++ b/include/uapi/linux/ethtool.h @@ -231,6 +231,7 @@ enum tunable_id { ETHTOOL_RX_COPYBREAK, ETHTOOL_TX_COPYBREAK, ETHTOOL_PFC_PREVENTION_TOUT, /* timeout in msecs */ + ETHTOOL_TX_COPYBREAK_BUF_SIZE, /* * Add your fresh new tunable attribute above and remember to update * tunable_strings[] in net/ethtool/common.c diff --git a/net/ethtool/common.c b/net/ethtool/common.c index c63e0739dc6a..0c5210015911 100644 --- a/net/ethtool/common.c +++ b/net/ethtool/common.c @@ -89,6 +89,7 @@ tunable_strings[__ETHTOOL_TUNABLE_COUNT][ETH_GSTRING_LEN] = { [ETHTOOL_RX_COPYBREAK] = "rx-copybreak", [ETHTOOL_TX_COPYBREAK] = "tx-copybreak", [ETHTOOL_PFC_PREVENTION_TOUT] = "pfc-prevention-tout", + [ETHTOOL_TX_COPYBREAK_BUF_SIZE] = "tx-copybreak-buf-size", }; const char diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c index 999e2a6bed13..a6600e361c34 100644 --- a/net/ethtool/ioctl.c +++ b/net/ethtool/ioctl.c @@ -2381,6 +2381,7 @@ static int ethtool_tunable_valid(const struct ethtool_tunable *tuna) switch (tuna->id) { case ETHTOOL_RX_COPYBREAK: case ETHTOOL_TX_COPYBREAK: + case ETHTOOL_TX_COPYBREAK_BUF_SIZE: if (tuna->len != sizeof(u32) || tuna->type_id != ETHTOOL_TUNABLE_U32) return -EINVAL; -- 2.33.0