All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch iproute2/net-next v5] tc: m_action: introduce support for hw stats type
@ 2020-03-14  9:25 Jiri Pirko
  2020-03-19 23:56 ` David Ahern
  2020-03-20 16:34 ` David Ahern
  0 siblings, 2 replies; 8+ messages in thread
From: Jiri Pirko @ 2020-03-14  9:25 UTC (permalink / raw)
  To: netdev; +Cc: dsahern, stephen, mlxsw

From: Jiri Pirko <jiri@mellanox.com>

Introduce support for per-action hw stats type config.

This patch allows user to specify one of the following types of HW
stats for added action:
immediate - queried during dump time
delayed - polled from HW periodically or sent by HW in async manner
disabled - no stats needed

Note that if "hw_stats" option is not passed, user does not care about
the type, just expects any type of stats.

Examples:
$ tc filter add dev enp0s16np28 ingress proto ip handle 1 pref 1 flower skip_sw dst_ip 192.168.1.1 action drop hw_stats disabled
$ tc -s filter show dev enp0s16np28 ingress
filter protocol ip pref 1 flower chain 0
filter protocol ip pref 1 flower chain 0 handle 0x1
  eth_type ipv4
  dst_ip 192.168.1.1
  skip_sw
  in_hw in_hw_count 2
        action order 1: gact action drop
         random type none pass val 0
         index 1 ref 1 bind 1 installed 7 sec used 2 sec
        Action statistics:
        Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
        backlog 0b 0p requeues 0
        hw_stats disabled

$ tc filter add dev enp0s16np28 ingress proto ip handle 1 pref 1 flower skip_sw dst_ip 192.168.1.1 action drop hw_stats immediate
$ tc -s filter show dev enp0s16np28 ingress
filter protocol ip pref 1 flower chain 0
filter protocol ip pref 1 flower chain 0 handle 0x1
  eth_type ipv4
  dst_ip 192.168.1.1
  skip_sw
  in_hw in_hw_count 2
        action order 1: gact action drop
         random type none pass val 0
         index 1 ref 1 bind 1 installed 11 sec used 4 sec
        Action statistics:
        Sent 102 bytes 1 pkt (dropped 1, overlimits 0 requeues 0)
        Sent software 0 bytes 0 pkt
        Sent hardware 102 bytes 1 pkt
        backlog 0b 0p requeues 0
        hw_stats immediate

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
v4->v5:
- s/hwstats/hw_stats/ in help message
v3->v4:
- added to "tc actions help" output
v2->v3:
- adjusted hw_stats_type_bf struct initialization
- added comment to "disable"
v1->v2:
- added more description and examples
---
 include/uapi/linux/pkt_cls.h | 22 ++++++++++++
 man/man8/tc-actions.8        | 31 +++++++++++++++++
 tc/m_action.c                | 66 +++++++++++++++++++++++++++++++++++-
 3 files changed, 118 insertions(+), 1 deletion(-)

diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h
index 449a63971451..81cc1a869588 100644
--- a/include/uapi/linux/pkt_cls.h
+++ b/include/uapi/linux/pkt_cls.h
@@ -17,6 +17,7 @@ enum {
 	TCA_ACT_PAD,
 	TCA_ACT_COOKIE,
 	TCA_ACT_FLAGS,
+	TCA_ACT_HW_STATS_TYPE,
 	__TCA_ACT_MAX
 };
 
@@ -24,6 +25,27 @@ enum {
 					 * actions stats.
 					 */
 
+/* tca HW stats type
+ * When user does not pass the attribute, he does not care.
+ * It is the same as if he would pass the attribute with
+ * all supported bits set.
+ * In case no bits are set, user is not interested in getting any HW statistics.
+ */
+#define TCA_ACT_HW_STATS_TYPE_IMMEDIATE (1 << 0) /* Means that in dump, user
+						  * gets the current HW stats
+						  * state from the device
+						  * queried at the dump time.
+						  */
+#define TCA_ACT_HW_STATS_TYPE_DELAYED (1 << 1) /* Means that in dump, user gets
+						* HW stats that might be out
+						* of date for some time, maybe
+						* couple of seconds. This is
+						* the case when driver polls
+						* stats updates periodically
+						* or when it gets async stats update
+						* from the device.
+						*/
+
 #define TCA_ACT_MAX __TCA_ACT_MAX
 #define TCA_OLD_COMPAT (TCA_ACT_MAX+1)
 #define TCA_ACT_MAX_PRIO 32
diff --git a/man/man8/tc-actions.8 b/man/man8/tc-actions.8
index bee59f7247fa..7d7df00013c6 100644
--- a/man/man8/tc-actions.8
+++ b/man/man8/tc-actions.8
@@ -49,6 +49,8 @@ actions \- independently defined actions in tc
 ] [
 .I FLAGS
 ] [
+.I HWSTATSSPEC
+] [
 .I CONTROL
 ]
 
