From 1db19db7f5ff4ddd3b1b6dd2092a87298ee5bd0b Mon Sep 17 00:00:00 2001 From: Jesper Dangaard Brouer Date: Thu, 7 Jul 2016 18:01:32 +0200 Subject: net: tracepoint napi:napi_poll add work and budget An important information for the napi_poll tracepoint is knowing the work done (packets processed) by the napi_poll() call. Add both the work done and budget, as they are related. Handle trace_napi_poll() param change in dropwatch/drop_monitor and in python perf script netdev-times.py in backward compat way, as python fortunately supports optional parameter handling. Signed-off-by: Jesper Dangaard Brouer Signed-off-by: David S. Miller --- include/trace/events/napi.h | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'include/trace') diff --git a/include/trace/events/napi.h b/include/trace/events/napi.h index 8fe1e93f531d..118ed7767639 100644 --- a/include/trace/events/napi.h +++ b/include/trace/events/napi.h @@ -12,22 +12,27 @@ TRACE_EVENT(napi_poll, - TP_PROTO(struct napi_struct *napi), + TP_PROTO(struct napi_struct *napi, int work, int budget), - TP_ARGS(napi), + TP_ARGS(napi, work, budget), TP_STRUCT__entry( __field( struct napi_struct *, napi) + __field( int, work) + __field( int, budget) __string( dev_name, napi->dev ? napi->dev->name : NO_DEV) ), TP_fast_assign( __entry->napi = napi; + __entry->work = work; + __entry->budget = budget; __assign_str(dev_name, napi->dev ? napi->dev->name : NO_DEV); ), - TP_printk("napi poll on napi struct %p for device %s", - __entry->napi, __get_str(dev_name)) + TP_printk("napi poll on napi struct %p for device %s work %d budget %d", + __entry->napi, __get_str(dev_name), + __entry->work, __entry->budget) ); #undef NO_DEV -- cgit From e5224f0fe2acddbc2fa9b419d8867ced7f5381fc Mon Sep 17 00:00:00 2001 From: Jiri Pirko Date: Tue, 12 Jul 2016 18:05:03 +0200 Subject: devlink: add hardware messages tracing facility Define a tracepoint and allow user to trace messages going to and from hardware associated with devlink instance. Signed-off-by: Jiri Pirko Acked-by: Steven Rostedt Signed-off-by: David S. Miller --- include/trace/events/devlink.h | 68 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 include/trace/events/devlink.h (limited to 'include/trace') diff --git a/include/trace/events/devlink.h b/include/trace/events/devlink.h new file mode 100644 index 000000000000..333c32ac9bfa --- /dev/null +++ b/include/trace/events/devlink.h @@ -0,0 +1,68 @@ +#if IS_ENABLED(CONFIG_NET_DEVLINK) + +#undef TRACE_SYSTEM +#define TRACE_SYSTEM devlink + +#if !defined(_TRACE_DEVLINK_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_DEVLINK_H + +#include +#include +#include + +/* + * Tracepoint for devlink hardware message: + */ +TRACE_EVENT(devlink_hwmsg, + TP_PROTO(const struct devlink *devlink, bool incoming, + unsigned long type, const u8 *buf, size_t len), + + TP_ARGS(devlink, incoming, type, buf, len), + + TP_STRUCT__entry( + __string(bus_name, devlink->dev->bus->name) + __string(dev_name, dev_name(devlink->dev)) + __string(owner_name, devlink->dev->driver->owner->name) + __field(bool, incoming) + __field(unsigned long, type) + __dynamic_array(u8, buf, len) + __field(size_t, len) + ), + + TP_fast_assign( + __assign_str(bus_name, devlink->dev->bus->name); + __assign_str(dev_name, dev_name(devlink->dev)); + __assign_str(owner_name, devlink->dev->driver->owner->name); + __entry->incoming = incoming; + __entry->type = type; + memcpy(__get_dynamic_array(buf), buf, len); + __entry->len = len; + ), + + TP_printk("bus_name=%s dev_name=%s owner_name=%s incoming=%d type=%lu buf=0x[%*phD] len=%lu", + __get_str(bus_name), __get_str(dev_name), + __get_str(owner_name), __entry->incoming, __entry->type, + (int) __entry->len, __get_dynamic_array(buf), __entry->len) +); + +#endif /* _TRACE_DEVLINK_H */ + +/* This part must be outside protection */ +#include + +#else /* CONFIG_NET_DEVLINK */ + +#if !defined(_TRACE_DEVLINK_H) +#define _TRACE_DEVLINK_H + +#include + +static inline void trace_devlink_hwmsg(const struct devlink *devlink, + bool incoming, unsigned long type, + const u8 *buf, size_t len) +{ +} + +#endif /* _TRACE_DEVLINK_H */ + +#endif -- cgit From 0e1824c98a0ffd7fd9ffb2a3da01ec49ff1348a2 Mon Sep 17 00:00:00 2001 From: Jiri Pirko Date: Thu, 14 Jul 2016 11:37:28 +0200 Subject: tracing: change owner name to driver name for devlink hwmsg tracepoint Turned on that driver->owner which is struct module is not available when modules are disabled. Better to depend on a driver name which is always available. Reported-by: Randy Dunlap Fixes: e5224f0fe2 ("devlink: add hardware messages tracing facility") Signed-off-by: Jiri Pirko Acked-by: Randy Dunlap Acked-by: Steven Rostedt Signed-off-by: David S. Miller --- include/trace/events/devlink.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'include/trace') diff --git a/include/trace/events/devlink.h b/include/trace/events/devlink.h index 333c32ac9bfa..77dce71df42a 100644 --- a/include/trace/events/devlink.h +++ b/include/trace/events/devlink.h @@ -22,7 +22,7 @@ TRACE_EVENT(devlink_hwmsg, TP_STRUCT__entry( __string(bus_name, devlink->dev->bus->name) __string(dev_name, dev_name(devlink->dev)) - __string(owner_name, devlink->dev->driver->owner->name) + __string(driver_name, devlink->dev->driver->name) __field(bool, incoming) __field(unsigned long, type) __dynamic_array(u8, buf, len) @@ -32,16 +32,16 @@ TRACE_EVENT(devlink_hwmsg, TP_fast_assign( __assign_str(bus_name, devlink->dev->bus->name); __assign_str(dev_name, dev_name(devlink->dev)); - __assign_str(owner_name, devlink->dev->driver->owner->name); + __assign_str(driver_name, devlink->dev->driver->name); __entry->incoming = incoming; __entry->type = type; memcpy(__get_dynamic_array(buf), buf, len); __entry->len = len; ), - TP_printk("bus_name=%s dev_name=%s owner_name=%s incoming=%d type=%lu buf=0x[%*phD] len=%lu", + TP_printk("bus_name=%s dev_name=%s driver_name=%s incoming=%d type=%lu buf=0x[%*phD] len=%lu", __get_str(bus_name), __get_str(dev_name), - __get_str(owner_name), __entry->incoming, __entry->type, + __get_str(driver_name), __entry->incoming, __entry->type, (int) __entry->len, __get_dynamic_array(buf), __entry->len) ); -- cgit From caeccd5180930eb8586771bb1935f4f2e456a8e8 Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Thu, 14 Jul 2016 11:37:29 +0200 Subject: devlink: fix trace format string Including devlink.h on ARM and probably other 32-bit architectures results in a harmless warning: In file included from ../include/trace/define_trace.h:95:0, from ../include/trace/events/devlink.h:51, from ../net/core/devlink.c:30: include/trace/events/devlink.h: In function 'trace_raw_output_devlink_hwmsg': include/trace/events/devlink.h:42:12: error: format '%lu' expects argument of type 'long unsigned int', but argument 10 has type 'size_t {aka unsigned int}' [-Werror=format=] The correct format string for 'size_t' is %zu, not %lu, this works on all architectures. Signed-off-by: Arnd Bergmann Fixes: e5224f0fe2ac ("devlink: add hardware messages tracing facility") Signed-off-by: Jiri Pirko Acked-by: Randy Dunlap Signed-off-by: David S. Miller --- include/trace/events/devlink.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'include/trace') diff --git a/include/trace/events/devlink.h b/include/trace/events/devlink.h index 77dce71df42a..09f1df228f2c 100644 --- a/include/trace/events/devlink.h +++ b/include/trace/events/devlink.h @@ -39,7 +39,7 @@ TRACE_EVENT(devlink_hwmsg, __entry->len = len; ), - TP_printk("bus_name=%s dev_name=%s driver_name=%s incoming=%d type=%lu buf=0x[%*phD] len=%lu", + TP_printk("bus_name=%s dev_name=%s driver_name=%s incoming=%d type=%lu buf=0x[%*phD] len=%zu", __get_str(bus_name), __get_str(dev_name), __get_str(driver_name), __entry->incoming, __entry->type, (int) __entry->len, __get_dynamic_array(buf), __entry->len) -- cgit From 02a198777e646a12a8aabae5639f1d33d81d79ef Mon Sep 17 00:00:00 2001 From: Jesper Dangaard Brouer Date: Fri, 15 Jul 2016 23:55:20 +0200 Subject: net: fixup for tracepoint napi:napi_poll The recent change to tracepoint napi:napi_poll changed the order of the parameters that perf scripts sees, the printk was correct. The problem was that the new parameters (work and budget) were pushed in front of dev_name. The new parameters obviously need to be appended to keep backward compatible. Fixes: 1db19db7f5ff ("net: tracepoint napi:napi_poll add work and budget") Signed-off-by: Jesper Dangaard Brouer Signed-off-by: David S. Miller --- include/trace/events/napi.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'include/trace') diff --git a/include/trace/events/napi.h b/include/trace/events/napi.h index 118ed7767639..0b9e5136a2a3 100644 --- a/include/trace/events/napi.h +++ b/include/trace/events/napi.h @@ -18,16 +18,16 @@ TRACE_EVENT(napi_poll, TP_STRUCT__entry( __field( struct napi_struct *, napi) + __string( dev_name, napi->dev ? napi->dev->name : NO_DEV) __field( int, work) __field( int, budget) - __string( dev_name, napi->dev ? napi->dev->name : NO_DEV) ), TP_fast_assign( __entry->napi = napi; + __assign_str(dev_name, napi->dev ? napi->dev->name : NO_DEV); __entry->work = work; __entry->budget = budget; - __assign_str(dev_name, napi->dev ? napi->dev->name : NO_DEV); ), TP_printk("napi poll on napi struct %p for device %s work %d budget %d", -- cgit