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(
24350d9a82SVlad 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 
113*55f3e740SVlad Buslov DECLARE_EVENT_CLASS(mlx5_esw_bridge_mdb_port_change_template,
114*55f3e740SVlad Buslov 		    TP_PROTO(const struct net_device *dev,
115*55f3e740SVlad Buslov 			     const struct mlx5_esw_bridge_mdb_entry *mdb),
116*55f3e740SVlad Buslov 		    TP_ARGS(dev, mdb),
117*55f3e740SVlad Buslov 		    TP_STRUCT__entry(
118*55f3e740SVlad Buslov 			    __array(char, dev_name, IFNAMSIZ)
119*55f3e740SVlad Buslov 			    __array(unsigned char, addr, ETH_ALEN)
120*55f3e740SVlad Buslov 			    __field(u16, vid)
121*55f3e740SVlad Buslov 			    __field(int, num_ports)
122*55f3e740SVlad Buslov 			    __field(bool, offloaded)),
123*55f3e740SVlad Buslov 		    TP_fast_assign(
124*55f3e740SVlad Buslov 			    strscpy(__entry->dev_name, netdev_name(dev), IFNAMSIZ);
125*55f3e740SVlad Buslov 			    memcpy(__entry->addr, mdb->key.addr, ETH_ALEN);
126*55f3e740SVlad Buslov 			    __entry->vid = mdb->key.vid;
127*55f3e740SVlad Buslov 			    __entry->num_ports = mdb->num_ports;
128*55f3e740SVlad Buslov 			    __entry->offloaded = mdb->egress_handle;),
129*55f3e740SVlad Buslov 		    TP_printk("net_device=%s addr=%pM vid=%u num_ports=%d offloaded=%d",
130*55f3e740SVlad Buslov 			      __entry->dev_name,
131*55f3e740SVlad Buslov 			      __entry->addr,
132*55f3e740SVlad Buslov 			      __entry->vid,
133*55f3e740SVlad Buslov 			      __entry->num_ports,
134*55f3e740SVlad Buslov 			      __entry->offloaded));
135*55f3e740SVlad Buslov 
136*55f3e740SVlad Buslov DEFINE_EVENT(mlx5_esw_bridge_mdb_port_change_template,
137*55f3e740SVlad Buslov 	     mlx5_esw_bridge_port_mdb_attach,
138*55f3e740SVlad Buslov 	     TP_PROTO(const struct net_device *dev,
139*55f3e740SVlad Buslov 		      const struct mlx5_esw_bridge_mdb_entry *mdb),
140*55f3e740SVlad Buslov 	     TP_ARGS(dev, mdb));
141*55f3e740SVlad Buslov 
142*55f3e740SVlad Buslov DEFINE_EVENT(mlx5_esw_bridge_mdb_port_change_template,
143*55f3e740SVlad Buslov 	     mlx5_esw_bridge_port_mdb_detach,
144*55f3e740SVlad Buslov 	     TP_PROTO(const struct net_device *dev,
145*55f3e740SVlad Buslov 		      const struct mlx5_esw_bridge_mdb_entry *mdb),
146*55f3e740SVlad Buslov 	     TP_ARGS(dev, mdb));
147*55f3e740SVlad Buslov 
1489724fd5dSVlad Buslov #endif
1499724fd5dSVlad Buslov 
1509724fd5dSVlad Buslov /* This part must be outside protection */
1519724fd5dSVlad Buslov #undef TRACE_INCLUDE_PATH
1529724fd5dSVlad Buslov #define TRACE_INCLUDE_PATH esw/diag
1539724fd5dSVlad Buslov #undef TRACE_INCLUDE_FILE
1549724fd5dSVlad Buslov #define TRACE_INCLUDE_FILE bridge_tracepoint
1559724fd5dSVlad Buslov #include <trace/define_trace.h>
156