@@ -77,6 +79,12 @@ ACTNAME
 :=
 .I no_percpu
 
+.I HWSTATSSPEC
+:=
+.BR hw_stats " {"
+.IR immediate " | " delayed " | " disabled
+.R }
+
 .I ACTDETAIL
 :=
 .I ACTNAME ACTPARAMS
@@ -200,6 +208,29 @@ which indicates that action is expected to have minimal software data-path
 traffic and doesn't need to allocate stat counters with percpu allocator.
 This option is intended to be used by hardware-offloaded actions.
 
+.TP
+.BI hw_stats " HW_STATS"
+Speficies the type of HW stats of new action. If omitted, any stats counter type
+is going to be used, according to driver and its resources.
+The
+.I HW_STATS
+indicates the type. Any of the following are valid:
+.RS
+.TP
+.B immediate
+Means that in dump, user gets the current HW stats state from the device
+queried at the dump time.
+.TP
+.B delayed
+Means that in dump, user gets HW stats that might be out of date for
+some time, maybe couple of seconds. This is the case when driver polls
+stats updates periodically or when it gets async stats update
+from the device.
+.TP
+.B disabled
+No HW stats are going to be available in dump.
+.RE
+
 .TP
 .BI since " MSTIME"
 When dumping large number of actions, a millisecond time-filter can be
diff --git a/tc/m_action.c b/tc/m_action.c
index 4da810c8c0aa..58ae1846033b 100644
--- a/tc/m_action.c
+++ b/tc/m_action.c
@@ -51,8 +51,9 @@ static void act_usage(void)
 		"	FL := ls | list | flush | <ACTNAMESPEC>\n"
 		"	ACTNAMESPEC :=  action <ACTNAME>\n"
 		"	ACTISPEC := <ACTNAMESPEC> <INDEXSPEC>\n"
-		"	ACTSPEC := action <ACTDETAIL> [INDEXSPEC]\n"
+		"	ACTSPEC := action <ACTDETAIL> [INDEXSPEC] [HWSTATSSPEC]\n"
 		"	INDEXSPEC := index <32 bit indexvalue>\n"
+		"	HWSTATSSPEC := hw_stats [ immediate | delayed | disabled ]\n"
 		"	ACTDETAIL := <ACTNAME> <ACTPARAMS>\n"
 		"		Example ACTNAME is gact, mirred, bpf, etc\n"
 		"		Each action has its own parameters (ACTPARAMS)\n"
@@ -149,6 +150,59 @@ new_cmd(char **argv)
 		(matches(*argv, "add") == 0);
 }
 
