You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
263 lines
8.6 KiB
263 lines
8.6 KiB
From c4bef68d1ee7d83b186a264f290c8fdbf47abdae Mon Sep 17 00:00:00 2001
|
|
From: Alaa Hleihel <ahleihel@redhat.com>
|
|
Date: Sun, 10 May 2020 14:52:04 -0400
|
|
Subject: [PATCH 038/312] [netdrv] net/mlx5e: Add tc flower tracepoints
|
|
|
|
Message-id: <20200510145245.10054-42-ahleihel@redhat.com>
|
|
Patchwork-id: 306582
|
|
Patchwork-instance: patchwork
|
|
O-Subject: [RHEL8.3 BZ 1789378 v2 41/82] net/mlx5e: Add tc flower tracepoints
|
|
Bugzilla: 1789378
|
|
RH-Acked-by: Kamal Heib <kheib@redhat.com>
|
|
RH-Acked-by: Jarod Wilson <jarod@redhat.com>
|
|
RH-Acked-by: Tony Camuso <tcamuso@redhat.com>
|
|
RH-Acked-by: Jonathan Toppins <jtoppins@redhat.com>
|
|
|
|
Bugzilla: http://bugzilla.redhat.com/1789378
|
|
Upstream: v5.4-rc1
|
|
Conflicts:
|
|
- Documentation/networking/device_drivers/mellanox/mlx5.rst
|
|
Drop changes to doc file that doesn't exist in RHEL-8 tree.
|
|
|
|
commit 7a978759b4e0e7a2ad3f10cbf9077915a85ec956
|
|
Author: Dmytro Linkin <dmitrolin@mellanox.com>
|
|
Date: Thu Jun 27 10:55:02 2019 +0000
|
|
|
|
net/mlx5e: Add tc flower tracepoints
|
|
|
|
Implemented following tracepoints:
|
|
1. Configure flower (mlx5e_configure_flower)
|
|
2. Delete flower (mlx5e_delete_flower)
|
|
3. Stats flower (mlx5e_stats_flower)
|
|
|
|
Usage example:
|
|
># cd /sys/kernel/debug/tracing
|
|
># echo mlx5:mlx5e_configure_flower >> set_event
|
|
># cat trace
|
|
...
|
|
tc-6535 [019] ...1 2672.404466: mlx5e_configure_flower: cookie=0000000067874a55 actions= REDIRECT
|
|
|
|
Added corresponding documentation in
|
|
Documentation/networking/device-driver/mellanox/mlx5.rst
|
|
|
|
Signed-off-by: Dmytro Linkin <dmitrolin@mellanox.com>
|
|
Reviewed-by: Vlad Buslov <vladbu@mellanox.com>
|
|
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
|
|
|
|
Signed-off-by: Alaa Hleihel <ahleihel@redhat.com>
|
|
Signed-off-by: Frantisek Hrbata <fhrbata@redhat.com>
|
|
---
|
|
drivers/net/ethernet/mellanox/mlx5/core/Makefile | 2 +-
|
|
.../mellanox/mlx5/core/diag/en_tc_tracepoint.c | 58 +++++++++++++++
|
|
.../mellanox/mlx5/core/diag/en_tc_tracepoint.h | 83 ++++++++++++++++++++++
|
|
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 4 ++
|
|
4 files changed, 146 insertions(+), 1 deletion(-)
|
|
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/diag/en_tc_tracepoint.c
|
|
create mode 100644 drivers/net/ethernet/mellanox/mlx5/core/diag/en_tc_tracepoint.h
|
|
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/Makefile b/drivers/net/ethernet/mellanox/mlx5/core/Makefile
|
|
index bd2074d5eb87..3ac94d97cc24 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/Makefile
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/Makefile
|
|
@@ -35,7 +35,7 @@ mlx5_core-$(CONFIG_MLX5_EN_RXNFC) += en_fs_ethtool.o
|
|
mlx5_core-$(CONFIG_MLX5_CORE_EN_DCB) += en_dcbnl.o en/port_buffer.o
|
|
mlx5_core-$(CONFIG_MLX5_ESWITCH) += en_rep.o en_tc.o en/tc_tun.o lib/port_tun.o lag_mp.o \
|
|
lib/geneve.o en/tc_tun_vxlan.o en/tc_tun_gre.o \
|
|
- en/tc_tun_geneve.o
|
|
+ en/tc_tun_geneve.o diag/en_tc_tracepoint.o
|
|
|
|
#
|
|
# Core extra
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/diag/en_tc_tracepoint.c b/drivers/net/ethernet/mellanox/mlx5/core/diag/en_tc_tracepoint.c
|
|
new file mode 100644
|
|
index 000000000000..c5dc6c50fa87
|
|
--- /dev/null
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/diag/en_tc_tracepoint.c
|
|
@@ -0,0 +1,58 @@
|
|
+// SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
|
|
+/* Copyright (c) 2019 Mellanox Technologies. */
|
|
+
|
|
+#define CREATE_TRACE_POINTS
|
|
+#include "en_tc_tracepoint.h"
|
|
+
|
|
+void put_ids_to_array(int *ids,
|
|
+ const struct flow_action_entry *entries,
|
|
+ unsigned int num)
|
|
+{
|
|
+ unsigned int i;
|
|
+
|
|
+ for (i = 0; i < num; i++)
|
|
+ ids[i] = entries[i].id;
|
|
+}
|
|
+
|
|
+#define NAME_SIZE 16
|
|
+
|
|
+static const char FLOWACT2STR[NUM_FLOW_ACTIONS][NAME_SIZE] = {
|
|
+ [FLOW_ACTION_ACCEPT] = "ACCEPT",
|
|
+ [FLOW_ACTION_DROP] = "DROP",
|
|
+ [FLOW_ACTION_TRAP] = "TRAP",
|
|
+ [FLOW_ACTION_GOTO] = "GOTO",
|
|
+ [FLOW_ACTION_REDIRECT] = "REDIRECT",
|
|
+ [FLOW_ACTION_MIRRED] = "MIRRED",
|
|
+ [FLOW_ACTION_VLAN_PUSH] = "VLAN_PUSH",
|
|
+ [FLOW_ACTION_VLAN_POP] = "VLAN_POP",
|
|
+ [FLOW_ACTION_VLAN_MANGLE] = "VLAN_MANGLE",
|
|
+ [FLOW_ACTION_TUNNEL_ENCAP] = "TUNNEL_ENCAP",
|
|
+ [FLOW_ACTION_TUNNEL_DECAP] = "TUNNEL_DECAP",
|
|
+ [FLOW_ACTION_MANGLE] = "MANGLE",
|
|
+ [FLOW_ACTION_ADD] = "ADD",
|
|
+ [FLOW_ACTION_CSUM] = "CSUM",
|
|
+ [FLOW_ACTION_MARK] = "MARK",
|
|
+ [FLOW_ACTION_WAKE] = "WAKE",
|
|
+ [FLOW_ACTION_QUEUE] = "QUEUE",
|
|
+ [FLOW_ACTION_SAMPLE] = "SAMPLE",
|
|
+ [FLOW_ACTION_POLICE] = "POLICE",
|
|
+ [FLOW_ACTION_CT] = "CT",
|
|
+};
|
|
+
|
|
+const char *parse_action(struct trace_seq *p,
|
|
+ int *ids,
|
|
+ unsigned int num)
|
|
+{
|
|
+ const char *ret = trace_seq_buffer_ptr(p);
|
|
+ unsigned int i;
|
|
+
|
|
+ for (i = 0; i < num; i++) {
|
|
+ if (ids[i] < NUM_FLOW_ACTIONS)
|
|
+ trace_seq_printf(p, "%s ", FLOWACT2STR[ids[i]]);
|
|
+ else
|
|
+ trace_seq_printf(p, "UNKNOWN ");
|
|
+ }
|
|
+
|
|
+ trace_seq_putc(p, 0);
|
|
+ return ret;
|
|
+}
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/diag/en_tc_tracepoint.h b/drivers/net/ethernet/mellanox/mlx5/core/diag/en_tc_tracepoint.h
|
|
new file mode 100644
|
|
index 000000000000..a362100fe6d3
|
|
--- /dev/null
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/diag/en_tc_tracepoint.h
|
|
@@ -0,0 +1,83 @@
|
|
+/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
|
|
+/* Copyright (c) 2019 Mellanox Technologies. */
|
|
+
|
|
+#undef TRACE_SYSTEM
|
|
+#define TRACE_SYSTEM mlx5
|
|
+
|
|
+#if !defined(_MLX5_TC_TP_) || defined(TRACE_HEADER_MULTI_READ)
|
|
+#define _MLX5_TC_TP_
|
|
+
|
|
+#include <linux/tracepoint.h>
|
|
+#include <linux/trace_seq.h>
|
|
+#include <net/flow_offload.h>
|
|
+
|
|
+#define __parse_action(ids, num) parse_action(p, ids, num)
|
|
+
|
|
+void put_ids_to_array(int *ids,
|
|
+ const struct flow_action_entry *entries,
|
|
+ unsigned int num);
|
|
+
|
|
+const char *parse_action(struct trace_seq *p,
|
|
+ int *ids,
|
|
+ unsigned int num);
|
|
+
|
|
+DECLARE_EVENT_CLASS(mlx5e_flower_template,
|
|
+ TP_PROTO(const struct flow_cls_offload *f),
|
|
+ TP_ARGS(f),
|
|
+ TP_STRUCT__entry(__field(void *, cookie)
|
|
+ __field(unsigned int, num)
|
|
+ __dynamic_array(int, ids, f->rule ?
|
|
+ f->rule->action.num_entries : 0)
|
|
+ ),
|
|
+ TP_fast_assign(__entry->cookie = (void *)f->cookie;
|
|
+ __entry->num = (f->rule ?
|
|
+ f->rule->action.num_entries : 0);
|
|
+ if (__entry->num)
|
|
+ put_ids_to_array(__get_dynamic_array(ids),
|
|
+ f->rule->action.entries,
|
|
+ f->rule->action.num_entries);
|
|
+ ),
|
|
+ TP_printk("cookie=%p actions= %s\n",
|
|
+ __entry->cookie, __entry->num ?
|
|
+ __parse_action(__get_dynamic_array(ids),
|
|
+ __entry->num) : "NULL"
|
|
+ )
|
|
+);
|
|
+
|
|
+DEFINE_EVENT(mlx5e_flower_template, mlx5e_configure_flower,
|
|
+ TP_PROTO(const struct flow_cls_offload *f),
|
|
+ TP_ARGS(f)
|
|
+ );
|
|
+
|
|
+DEFINE_EVENT(mlx5e_flower_template, mlx5e_delete_flower,
|
|
+ TP_PROTO(const struct flow_cls_offload *f),
|
|
+ TP_ARGS(f)
|
|
+ );
|
|
+
|
|
+TRACE_EVENT(mlx5e_stats_flower,
|
|
+ TP_PROTO(const struct flow_cls_offload *f),
|
|
+ TP_ARGS(f),
|
|
+ TP_STRUCT__entry(__field(void *, cookie)
|
|
+ __field(u64, bytes)
|
|
+ __field(u64, packets)
|
|
+ __field(u64, lastused)
|
|
+ ),
|
|
+ TP_fast_assign(__entry->cookie = (void *)f->cookie;
|
|
+ __entry->bytes = f->stats.bytes;
|
|
+ __entry->packets = f->stats.pkts;
|
|
+ __entry->lastused = f->stats.lastused;
|
|
+ ),
|
|
+ TP_printk("cookie=%p bytes=%llu packets=%llu lastused=%llu\n",
|
|
+ __entry->cookie, __entry->bytes,
|
|
+ __entry->packets, __entry->lastused
|
|
+ )
|
|
+);
|
|
+
|
|
+#endif /* _MLX5_TC_TP_ */
|
|
+
|
|
+/* This part must be outside protection */
|
|
+#undef TRACE_INCLUDE_PATH
|
|
+#define TRACE_INCLUDE_PATH ./diag
|
|
+#undef TRACE_INCLUDE_FILE
|
|
+#define TRACE_INCLUDE_FILE en_tc_tracepoint
|
|
+#include <trace/define_trace.h>
|
|
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
|
|
index d7d2151d1ef3..8d0cf434d16c 100644
|
|
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
|
|
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
|
|
@@ -56,6 +56,7 @@
|
|
#include "en/tc_tun.h"
|
|
#include "lib/devcom.h"
|
|
#include "lib/geneve.h"
|
|
+#include "diag/en_tc_tracepoint.h"
|
|
|
|
struct mlx5_nic_flow_attr {
|
|
u32 action;
|
|
@@ -3810,6 +3811,7 @@ int mlx5e_configure_flower(struct net_device *dev, struct mlx5e_priv *priv,
|
|
goto out;
|
|
}
|
|
|
|
+ trace_mlx5e_configure_flower(f);
|
|
err = mlx5e_tc_add_flow(priv, f, flags, dev, &flow);
|
|
if (err)
|
|
goto out;
|
|
@@ -3859,6 +3861,7 @@ int mlx5e_delete_flower(struct net_device *dev, struct mlx5e_priv *priv,
|
|
rhashtable_remove_fast(tc_ht, &flow->node, tc_ht_params);
|
|
rcu_read_unlock();
|
|
|
|
+ trace_mlx5e_delete_flower(f);
|
|
mlx5e_flow_put(priv, flow);
|
|
|
|
return 0;
|
|
@@ -3928,6 +3931,7 @@ int mlx5e_stats_flower(struct net_device *dev, struct mlx5e_priv *priv,
|
|
mlx5_devcom_release_peer_data(devcom, MLX5_DEVCOM_ESW_OFFLOADS);
|
|
out:
|
|
flow_stats_update(&f->stats, bytes, packets, lastuse);
|
|
+ trace_mlx5e_stats_flower(f);
|
|
errout:
|
|
mlx5e_flow_put(priv, flow);
|
|
return err;
|
|
--
|
|
2.13.6
|
|
|