Message ID | 1628819129-23332-2-git-send-email-moyufeng@huawei.com |
---|---|
State | New |
Headers | show |
Series | ethtool: extend coalesce uAPI | expand |
On 2021/8/14 1:55, Jakub Kicinski wrote: > On Fri, 13 Aug 2021 09:45:26 +0800 Yufeng Mo wrote: >> Currently, there many drivers who support CQE mode configuration, >> some configure it as a fixed when initialized, some provide an >> interface to change it by ethtool private flags. In order make it >> more generic, add two new 'ETHTOOL_A_COALESCE_USE_CQE_TX' and >> 'ETHTOOL_A_COALESCE_USE_CQE_RX' coalesce attributes, then these >> parameters can be accessed by ethtool netlink coalesce uAPI. >> >> Signed-off-by: Yufeng Mo <moyufeng@huawei.com> >> Signed-off-by: Huazhong Tan <tanhuazhong@huawei.com> > > The series LGTM. When I was asking for documentation earlier I meant > a paragraph explaining the difference between the two modes. Here is > an example based on my current understanding, I could very well be > wrong but you see what kind of explanation I'm after? If this is more > or less correct please feel free to use it and modify as you see fit. > The description in the following document is consistent with my understanding. I'll add the following paragraph and add "Signed-off-by: Jakub Kicinski <kuba@kernel.org>" to the patch. Thanks for your correction. > diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst > index c86628e6a235..fc7ac5938aac 100644 > --- a/Documentation/networking/ethtool-netlink.rst > +++ b/Documentation/networking/ethtool-netlink.rst > @@ -939,12 +939,25 @@ Gets coalescing parameters like ``ETHTOOL_GCOALESCE`` ioctl request. > ``ETHTOOL_A_COALESCE_TX_USECS_HIGH`` u32 delay (us), high Tx > ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH`` u32 max packets, high Tx > ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL`` u32 rate sampling interval > + ``ETHTOOL_A_COALESCE_USE_CQE_TX`` bool timer reset mode, Tx > + ``ETHTOOL_A_COALESCE_USE_CQE_RX`` bool timer reset mode, Rx > =========================================== ====== ======================= > > Attributes are only included in reply if their value is not zero or the > corresponding bit in ``ethtool_ops::supported_coalesce_params`` is set (i.e. > they are declared as supported by driver). > > +Timer reset mode (``ETHTOOL_A_COALESCE_USE_CQE_TX`` and > +``ETHTOOL_A_COALESCE_USE_CQE_RX``) control the interaction between packet > +arrival and the various time based delay parameters. By default timers are > +expected to limit the max delay between any packet arrival/departure > +and a corresponding interrupt. In this mode timer should be started by packet > +arrival (sometimes delivery of previous interrupt) and reset when interrupt > +is delivered. > +Setting the appropriate attribute to 1 will enable ``CQE`` mode, where > +each packet event resets the timer. In this mode timer is used to force > +the interrupt if queue goes idle, while busy queues depend on the packet > +limit to trigger interrupts. > > COALESCE_SET > ============ > @@ -977,6 +990,8 @@ Sets coalescing parameters like ``ETHTOOL_SCOALESCE`` ioctl request. > ``ETHTOOL_A_COALESCE_TX_USECS_HIGH`` u32 delay (us), high Tx > ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH`` u32 max packets, high Tx > ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL`` u32 rate sampling interval > + ``ETHTOOL_A_COALESCE_USE_CQE_TX`` bool timer reset mode, Tx > + ``ETHTOOL_A_COALESCE_USE_CQE_RX`` bool timer reset mode, Rx > =========================================== ====== ======================= > > Request is rejected if it attributes declared as unsupported by driver (i.e. > . >
diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/networking/ethtool-netlink.rst index c86628e..af963cf 100644 --- a/Documentation/networking/ethtool-netlink.rst +++ b/Documentation/networking/ethtool-netlink.rst @@ -939,6 +939,10 @@ Kernel response contents: ``ETHTOOL_A_COALESCE_TX_USECS_HIGH`` u32 delay (us), high Tx ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH`` u32 max packets, high Tx ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL`` u32 rate sampling interval + ``ETHTOOL_A_COALESCE_USE_CQE_TX`` bool with timer reset on + packet arrival, Tx + ``ETHTOOL_A_COALESCE_USE_CQE_RX`` bool with timer reset on + packet arrival, Rx =========================================== ====== ======================= Attributes are only included in reply if their value is not zero or the @@ -977,6 +981,10 @@ Request contents: ``ETHTOOL_A_COALESCE_TX_USECS_HIGH`` u32 delay (us), high Tx ``ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH`` u32 max packets, high Tx ``ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL`` u32 rate sampling interval + ``ETHTOOL_A_COALESCE_USE_CQE_TX`` bool with timer reset on + packet arrival, Tx + ``ETHTOOL_A_COALESCE_USE_CQE_RX`` bool with timer reset on + packet arrival, Rx =========================================== ====== ======================= Request is rejected if it attributes declared as unsupported by driver (i.e. diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 4711b96..bad4c7a 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h @@ -211,7 +211,9 @@ bool ethtool_convert_link_mode_to_legacy_u32(u32 *legacy_u32, #define ETHTOOL_COALESCE_TX_USECS_HIGH BIT(19) #define ETHTOOL_COALESCE_TX_MAX_FRAMES_HIGH BIT(20) #define ETHTOOL_COALESCE_RATE_SAMPLE_INTERVAL BIT(21) -#define ETHTOOL_COALESCE_ALL_PARAMS GENMASK(21, 0) +#define ETHTOOL_COALESCE_USE_CQE_RX BIT(22) +#define ETHTOOL_COALESCE_USE_CQE_TX BIT(23) +#define ETHTOOL_COALESCE_ALL_PARAMS GENMASK(23, 0) #define ETHTOOL_COALESCE_USECS \ (ETHTOOL_COALESCE_RX_USECS | ETHTOOL_COALESCE_TX_USECS) @@ -237,6 +239,8 @@ bool ethtool_convert_link_mode_to_legacy_u32(u32 *legacy_u32, ETHTOOL_COALESCE_RX_USECS_LOW | ETHTOOL_COALESCE_RX_USECS_HIGH | \ ETHTOOL_COALESCE_PKT_RATE_LOW | ETHTOOL_COALESCE_PKT_RATE_HIGH | \ ETHTOOL_COALESCE_RATE_SAMPLE_INTERVAL) +#define ETHTOOL_COALESCE_USE_CQE \ + (ETHTOOL_COALESCE_USE_CQE_RX | ETHTOOL_COALESCE_USE_CQE_TX) #define ETHTOOL_STAT_NOT_SET (~0ULL) diff --git a/include/uapi/linux/ethtool_netlink.h b/include/uapi/linux/ethtool_netlink.h index b3b9371..5545f1c 100644 --- a/include/uapi/linux/ethtool_netlink.h +++ b/include/uapi/linux/ethtool_netlink.h @@ -377,6 +377,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,