+static const struct hw_stats_type_item {
+	const char *str;
+	__u8 type;
+} hw_stats_type_items[] = {
+	{ "immediate", TCA_ACT_HW_STATS_TYPE_IMMEDIATE },
+	{ "delayed", TCA_ACT_HW_STATS_TYPE_DELAYED },
+	{ "disabled", 0 }, /* no bit set */
+};
+
+static void print_hw_stats(const struct rtattr *arg)
+{
+	struct nla_bitfield32 *hw_stats_type_bf = RTA_DATA(arg);
+	__u8 hw_stats_type;
+	int i;
+
+	hw_stats_type = hw_stats_type_bf->value & hw_stats_type_bf->selector;
+	print_string(PRINT_FP, NULL, "\t", NULL);
+	open_json_array(PRINT_ANY, "hw_stats");
+
+	for (i = 0; i < ARRAY_SIZE(hw_stats_type_items); i++) {
+		const struct hw_stats_type_item *item;
+
+		item = &hw_stats_type_items[i];
+		if ((!hw_stats_type && !item->type) ||
+		    hw_stats_type & item->type)
+			print_string(PRINT_ANY, NULL, " %s", item->str);
+	}
+	close_json_array(PRINT_JSON, NULL);
+}
+
+static int parse_hw_stats(const char *str, struct nlmsghdr *n)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(hw_stats_type_items); i++) {
+		const struct hw_stats_type_item *item;
+
+		item = &hw_stats_type_items[i];
+		if (matches(str, item->str) == 0) {
+			struct nla_bitfield32 hw_stats_type_bf = {
+				.value = item->type,
+				.selector = item->type
+			};
+
+			addattr_l(n, MAX_MSG, TCA_ACT_HW_STATS_TYPE,
+				  &hw_stats_type_bf, sizeof(hw_stats_type_bf));
+			return 0;
+		}
+
+	}
+	return -1;
+}
+
 int parse_action(int *argc_p, char ***argv_p, int tca_id, struct nlmsghdr *n)
 {
 	int argc = *argc_p;
@@ -250,6 +304,14 @@ done0:
 				addattr_l(n, MAX_MSG, TCA_ACT_COOKIE,
 					  &act_ck, act_ck_len);
 
+			if (*argv && matches(*argv, "hw_stats") == 0) {
+				NEXT_ARG();
+				ret = parse_hw_stats(*argv, n);
+				if (ret < 0)
+					invarg("value is invalid\n", *argv);
+				NEXT_ARG_FWD();
+			}
+
 			if (*argv && strcmp(*argv, "no_percpu") == 0) {
 				struct nla_bitfield32 flags =
 					{ TCA_ACT_FLAGS_NO_PERCPU_STATS,
@@ -337,6 +399,8 @@ static int tc_print_one_action(FILE *f, struct rtattr *arg)
 				   TCA_ACT_FLAGS_NO_PERCPU_STATS);
 		print_string(PRINT_FP, NULL, "%s", _SL_);
 	}
+	if (tb[TCA_ACT_HW_STATS_TYPE])
+		print_hw_stats(tb[TCA_ACT_HW_STATS_TYPE]);
 
 	return 0;
 }
-- 
2.21.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [patch iproute2/net-next v5] tc: m_action: introduce support for hw stats type
  2020-03-14  9:25 [patch iproute2/net-next v5] tc: m_action: introduce support for hw stats type Jiri Pirko
@ 2020-03-19 23:56 ` David Ahern
  2020-03-20  9:59   ` Jiri Pirko
  2020-03-20 16:34 ` David Ahern
  1 sibling, 1 reply; 8+ messages in thread
From: David Ahern @ 2020-03-19 23:56 UTC (permalink / raw)
  To: Jiri Pirko, netdev; +Cc: stephen, mlxsw

On 3/14/20 3:25 AM, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@mellanox.com>
> 
> Introduce support for per-action hw stats type config.
> 
> This patch allows user to specify one of the following types of HW
> stats for added action:
> immediate - queried during dump time
> delayed - polled from HW periodically or sent by HW in async manner
> disabled - no stats needed
> 
> Note that if "hw_stats" option is not passed, user does not care about
> the type, just expects any type of stats.
> 
> Examples:
> $ tc filter add dev enp0s16np28 ingress proto ip handle 1 pref 1 flower skip_sw dst_ip 192.168.1.1 action drop hw_stats disabled

...

> @@ -149,6 +150,59 @@ new_cmd(char **argv)
>  		(matches(*argv, "add") == 0);
>  }
>  
> +static const struct hw_stats_type_item {
> +	const char *str;
> +	__u8 type;
> +} hw_stats_type_items[] = {
> +	{ "immediate", TCA_ACT_HW_STATS_TYPE_IMMEDIATE },
> +	{ "delayed", TCA_ACT_HW_STATS_TYPE_DELAYED },
> +	{ "disabled", 0 }, /* no bit set */
> +};
> +
> +static void print_hw_stats(const struct rtattr *arg)
> +{
> +	struct nla_bitfield32 *hw_stats_type_bf = RTA_DATA(arg);
> +	__u8 hw_stats_type;
> +	int i;
> +
> +	hw_stats_type = hw_stats_type_bf->value & hw_stats_type_bf->selector;
> +	print_string(PRINT_FP, NULL, "\t", NULL);
> +	open_json_array(PRINT_ANY, "hw_stats");

I still do not understand how the type can be multiple. The command line
is an 'or' : immediate, delayed, or disabled. Further, the filter is
added to a specific device which has a single driver. Seems like at
install / config time the user is explicitly stating a single type.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch iproute2/net-next v5] tc: m_action: introduce support for hw stats type
  2020-03-19 23:56 ` David Ahern
