[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87v9p93a2s.fsf@linux.intel.com>
Date: Fri, 17 Jan 2020 16:03:07 -0800
From: Vinicius Costa Gomes <vinicius.gomes@...el.com>
To: Po Liu <po.liu@....com>,
"davem\@davemloft.net" <davem@...emloft.net>,
"hauke.mehrtens\@intel.com" <hauke.mehrtens@...el.com>,
"gregkh\@linuxfoundation.org" <gregkh@...uxfoundation.org>,
"allison\@lohutok.net" <allison@...utok.net>,
"tglx\@linutronix.de" <tglx@...utronix.de>,
"hkallweit1\@gmail.com" <hkallweit1@...il.com>,
"saeedm\@mellanox.com" <saeedm@...lanox.com>,
"andrew\@lunn.ch" <andrew@...n.ch>,
"f.fainelli\@gmail.com" <f.fainelli@...il.com>,
"alexandru.ardelean\@analog.com" <alexandru.ardelean@...log.com>,
"jiri\@mellanox.com" <jiri@...lanox.com>,
"ayal\@mellanox.com" <ayal@...lanox.com>,
"pablo\@netfilter.org" <pablo@...filter.org>,
"linux-kernel\@vger.kernel.org" <linux-kernel@...r.kernel.org>,
"netdev\@vger.kernel.org" <netdev@...r.kernel.org>
Cc: "simon.horman\@netronome.com" <simon.horman@...ronome.com>,
Claudiu Manoil <claudiu.manoil@....com>,
Vladimir Oltean <vladimir.oltean@....com>,
Alexandru Marginean <alexandru.marginean@....com>,
Xiaoliang Yang <xiaoliang.yang_1@....com>,
Roy Zang <roy.zang@....com>, Mingkai Hu <mingkai.hu@....com>,
Jerry Huang <jerry.huang@....com>, Leo Li <leoyang.li@....com>,
Po Liu <po.liu@....com>
Subject: Re: [v1,net-next, 1/2] ethtool: add setting frame preemption of traffic classes
Hi,
Po Liu <po.liu@....com> writes:
> IEEE Std 802.1Qbu standard defined the frame preemption of port
> traffic classes. This patch introduce a method to set traffic
> classes preemption. Add a parameter 'preemption' in struct
> ethtool_link_settings. The value will be translated to a binary,
> each bit represent a traffic class. Bit "1" means preemptable
> traffic class. Bit "0" means express traffic class. MSB represent
> high number traffic class.
I think that we should keep the concept of 'traffic classes' outside of
ethtool. Ethtool should only care about queues (or similar concepts).
And unless I am missing something here, what you mean by 'traffic class'
here is really a hardware queue.
>
> If hardware support the frame preemption, driver could set the
> ethernet device with hw_features and features with NETIF_F_PREEMPTION
> when initializing the port driver.
>
> User can check the feature 'tx-preemption' by command 'ethtool -k
> devname'. If hareware set preemption feature. The property would
> be a fixed value 'on' if hardware support the frame preemption.
> Feature would show a fixed value 'off' if hardware don't support
> the frame preemption.
>
> Command 'ethtool devname' and 'ethtool -s devname preemption N'
> would show/set which traffic classes are frame preemptable.
>
> Port driver would implement the frame preemption in the function
> get_link_ksettings() and set_link_ksettings() in the struct ethtool_ops.
>
> Signed-off-by: Po Liu <Po.Liu@....com>
> ---
> include/linux/netdev_features.h | 5 ++++-
> include/uapi/linux/ethtool.h | 5 ++++-
> net/core/ethtool.c | 1 +
> 3 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h
> index 4b19c544c59a..299750a8b414 100644
> --- a/include/linux/netdev_features.h
> +++ b/include/linux/netdev_features.h
> @@ -80,6 +80,7 @@ enum {
>
> NETIF_F_GRO_HW_BIT, /* Hardware Generic receive offload */
> NETIF_F_HW_TLS_RECORD_BIT, /* Offload TLS record */
> + NETIF_F_HW_PREEMPTION_BIT, /* Hardware TC frame preemption */
>
> /*
> * Add your fresh new feature above and remember to update
> @@ -150,6 +151,7 @@ enum {
> #define NETIF_F_GSO_UDP_L4 __NETIF_F(GSO_UDP_L4)
> #define NETIF_F_HW_TLS_TX __NETIF_F(HW_TLS_TX)
> #define NETIF_F_HW_TLS_RX __NETIF_F(HW_TLS_RX)
> +#define NETIF_F_PREEMPTION __NETIF_F(HW_PREEMPTION)
>
> /* Finds the next feature with the highest number of the range of start till 0.
> */
> @@ -175,7 +177,8 @@ static inline int find_next_netdev_feature(u64 feature, unsigned long start)
> /* Features valid for ethtool to change */
> /* = all defined minus driver/device-class-related */
> #define NETIF_F_NEVER_CHANGE (NETIF_F_VLAN_CHALLENGED | \
> - NETIF_F_LLTX | NETIF_F_NETNS_LOCAL)
> + NETIF_F_LLTX | NETIF_F_NETNS_LOCAL | \
> + NETIF_F_PREEMPTION)
>
> /* remember that ((t)1 << t_BITS) is undefined in C99 */
> #define NETIF_F_ETHTOOL_BITS ((__NETIF_F_BIT(NETDEV_FEATURE_COUNT - 1) | \
> diff --git a/include/uapi/linux/ethtool.h b/include/uapi/linux/ethtool.h
> index d4591792f0b4..12ffb34afbfa 100644
> --- a/include/uapi/linux/ethtool.h
> +++ b/include/uapi/linux/ethtool.h
> @@ -1776,6 +1776,8 @@ enum ethtool_reset_flags {
> };
> #define ETH_RESET_SHARED_SHIFT 16
>
> +/* Disable preemtion. */
> +#define PREEMPTION_DISABLE 0x0
>
> /**
> * struct ethtool_link_settings - link control and status
> @@ -1886,7 +1888,8 @@ struct ethtool_link_settings {
> __s8 link_mode_masks_nwords;
> __u8 transceiver;
> __u8 reserved1[3];
> - __u32 reserved[7];
> + __u32 preemption;
> + __u32 reserved[6];
> __u32 link_mode_masks[0];
> /* layout of link_mode_masks fields:
> * __u32 map_supported[link_mode_masks_nwords];
> diff --git a/net/core/ethtool.c b/net/core/ethtool.c
> index cd9bc67381b2..6ffcd8a602b8 100644
> --- a/net/core/ethtool.c
> +++ b/net/core/ethtool.c
> @@ -111,6 +111,7 @@ static const char netdev_features_strings[NETDEV_FEATURE_COUNT][ETH_GSTRING_LEN]
> [NETIF_F_HW_TLS_RECORD_BIT] = "tls-hw-record",
> [NETIF_F_HW_TLS_TX_BIT] = "tls-hw-tx-offload",
> [NETIF_F_HW_TLS_RX_BIT] = "tls-hw-rx-offload",
> + [NETIF_F_HW_PREEMPTION_BIT] = "tx-preemption",
> };
>
> static const char
> --
> 2.17.1
Powered by blists - more mailing lists