19724fd5dSVlad Buslov /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
29724fd5dSVlad Buslov /* Copyright (c) 2021 Mellanox Technologies. */
39724fd5dSVlad Buslov 
49724fd5dSVlad Buslov #undef TRACE_SYSTEM
59724fd5dSVlad Buslov #define TRACE_SYSTEM mlx5
69724fd5dSVlad Buslov 
79724fd5dSVlad Buslov #if !defined(_MLX5_ESW_BRIDGE_TRACEPOINT_) || defined(TRACE_HEADER_MULTI_READ)
89724fd5dSVlad Buslov #define _MLX5_ESW_BRIDGE_TRACEPOINT_
99724fd5dSVlad Buslov 
109724fd5dSVlad Buslov #include <linux/tracepoint.h>
119724fd5dSVlad Buslov #include "../bridge_priv.h"
129724fd5dSVlad Buslov 
139724fd5dSVlad Buslov DECLARE_EVENT_CLASS(mlx5_esw_bridge_fdb_template,
149724fd5dSVlad Buslov 		    TP_PROTO(const struct mlx5_esw_bridge_fdb_entry *fdb),
159724fd5dSVlad Buslov 		    TP_ARGS(fdb),
169724fd5dSVlad Buslov 		    TP_STRUCT__entry(
179724fd5dSVlad Buslov 			    __array(char, dev_name, IFNAMSIZ)
189724fd5dSVlad Buslov 			    __array(unsigned char, addr, ETH_ALEN)
199724fd5dSVlad Buslov 			    __field(u16, vid)
209724fd5dSVlad Buslov 			    __field(u16, flags)
219724fd5dSVlad Buslov 			    __field(unsigned int, used)
229724fd5dSVlad Buslov 			    ),
239724fd5dSVlad Buslov 		    TP_fast_assign(
24*350d9a82SVlad Buslov 			    strscpy(__entry->dev_name,
259724fd5dSVlad Buslov 				    netdev_name(fdb->dev),
269724fd5dSVlad Buslov 				    IFNAMSIZ);
279724fd5dSVlad Buslov 			    memcpy(__entry->addr, fdb->key.addr, ETH_ALEN);
289724fd5dSVlad Buslov 			    __entry->vid = fdb->key.vid;
299724fd5dSVlad Buslov 			    __entry->flags = fdb->flags;
309724fd5dSVlad Buslov 			    __entry->used = jiffies_to_msecs(jiffies - fdb->lastuse)
319724fd5dSVlad Buslov 			    ),
329724fd5dSVlad Buslov 		    TP_printk("net_device=%s addr=%pM vid=%hu flags=%hx used=%u",
339724fd5dSVlad Buslov 			      __entry->dev_name,
349724fd5dSVlad Buslov 			      __entry->addr,
359724fd5dSVlad Buslov 			      __entry->vid,
369724fd5dSVlad Buslov 			      __entry->flags,
379724fd5dSVlad Buslov 			      __entry->used / 1000)
389724fd5dSVlad Buslov 	);
399724fd5dSVlad Buslov 
409724fd5dSVlad Buslov DEFINE_EVENT(mlx5_esw_bridge_fdb_template,
419724fd5dSVlad Buslov 	     mlx5_esw_bridge_fdb_entry_init,
429724fd5dSVlad Buslov 	     TP_PROTO(const struct mlx5_esw_bridge_fdb_entry *fdb),
439724fd5dSVlad Buslov 	     TP_ARGS(fdb)
449724fd5dSVlad Buslov 	);
459724fd5dSVlad Buslov DEFINE_EVENT(mlx5_esw_bridge_fdb_template,
469724fd5dSVlad Buslov 	     mlx5_esw_bridge_fdb_entry_refresh,
479724fd5dSVlad Buslov 	     TP_PROTO(const struct mlx5_esw_bridge_fdb_entry *fdb),
489724fd5dSVlad Buslov 	     TP_ARGS(fdb)
499724fd5dSVlad Buslov 	);
509724fd5dSVlad Buslov DEFINE_EVENT(mlx5_esw_bridge_fdb_template,
519724fd5dSVlad Buslov 	     mlx5_esw_bridge_fdb_entry_cleanup,
529724fd5dSVlad Buslov 	     TP_PROTO(const struct mlx5_esw_bridge_fdb_entry *fdb),
539724fd5dSVlad Buslov 	     TP_ARGS(fdb)
549724fd5dSVlad Buslov 	);
559724fd5dSVlad Buslov 
569724fd5dSVlad Buslov DECLARE_EVENT_CLASS(mlx5_esw_bridge_vlan_template,
579724fd5dSVlad Buslov 		    TP_PROTO(const struct mlx5_esw_bridge_vlan *vlan),
589724fd5dSVlad Buslov 		    TP_ARGS(vlan),
599724fd5dSVlad Buslov 		    TP_STRUCT__entry(
609724fd5dSVlad Buslov 			    __field(u16, vid)
619724fd5dSVlad Buslov 			    __field(u16, flags)
629724fd5dSVlad Buslov 			    ),
639724fd5dSVlad Buslov 		    TP_fast_assign(
649724fd5dSVlad Buslov 			    __entry->vid = vlan->vid;
659724fd5dSVlad Buslov 			    __entry->flags = vlan->flags;
669724fd5dSVlad Buslov 			    ),
679724fd5dSVlad Buslov 		    TP_printk("vid=%hu flags=%hx",
689724fd5dSVlad Buslov 			      __entry->vid,
699724fd5dSVlad Buslov 			      __entry->flags)
709724fd5dSVlad Buslov 	);
719724fd5dSVlad Buslov 
729724fd5dSVlad Buslov DEFINE_EVENT(mlx5_esw_bridge_vlan_template,
739724fd5dSVlad Buslov 	     mlx5_esw_bridge_vlan_create,
749724fd5dSVlad Buslov 	     TP_PROTO(const struct mlx5_esw_bridge_vlan *vlan),
759724fd5dSVlad Buslov 	     TP_ARGS(vlan)
769724fd5dSVlad Buslov 	);
779724fd5dSVlad Buslov DEFINE_EVENT(mlx5_esw_bridge_vlan_template,
789724fd5dSVlad Buslov 	     mlx5_esw_bridge_vlan_cleanup,
799724fd5dSVlad Buslov 	     TP_PROTO(const struct mlx5_esw_bridge_vlan *vlan),
809724fd5dSVlad Buslov 	     TP_ARGS(vlan)
819724fd5dSVlad Buslov 	);
829724fd5dSVlad Buslov 
839724fd5dSVlad Buslov DECLARE_EVENT_CLASS(mlx5_esw_bridge_port_template,
849724fd5dSVlad Buslov 		    TP_PROTO(const struct mlx5_esw_bridge_port *port),
859724fd5dSVlad Buslov 		    TP_ARGS(port),
869724fd5dSVlad Buslov 		    TP_STRUCT__entry(
879724fd5dSVlad Buslov 			    __field(u16, vport_num)
883ee6233eSVlad Buslov 			    __field(u16, esw_owner_vhca_id)
89c358ea17SVlad Buslov 			    __field(u16, flags)
909724fd5dSVlad Buslov 			    ),
919724fd5dSVlad Buslov 		    TP_fast_assign(
929724fd5dSVlad Buslov 			    __entry->vport_num = port->vport_num;
933ee6233eSVlad Buslov 			    __entry->esw_owner_vhca_id = port->esw_owner_vhca_id;
94c358ea17SVlad Buslov 			    __entry->flags = port->flags;
959724fd5dSVlad Buslov 			    ),
96c358ea17SVlad Buslov 		    TP_printk("vport_num=%hu esw_owner_vhca_id=%hu flags=%hx",
973ee6233eSVlad Buslov 			      __entry->vport_num,
98c358ea17SVlad Buslov 			      __entry->esw_owner_vhca_id,
99c358ea17SVlad Buslov 			      __entry->flags)
1009724fd5dSVlad Buslov 	);
1019724fd5dSVlad Buslov 
1029724fd5dSVlad Buslov DEFINE_EVENT(mlx5_esw_bridge_port_template,
1039724fd5dSVlad Buslov 	     mlx5_esw_bridge_vport_init,
1049724fd5dSVlad Buslov 	     TP_PROTO(const struct mlx5_esw_bridge_port *port),
1059724fd5dSVlad Buslov 	     TP_ARGS(port)
1069724fd5dSVlad Buslov 	);
1079724fd5dSVlad Buslov DEFINE_EVENT(mlx5_esw_bridge_port_template,
1089724fd5dSVlad Buslov 	     mlx5_esw_bridge_vport_cleanup,
1099724fd5dSVlad Buslov 	     TP_PROTO(const struct mlx5_esw_bridge_port *port),
1109724fd5dSVlad Buslov 	     TP_ARGS(port)
1119724fd5dSVlad Buslov 	);
1129724fd5dSVlad Buslov 
1139724fd5dSVlad Buslov #endif
1149724fd5dSVlad Buslov 
1159724fd5dSVlad Buslov /* This part must be outside protection */
1169724fd5dSVlad Buslov #undef TRACE_INCLUDE_PATH
1179724fd5dSVlad Buslov #define TRACE_INCLUDE_PATH esw/diag
1189724fd5dSVlad Buslov #undef TRACE_INCLUDE_FILE
1199724fd5dSVlad Buslov #define TRACE_INCLUDE_FILE bridge_tracepoint
1209724fd5dSVlad Buslov #include <trace/define_trace.h>
121