aboutsummaryrefslogtreecommitdiffstats
path: root/include/trace
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-03-05 11:26:13 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2019-03-05 11:26:13 -0500
commit6456300356433873309a1cae6aa05e77d6b59153 (patch)
tree3158f04f2ca63a48e4d3021aba31aee8f18221cf /include/trace
parentcd2a3bf02625ffad02a6b9f7df758ee36cf12769 (diff)
parent18a4d8bf250a33c015955f0dec27259780ef6448 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
Pull networking updates from David Miller: "Here we go, another merge window full of networking and #ebpf changes: 1) Snoop DHCPACKS in batman-adv to learn MAC/IP pairs in the DHCP range without dealing with floods of ARP traffic, from Linus Lüssing. 2) Throttle buffered multicast packet transmission in mt76, from Felix Fietkau. 3) Support adaptive interrupt moderation in ice, from Brett Creeley. 4) A lot of struct_size conversions, from Gustavo A. R. Silva. 5) Add peek/push/pop commands to bpftool, as well as bash completion, from Stanislav Fomichev. 6) Optimize sk_msg_clone(), from Vakul Garg. 7) Add SO_BINDTOIFINDEX, from David Herrmann. 8) Be more conservative with local resends due to local congestion, from Yuchung Cheng. 9) Allow vetoing of unsupported VXLAN FDBs, from Petr Machata. 10) Add health buffer support to devlink, from Eran Ben Elisha. 11) Add TXQ scheduling API to mac80211, from Toke Høiland-Jørgensen. 12) Add statistics to basic packet scheduler filter, from Cong Wang. 13) Add GRE tunnel support for mlxsw Spectrum-2, from Nir Dotan. 14) Lots of new IP tunneling forwarding tests, also from Nir Dotan. 15) Add 3ad stats to bonding, from Nikolay Aleksandrov. 16) Lots of probing improvements for bpftool, from Quentin Monnet. 17) Various nfp drive #ebpf JIT improvements from Jakub Kicinski. 18) Allow #ebpf programs to access gso_segs from skb shared info, from Eric Dumazet. 19) Add sock_diag support for AF_XDP sockets, from Björn Töpel. 20) Support 22260 iwlwifi devices, from Luca Coelho. 21) Use rbtree for ipv6 defragmentation, from Peter Oskolkov. 22) Add JMP32 instruction class support to #ebpf, from Jiong Wang. 23) Add spinlock support to #ebpf, from Alexei Starovoitov. 24) Support 256-bit keys and TLS 1.3 in ktls, from Dave Watson. 25) Add device infomation API to devlink, from Jakub Kicinski. 26) Add new timestamping socket options which are y2038 safe, from Deepa Dinamani. 27) Add RX checksum offloading for various sh_eth chips, from Sergei Shtylyov. 28) Flow offload infrastructure, from Pablo Neira Ayuso. 29) Numerous cleanups, improvements, and bug fixes to the PHY layer and many drivers from Heiner Kallweit. 30) Lots of changes to try and make packet scheduler classifiers run lockless as much as possible, from Vlad Buslov. 31) Support BCM957504 chip in bnxt_en driver, from Erik Burrows. 32) Add concurrency tests to tc-tests infrastructure, from Vlad Buslov. 33) Add hwmon support to aquantia, from Heiner Kallweit. 34) Allow 64-bit values for SO_MAX_PACING_RATE, from Eric Dumazet. And I would be remiss if I didn't thank the various major networking subsystem maintainers for integrating much of this work before I even saw it. Alexei Starovoitov, Daniel Borkmann, Pablo Neira Ayuso, Johannes Berg, Kalle Valo, and many others. Thank you!" * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (2207 commits) net/sched: avoid unused-label warning net: ignore sysctl_devconf_inherit_init_net without SYSCTL phy: mdio-mux: fix Kconfig dependencies net: phy: use phy_modify_mmd_changed in genphy_c45_an_config_aneg net: dsa: mv88e6xxx: add call to mv88e6xxx_ports_cmode_init to probe for new DSA framework selftest/net: Remove duplicate header sky2: Disable MSI on Dell Inspiron 1545 and Gateway P-79 net/mlx5e: Update tx reporter status in case channels were successfully opened devlink: Add support for direct reporter health state update devlink: Update reporter state to error even if recover aborted sctp: call iov_iter_revert() after sending ABORT team: Free BPF filter when unregistering netdev ip6mr: Do not call __IP6_INC_STATS() from preemptible context isdn: mISDN: Fix potential NULL pointer dereference of kzalloc net: dsa: mv88e6xxx: support in-band signalling on SGMII ports with external PHYs cxgb4/chtls: Prefix adapter flags with CXGB4 net-sysfs: Switch to bitmap_zalloc() mellanox: Switch to bitmap_zalloc() bpf: add test cases for non-pointer sanitiation logic mlxsw: i2c: Extend initialization by querying resources data ...
Diffstat (limited to 'include/trace')
-rw-r--r--include/trace/events/devlink.h129
-rw-r--r--include/trace/events/mlxsw.h119
-rw-r--r--include/trace/events/neigh.h206
3 files changed, 454 insertions, 0 deletions
diff --git a/include/trace/events/devlink.h b/include/trace/events/devlink.h
index 44acfbca1266..6f60a78d9a7e 100644
--- a/include/trace/events/devlink.h
+++ b/include/trace/events/devlink.h
@@ -46,6 +46,131 @@ TRACE_EVENT(devlink_hwmsg,
46 (int) __entry->len, __get_dynamic_array(buf), __entry->len) 46 (int) __entry->len, __get_dynamic_array(buf), __entry->len)
47); 47);
48 48
49/*
50 * Tracepoint for devlink hardware error:
51 */
52TRACE_EVENT(devlink_hwerr,
53 TP_PROTO(const struct devlink *devlink, int err, const char *msg),
54
55 TP_ARGS(devlink, err, msg),
56
57 TP_STRUCT__entry(
58 __string(bus_name, devlink->dev->bus->name)
59 __string(dev_name, dev_name(devlink->dev))
60 __string(driver_name, devlink->dev->driver->name)
61 __field(int, err)
62 __string(msg, msg)
63 ),
64
65 TP_fast_assign(
66 __assign_str(bus_name, devlink->dev->bus->name);
67 __assign_str(dev_name, dev_name(devlink->dev));
68 __assign_str(driver_name, devlink->dev->driver->name);
69 __entry->err = err;
70 __assign_str(msg, msg);
71 ),
72
73 TP_printk("bus_name=%s dev_name=%s driver_name=%s err=%d %s",
74 __get_str(bus_name), __get_str(dev_name),
75 __get_str(driver_name), __entry->err, __get_str(msg))
76);
77
78/*
79 * Tracepoint for devlink health message:
80 */
81TRACE_EVENT(devlink_health_report,
82 TP_PROTO(const struct devlink *devlink, const char *reporter_name,
83 const char *msg),
84
85 TP_ARGS(devlink, reporter_name, msg),
86
87 TP_STRUCT__entry(
88 __string(bus_name, devlink->dev->bus->name)
89 __string(dev_name, dev_name(devlink->dev))
90 __string(driver_name, devlink->dev->driver->name)
91 __string(reporter_name, msg)
92 __string(msg, msg)
93 ),
94
95 TP_fast_assign(
96 __assign_str(bus_name, devlink->dev->bus->name);
97 __assign_str(dev_name, dev_name(devlink->dev));
98 __assign_str(driver_name, devlink->dev->driver->name);
99 __assign_str(reporter_name, reporter_name);
100 __assign_str(msg, msg);
101 ),
102
103 TP_printk("bus_name=%s dev_name=%s driver_name=%s reporter_name=%s: %s",
104 __get_str(bus_name), __get_str(dev_name),
105 __get_str(driver_name), __get_str(reporter_name),
106 __get_str(msg))
107);
108
109/*
110 * Tracepoint for devlink health recover aborted message:
111 */
112TRACE_EVENT(devlink_health_recover_aborted,
113 TP_PROTO(const struct devlink *devlink, const char *reporter_name,
114 bool health_state, u64 time_since_last_recover),
115
116 TP_ARGS(devlink, reporter_name, health_state, time_since_last_recover),
117
118 TP_STRUCT__entry(
119 __string(bus_name, devlink->dev->bus->name)
120 __string(dev_name, dev_name(devlink->dev))
121 __string(driver_name, devlink->dev->driver->name)
122 __string(reporter_name, reporter_name)
123 __field(bool, health_state)
124 __field(u64, time_since_last_recover)
125 ),
126
127 TP_fast_assign(
128 __assign_str(bus_name, devlink->dev->bus->name);
129 __assign_str(dev_name, dev_name(devlink->dev));
130 __assign_str(driver_name, devlink->dev->driver->name);
131 __assign_str(reporter_name, reporter_name);
132 __entry->health_state = health_state;
133 __entry->time_since_last_recover = time_since_last_recover;
134 ),
135
136 TP_printk("bus_name=%s dev_name=%s driver_name=%s reporter_name=%s: health_state=%d time_since_last_recover=%llu recover aborted",
137 __get_str(bus_name), __get_str(dev_name),
138 __get_str(driver_name), __get_str(reporter_name),
139 __entry->health_state,
140 __entry->time_since_last_recover)
141);
142
143/*
144 * Tracepoint for devlink health reporter state update:
145 */
146TRACE_EVENT(devlink_health_reporter_state_update,
147 TP_PROTO(const struct devlink *devlink, const char *reporter_name,
148 bool new_state),
149
150 TP_ARGS(devlink, reporter_name, new_state),
151
152 TP_STRUCT__entry(
153 __string(bus_name, devlink->dev->bus->name)
154 __string(dev_name, dev_name(devlink->dev))
155 __string(driver_name, devlink->dev->driver->name)
156 __string(reporter_name, reporter_name)
157 __field(u8, new_state)
158 ),
159
160 TP_fast_assign(
161 __assign_str(bus_name, devlink->dev->bus->name);
162 __assign_str(dev_name, dev_name(devlink->dev));
163 __assign_str(driver_name, devlink->dev->driver->name);
164 __assign_str(reporter_name, reporter_name);
165 __entry->new_state = new_state;
166 ),
167
168 TP_printk("bus_name=%s dev_name=%s driver_name=%s reporter_name=%s: new_state=%d",
169 __get_str(bus_name), __get_str(dev_name),
170 __get_str(driver_name), __get_str(reporter_name),
171 __entry->new_state)
172);
173
49#endif /* _TRACE_DEVLINK_H */ 174#endif /* _TRACE_DEVLINK_H */
50 175
51/* This part must be outside protection */ 176/* This part must be outside protection */
@@ -64,6 +189,10 @@ static inline void trace_devlink_hwmsg(const struct devlink *devlink,
64{ 189{
65} 190}
66 191
192static inline void trace_devlink_hwerr(const struct devlink *devlink,
193 int err, const char *msg)
194{
195}
67#endif /* _TRACE_DEVLINK_H */ 196#endif /* _TRACE_DEVLINK_H */
68 197
69#endif 198#endif
diff --git a/include/trace/events/mlxsw.h b/include/trace/events/mlxsw.h
new file mode 100644
index 000000000000..6a4cfaef33a2
--- /dev/null
+++ b/include/trace/events/mlxsw.h
@@ -0,0 +1,119 @@
1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
2/* Copyright (c) 2019 Mellanox Technologies. All rights reserved */
3
4#undef TRACE_SYSTEM
5#define TRACE_SYSTEM mlxsw
6
7#if !defined(_MLXSW_TRACEPOINT_H) || defined(TRACE_HEADER_MULTI_READ)
8#define _MLXSW_TRACEPOINT_H
9
10#include <linux/tracepoint.h>
11
12struct mlxsw_sp;
13struct mlxsw_sp_acl_atcam_region;
14struct mlxsw_sp_acl_tcam_vregion;
15
16TRACE_EVENT(mlxsw_sp_acl_atcam_entry_add_ctcam_spill,
17 TP_PROTO(const struct mlxsw_sp *mlxsw_sp,
18 const struct mlxsw_sp_acl_atcam_region *aregion),
19
20 TP_ARGS(mlxsw_sp, aregion),
21
22 TP_STRUCT__entry(
23 __field(const void *, mlxsw_sp)
24 __field(const void *, aregion)
25 ),
26
27 TP_fast_assign(
28 __entry->mlxsw_sp = mlxsw_sp;
29 __entry->aregion = aregion;
30 ),
31
32 TP_printk("mlxsw_sp %p, aregion %p",
33 __entry->mlxsw_sp, __entry->aregion)
34);
35
36TRACE_EVENT(mlxsw_sp_acl_tcam_vregion_rehash,
37 TP_PROTO(const struct mlxsw_sp *mlxsw_sp,
38 const struct mlxsw_sp_acl_tcam_vregion *vregion),
39
40 TP_ARGS(mlxsw_sp, vregion),
41
42 TP_STRUCT__entry(
43 __field(const void *, mlxsw_sp)
44 __field(const void *, vregion)
45 ),
46
47 TP_fast_assign(
48 __entry->mlxsw_sp = mlxsw_sp;
49 __entry->vregion = vregion;
50 ),
51
52 TP_printk("mlxsw_sp %p, vregion %p",
53 __entry->mlxsw_sp, __entry->vregion)
54);
55
56TRACE_EVENT(mlxsw_sp_acl_tcam_vregion_migrate,
57 TP_PROTO(const struct mlxsw_sp *mlxsw_sp,
58 const struct mlxsw_sp_acl_tcam_vregion *vregion),
59
60 TP_ARGS(mlxsw_sp, vregion),
61
62 TP_STRUCT__entry(
63 __field(const void *, mlxsw_sp)
64 __field(const void *, vregion)
65 ),
66
67 TP_fast_assign(
68 __entry->mlxsw_sp = mlxsw_sp;
69 __entry->vregion = vregion;
70 ),
71
72 TP_printk("mlxsw_sp %p, vregion %p",
73 __entry->mlxsw_sp, __entry->vregion)
74);
75
76TRACE_EVENT(mlxsw_sp_acl_tcam_vregion_migrate_end,
77 TP_PROTO(const struct mlxsw_sp *mlxsw_sp,
78 const struct mlxsw_sp_acl_tcam_vregion *vregion),
79
80 TP_ARGS(mlxsw_sp, vregion),
81
82 TP_STRUCT__entry(
83 __field(const void *, mlxsw_sp)
84 __field(const void *, vregion)
85 ),
86
87 TP_fast_assign(
88 __entry->mlxsw_sp = mlxsw_sp;
89 __entry->vregion = vregion;
90 ),
91
92 TP_printk("mlxsw_sp %p, vregion %p",
93 __entry->mlxsw_sp, __entry->vregion)
94);
95
96TRACE_EVENT(mlxsw_sp_acl_tcam_vregion_rehash_dis,
97 TP_PROTO(const struct mlxsw_sp *mlxsw_sp,
98 const struct mlxsw_sp_acl_tcam_vregion *vregion),
99
100 TP_ARGS(mlxsw_sp, vregion),
101
102 TP_STRUCT__entry(
103 __field(const void *, mlxsw_sp)
104 __field(const void *, vregion)
105 ),
106
107 TP_fast_assign(
108 __entry->mlxsw_sp = mlxsw_sp;
109 __entry->vregion = vregion;
110 ),
111
112 TP_printk("mlxsw_sp %p, vregion %p",
113 __entry->mlxsw_sp, __entry->vregion)
114);
115
116#endif /* _MLXSW_TRACEPOINT_H */
117
118/* This part must be outside protection */
119#include <trace/define_trace.h>
diff --git a/include/trace/events/neigh.h b/include/trace/events/neigh.h
new file mode 100644
index 000000000000..0bdb08557763
--- /dev/null
+++ b/include/trace/events/neigh.h
@@ -0,0 +1,206 @@
1#undef TRACE_SYSTEM
2#define TRACE_SYSTEM neigh
3
4#if !defined(_TRACE_NEIGH_H) || defined(TRACE_HEADER_MULTI_READ)
5#define _TRACE_NEIGH_H
6
7#include <linux/skbuff.h>
8#include <linux/netdevice.h>
9#include <linux/tracepoint.h>
10#include <net/neighbour.h>
11
12#define neigh_state_str(state) \
13 __print_symbolic(state, \
14 { NUD_INCOMPLETE, "incomplete" }, \
15 { NUD_REACHABLE, "reachable" }, \
16 { NUD_STALE, "stale" }, \
17 { NUD_DELAY, "delay" }, \
18 { NUD_PROBE, "probe" }, \
19 { NUD_FAILED, "failed" }, \
20 { NUD_NOARP, "noarp" }, \
21 { NUD_PERMANENT, "permanent"})
22
23TRACE_EVENT(neigh_update,
24
25 TP_PROTO(struct neighbour *n, const u8 *lladdr, u8 new,
26 u32 flags, u32 nlmsg_pid),
27
28 TP_ARGS(n, lladdr, new, flags, nlmsg_pid),
29
30 TP_STRUCT__entry(
31 __field(u32, family)
32 __string(dev, (n->dev ? n->dev->name : "NULL"))
33 __array(u8, lladdr, MAX_ADDR_LEN)
34 __field(u8, lladdr_len)
35 __field(u8, flags)
36 __field(u8, nud_state)
37 __field(u8, type)
38 __field(u8, dead)
39 __field(int, refcnt)
40 __array(__u8, primary_key4, 4)
41 __array(__u8, primary_key6, 16)
42 __field(unsigned long, confirmed)
43 __field(unsigned long, updated)
44 __field(unsigned long, used)
45 __array(u8, new_lladdr, MAX_ADDR_LEN)
46 __field(u8, new_state)
47 __field(u32, update_flags)
48 __field(u32, pid)
49 ),
50
51 TP_fast_assign(
52 int lladdr_len = (n->dev ? n->dev->addr_len : MAX_ADDR_LEN);
53 struct in6_addr *pin6;
54 __be32 *p32;
55
56 __entry->family = n->tbl->family;
57 __assign_str(dev, (n->dev ? n->dev->name : "NULL"));
58 __entry->lladdr_len = lladdr_len;
59 memcpy(__entry->lladdr, n->ha, lladdr_len);
60 __entry->flags = n->flags;
61 __entry->nud_state = n->nud_state;
62 __entry->type = n->type;
63 __entry->dead = n->dead;
64 __entry->refcnt = refcount_read(&n->refcnt);
65 pin6 = (struct in6_addr *)__entry->primary_key6;
66 p32 = (__be32 *)__entry->primary_key4;
67
68 if (n->tbl->family == AF_INET)
69 *p32 = *(__be32 *)n->primary_key;
70 else
71 *p32 = 0;
72
73#if IS_ENABLED(CONFIG_IPV6)
74 if (n->tbl->family == AF_INET6) {
75 pin6 = (struct in6_addr *)__entry->primary_key6;
76 *pin6 = *(struct in6_addr *)n->primary_key;
77 } else
78#endif
79 {
80 ipv6_addr_set_v4mapped(*p32, pin6);
81 }
82 __entry->confirmed = n->confirmed;
83 __entry->updated = n->updated;
84 __entry->used = n->used;
85 if (lladdr)
86 memcpy(__entry->new_lladdr, lladdr, lladdr_len);
87 __entry->new_state = new;
88 __entry->update_flags = flags;
89 __entry->pid = nlmsg_pid;
90 ),
91
92 TP_printk("family %d dev %s lladdr %s flags %02x nud_state %s type %02x "
93 "dead %d refcnt %d primary_key4 %pI4 primary_key6 %pI6c "
94 "confirmed %lu updated %lu used %lu new_lladdr %s "
95 "new_state %s update_flags %02x pid %d",
96 __entry->family, __get_str(dev),
97 __print_hex_str(__entry->lladdr, __entry->lladdr_len),
98 __entry->flags, neigh_state_str(__entry->nud_state),
99 __entry->type, __entry->dead, __entry->refcnt,
100 __entry->primary_key4, __entry->primary_key6,
101 __entry->confirmed, __entry->updated, __entry->used,
102 __print_hex_str(__entry->new_lladdr, __entry->lladdr_len),
103 neigh_state_str(__entry->new_state),
104 __entry->update_flags, __entry->pid)
105);
106
107DECLARE_EVENT_CLASS(neigh__update,
108 TP_PROTO(struct neighbour *n, int err),
109 TP_ARGS(n, err),
110 TP_STRUCT__entry(
111 __field(u32, family)
112 __string(dev, (n->dev ? n->dev->name : "NULL"))
113 __array(u8, lladdr, MAX_ADDR_LEN)
114 __field(u8, lladdr_len)
115 __field(u8, flags)
116 __field(u8, nud_state)
117 __field(u8, type)
118 __field(u8, dead)
119 __field(int, refcnt)
120 __array(__u8, primary_key4, 4)
121 __array(__u8, primary_key6, 16)
122 __field(unsigned long, confirmed)
123 __field(unsigned long, updated)
124 __field(unsigned long, used)
125 __field(u32, err)
126 ),
127
128 TP_fast_assign(
129 int lladdr_len = (n->dev ? n->dev->addr_len : MAX_ADDR_LEN);
130 struct in6_addr *pin6;
131 __be32 *p32;
132
133 __entry->family = n->tbl->family;
134 __assign_str(dev, (n->dev ? n->dev->name : "NULL"));
135 __entry->lladdr_len = lladdr_len;
136 memcpy(__entry->lladdr, n->ha, lladdr_len);
137 __entry->flags = n->flags;
138 __entry->nud_state = n->nud_state;
139 __entry->type = n->type;
140 __entry->dead = n->dead;
141 __entry->refcnt = refcount_read(&n->refcnt);
142 pin6 = (struct in6_addr *)__entry->primary_key6;
143 p32 = (__be32 *)__entry->primary_key4;
144
145 if (n->tbl->family == AF_INET)
146 *p32 = *(__be32 *)n->primary_key;
147 else
148 *p32 = 0;
149
150#if IS_ENABLED(CONFIG_IPV6)
151 if (n->tbl->family == AF_INET6) {
152 pin6 = (struct in6_addr *)__entry->primary_key6;
153 *pin6 = *(struct in6_addr *)n->primary_key;
154 } else
155#endif
156 {
157 ipv6_addr_set_v4mapped(*p32, pin6);
158 }
159
160 __entry->confirmed = n->confirmed;
161 __entry->updated = n->updated;
162 __entry->used = n->used;
163 __entry->err = err;
164 ),
165
166 TP_printk("family %d dev %s lladdr %s flags %02x nud_state %s type %02x "
167 "dead %d refcnt %d primary_key4 %pI4 primary_key6 %pI6c "
168 "confirmed %lu updated %lu used %lu err %d",
169 __entry->family, __get_str(dev),
170 __print_hex_str(__entry->lladdr, __entry->lladdr_len),
171 __entry->flags, neigh_state_str(__entry->nud_state),
172 __entry->type, __entry->dead, __entry->refcnt,
173 __entry->primary_key4, __entry->primary_key6,
174 __entry->confirmed, __entry->updated, __entry->used,
175 __entry->err)
176);
177
178DEFINE_EVENT(neigh__update, neigh_update_done,
179 TP_PROTO(struct neighbour *neigh, int err),
180 TP_ARGS(neigh, err)
181);
182
183DEFINE_EVENT(neigh__update, neigh_timer_handler,
184 TP_PROTO(struct neighbour *neigh, int err),
185 TP_ARGS(neigh, err)
186);
187
188DEFINE_EVENT(neigh__update, neigh_event_send_done,
189 TP_PROTO(struct neighbour *neigh, int err),
190 TP_ARGS(neigh, err)
191);
192
193DEFINE_EVENT(neigh__update, neigh_event_send_dead,
194 TP_PROTO(struct neighbour *neigh, int err),
195 TP_ARGS(neigh, err)
196);
197
198DEFINE_EVENT(neigh__update, neigh_cleanup_and_release,
199 TP_PROTO(struct neighbour *neigh, int rc),
200 TP_ARGS(neigh, rc)
201);
202
203#endif /* _TRACE_NEIGH_H */
204
205/* This part must be outside protection */
206#include <trace/define_trace.h>