@ 2020-03-20  9:59   ` Jiri Pirko
  0 siblings, 0 replies; 8+ messages in thread
From: Jiri Pirko @ 2020-03-20  9:59 UTC (permalink / raw)
  To: David Ahern; +Cc: netdev, stephen, mlxsw

Fri, Mar 20, 2020 at 12:56:08AM CET, dsahern@gmail.com wrote:
>On 3/14/20 3:25 AM, Jiri Pirko wrote:
>> From: Jiri Pirko <jiri@mellanox.com>
>> 
>> Introduce support for per-action hw stats type config.
>> 
>> This patch allows user to specify one of the following types of HW
>> stats for added action:
>> immediate - queried during dump time
>> delayed - polled from HW periodically or sent by HW in async manner
>> disabled - no stats needed
>> 
>> Note that if "hw_stats" option is not passed, user does not care about
>> the type, just expects any type of stats.
>> 
>> Examples:
>> $ tc filter add dev enp0s16np28 ingress proto ip handle 1 pref 1 flower skip_sw dst_ip 192.168.1.1 action drop hw_stats disabled
>
>...
>
>> @@ -149,6 +150,59 @@ new_cmd(char **argv)
>>  		(matches(*argv, "add") == 0);
>>  }
>>  
>> +static const struct hw_stats_type_item {
>> +	const char *str;
>> +	__u8 type;
>> +} hw_stats_type_items[] = {
>> +	{ "immediate", TCA_ACT_HW_STATS_TYPE_IMMEDIATE },
>> +	{ "delayed", TCA_ACT_HW_STATS_TYPE_DELAYED },
>> +	{ "disabled", 0 }, /* no bit set */
>> +};
>> +
>> +static void print_hw_stats(const struct rtattr *arg)
>> +{
>> +	struct nla_bitfield32 *hw_stats_type_bf = RTA_DATA(arg);
>> +	__u8 hw_stats_type;
>> +	int i;
>> +
>> +	hw_stats_type = hw_stats_type_bf->value & hw_stats_type_bf->selector;
>> +	print_string(PRINT_FP, NULL, "\t", NULL);
>> +	open_json_array(PRINT_ANY, "hw_stats");
>
>I still do not understand how the type can be multiple. The command line
>is an 'or' : immediate, delayed, or disabled. Further, the filter is

The cmd line is "or". The uapi is bitfield as requested by kernel
reviewers. I originally had that as "or" too.


>added to a specific device which has a single driver. Seems like at

Nope, may be multiple drivers if the block is shared.


>install / config time the user is explicitly stating a single type.


Basically using tc with this patch, you cannot achieve to have multiple
values in this output. However, in general. It could be.

Also, I wanted to have this as array because when I introduce the "used
hw stats" which would indicate which type is actually used (in case you
pass any for example), there might be multiple values, when offloaded to
multiple drivers.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch iproute2/net-next v5] tc: m_action: introduce support for hw stats type
  2020-03-14  9:25 [patch iproute2/net-next v5] tc: m_action: introduce support for hw stats type Jiri Pirko
  2020-03-19 23:56 ` David Ahern
@ 2020-03-20 16:34 ` David Ahern
  2020-03-20 20:08   ` Jakub Kicinski
  1 sibling, 1 reply; 8+ messages in thread
From: David Ahern @ 2020-03-20 16:34 UTC (permalink / raw)
  To: Jiri Pirko, netdev; +Cc: stephen, mlxsw

On 3/14/20 3:25 AM, Jiri Pirko wrote:
> @@ -200,6 +208,29 @@ which indicates that action is expected to have minimal software data-path
>  traffic and doesn't need to allocate stat counters with percpu allocator.
>  This option is intended to be used by hardware-offloaded actions.
>  
> +.TP
> +.BI hw_stats " HW_STATS"
> +Speficies the type of HW stats of new action. If omitted, any stats counter type

Fixed the spelling and applied to iproute2-next.




^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch iproute2/net-next v5] tc: m_action: introduce support for hw stats type
  2020-03-20 16:34 ` David Ahern
@ 2020-03-20 20:08   ` Jakub Kicinski
  2020-03-20 20:12     ` David Ahern
  0 siblings, 1 reply; 8+ messages in thread
From: Jakub Kicinski @ 2020-03-20 20:08 UTC (permalink / raw)
  To: David Ahern; +Cc: Jiri Pirko, netdev, stephen, mlxsw

On Fri, 20 Mar 2020 10:34:04 -0600 David Ahern wrote:
> On 3/14/20 3:25 AM, Jiri Pirko wrote:
> > @@ -200,6 +208,29 @@ which indicates that action is expected to have minimal software data-path
> >  traffic and doesn't need to allocate stat counters with percpu allocator.
> >  This option is intended to be used by hardware-offloaded actions.
> >  
> > +.TP
> > +.BI hw_stats " HW_STATS"
> > +Speficies the type of HW stats of new action. If omitted, any stats counter type  
> 
> Fixed the spelling and applied to iproute2-next.

Just a heads up that the kernel uAPI is getting slightly renamed, you'll
need to do a s/HW_STATS_TYPE/HW_STATS/ the rename lands. Do you want me
to send a patch for that?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch iproute2/net-next v5] tc: m_action: introduce support for hw stats type
  2020-03-20 20:08   ` Jakub Kicinski
@ 2020-03-20 20:12     ` David Ahern
  2020-03-20 20:21       ` [PATCH iproute2-next] tc: m_action: rename hw stats type uAPI Jakub Kicinski
  0 siblings, 1 reply; 8+ messages in thread
From: David Ahern @ 2020-03-20 20:12 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: Jiri Pirko, netdev, stephen, mlxsw

On 3/20/20 2:08 PM, Jakub Kicinski wrote:
> On Fri, 20 Mar 2020 10:34:04 -0600 David Ahern wrote:
>> On 3/14/20 3:25 AM, Jiri Pirko wrote:
>>> @@ -200,6 +208,29 @@ which indicates that action is expected to have minimal software data-path
>>>  traffic and doesn't need to allocate stat counters with percpu allocator.
>>>  This option is intended to be used by hardware-offloaded actions.
>>>  
>>> +.TP
>>> +.BI hw_stats " HW_STATS"
>>> +Speficies the type of HW stats of new action. If omitted, any stats counter type  
>>
>> Fixed the spelling and applied to iproute2-next.
> 
> Just a heads up that the kernel uAPI is getting slightly renamed, you'll
> need to do a s/HW_STATS_TYPE/HW_STATS/ the rename lands. Do you want me
> to send a patch for that?
> 

sure

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH iproute2-next] tc: m_action: rename hw stats type uAPI
  2020-03-20 20:12     ` David Ahern
@ 2020-03-20 20:21       ` Jakub Kicinski
  2020-03-25 16:43         ` David Ahern
  0 siblings, 1 reply; 8+ messages in thread
From: Jakub Kicinski @ 2020-03-20 20:21 UTC (permalink / raw)
  To: dsahern; +Cc: netdev, stephen, jiri, Jakub Kicinski

Follow the kernel rename to shorten the identifiers.
Rename hw_stats_type to hw_stats.

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
 tc/m_action.c | 39 +++++++++++++++++++--------------------
 1 file changed, 19 insertions(+), 20 deletions(-)

diff --git a/tc/m_action.c b/tc/m_action.c
index 58ae1846033b..2c4b5df6e05c 100644
--- a/tc/m_action.c
+++ b/tc/m_action.c
@@ -150,31 +150,30 @@ new_cmd(char **argv)
 		(matches(*argv, "add") == 0);
 }
 
-static const struct hw_stats_type_item {
+static const struct hw_stats_item {
 	const char *str;
 	__u8 type;
-} hw_stats_type_items[] = {
-	{ "immediate", TCA_ACT_HW_STATS_TYPE_IMMEDIATE },
-	{ "delayed", TCA_ACT_HW_STATS_TYPE_DELAYED },
+} hw_stats_items[] = {
+	{ "immediate", TCA_ACT_HW_STATS_IMMEDIATE },
+	{ "delayed", TCA_ACT_HW_STATS_DELAYED },
 	{ "disabled", 0 }, /* no bit set */
 };
 
 static void print_hw_stats(const struct rtattr *arg)
 {
-	struct nla_bitfield32 *hw_stats_type_bf = RTA_DATA(arg);
-	__u8 hw_stats_type;
+	struct nla_bitfield32 *hw_stats_bf = RTA_DATA(arg);
+	__u8 hw_stats;
 	int i;
 
-	hw_stats_type = hw_stats_type_bf->value & hw_stats_type_bf->selector;
+	hw_stats = hw_stats_bf->value & hw_stats_bf->selector;
 	print_string(PRINT_FP, NULL, "\t", NULL);
 	open_json_array(PRINT_ANY, "hw_stats");
 
-	for (i = 0; i < ARRAY_SIZE(hw_stats_type_items); i++) {
-		const struct hw_stats_type_item *item;
+	for (i = 0; i < ARRAY_SIZE(hw_stats_items); i++) {
+		const struct hw_stats_item *item;
 
-		item = &hw_stats_type_items[i];
-		if ((!hw_stats_type && !item->type) ||
-		    hw_stats_type & item->type)
+		item = &hw_stats_items[i];
+		if ((!hw_stats && !item->type) || hw_stats & item->type)
 			print_string(PRINT_ANY, NULL, " %s", item->str);
 	}
 	close_json_array(PRINT_JSON, NULL);
@@ -184,18 +183,18 @@ static int parse_hw_stats(const char *str, struct nlmsghdr *n)
 {
 	int i;
 
-	for (i = 0; i < ARRAY_SIZE(hw_stats_type_items); i++) {
-		const struct hw_stats_type_item *item;
+	for (i = 0; i < ARRAY_SIZE(hw_stats_items); i++) {
+		const struct hw_stats_item *item;
 
-		item = &hw_stats_type_items[i];
+		item = &hw_stats_items[i];
 		if (matches(str, item->str) == 0) {
-			struct nla_bitfield32 hw_stats_type_bf = {
+			struct nla_bitfield32 hw_stats_bf = {
 				.value = item->type,
 				.selector = item->type
 			};
 
-			addattr_l(n, MAX_MSG, TCA_ACT_HW_STATS_TYPE,
-				  &hw_stats_type_bf, sizeof(hw_stats_type_bf));
+			addattr_l(n, MAX_MSG, TCA_ACT_HW_STATS,
+				  &hw_stats_bf, sizeof(hw_stats_bf));
 			return 0;
 		}
 
@@ -399,8 +398,8 @@ static int tc_print_one_action(FILE *f, struct rtattr *arg)
 				   TCA_ACT_FLAGS_NO_PERCPU_STATS);
 		print_string(PRINT_FP, NULL, "%s", _SL_);
 	}
-	if (tb[TCA_ACT_HW_STATS_TYPE])
-		print_hw_stats(tb[TCA_ACT_HW_STATS_TYPE]);
+	if (tb[TCA_ACT_HW_STATS])
+		print_hw_stats(tb[TCA_ACT_HW_STATS]);
 
 	return 0;
 }
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH iproute2-next] tc: m_action: rename hw stats type uAPI
  2020-03-20 20:21       ` [PATCH iproute2-next] tc: m_action: rename hw stats type uAPI Jakub Kicinski
@ 2020-03-25 16:43         ` David Ahern
  0 siblings, 0 replies; 8+ messages in thread
From: David Ahern @ 2020-03-25 16:43 UTC (permalink / raw)
  To: Jakub Kicinski; +Cc: netdev, stephen, jiri

On 3/20/20 2:21 PM, Jakub Kicinski wrote:
> Follow the kernel rename to shorten the identifiers.
> Rename hw_stats_type to hw_stats.
> 
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
>  tc/m_action.c | 39 +++++++++++++++++++--------------------
>  1 file changed, 19 insertions(+), 20 deletions(-)
> 

applied to iproute2-next. Thanks



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-03-25 16:43 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-14  9:25 [patch iproute2/net-next v5] tc: m_action: introduce support for hw stats type Jiri Pirko
2020-03-19 23:56 ` David Ahern
2020-03-20  9:59   ` Jiri Pirko
2020-03-20 16:34 ` David Ahern
2020-03-20 20:08   ` Jakub Kicinski
2020-03-20 20:12     ` David Ahern
2020-03-20 20:21       ` [PATCH iproute2-next] tc: m_action: rename hw stats type uAPI Jakub Kicinski
2020-03-25 16:43         ` David Ahern

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.