tracing: printk:console fix and __get_str() cleanup
Subsystems (4)
cover tracing: printk:console fix and __get_str() cleanup
This patch series fixes a problem on printk:console tracepoint that prints a blank line in the trace output after each printk message that finishes with '\n'.
It also does some cleanup on __get_str() usage, that was found while fixing the printk:console tracepoint.
Daniel Bristot de Oliveira (4):
tracing: Use outer () on __get_str() definition tracing, RAS: Cleanup on __get_str() usage
tracing: Use __get_str() when manipulating strings printk, tracing: Avoiding unneeded blank lines
fs/nfs/nfs4trace.h | 4 ++-- fs/nfs/nfstrace.h | 4 ++-- include/ras/ras_event.h | 4 ++-- include/trace/events/printk.h | 12 ++++++++++-- include/trace/perf.h | 2 +- include/trace/trace_events.h | 2 +- 6 files changed, 18 insertions(+), 10 deletions(-)
Signature · 1 line
2.7.4
PATCH 1/4 tracing: Use outer () on __get_str() definition
__get_str(str)'s definition includes a (char *) operator overloading that is not protected with outer ().
This patch adds () around __get_str()'s definition, enabling some code cleanup.
--- include/trace/perf.h | 2 +- include/trace/trace_events.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
include/trace/perf.h +1 -1
@@ -15,7 +15,7 @@ ((__entry->__data_loc_##field >> 16) & 0xffff)#undef __get_str -#define __get_str (field) (char *)__get_dynamic_array(field) +#define __get_str (field) ((char *)__get_dynamic_array(field))#undef __get_bitmask#define __get_bitmask (field) (char *)__get_dynamic_array(field)
include/trace/trace_events.h +1 -1
@@ -256,7 +256,7 @@ TRACE_MAKE_SYSTEM_STR(); ((__entry->__data_loc_##field >> 16) & 0xffff)#undef __get_str -#define __get_str (field) (char *)__get_dynamic_array(field) +#define __get_str (field) ((char *)__get_dynamic_array(field))#undef __get_bitmask#define __get_bitmask (field) \
Signature · 1 line
2.7.4
PATCH 2/4 tracing, RAS: Cleanup on __get_str() usage
In reply to Daniel Bristot de Oliveira__get_str(msg) does not need (char *) operator overloading to access mgs's elements anymore. This patch substitutes
((char *)__get_str(msg))[0] usage to __get_str(msg)[0].
It is just a code cleanup, no changes on tracepoint ABI.
--- include/ras/ras_event.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
include/ras/ras_event.h +2 -2
@@ -147,7 +147,7 @@ TRACE_EVENT(mc_event, __entry->error_count,mc_event_error_type (__entry->error_type), __entry->error_count >1 ?"s" :"" , - ((char *)__get_str (msg))[0 ] ?" " :"" , +__get_str (msg)[0 ] ?" " :"" ,__get_str (msg),__get_str (label), __entry->mc_index,
@@ -157,7 +157,7 @@ TRACE_EVENT(mc_event, __entry->address,1 << __entry->grain_bits, __entry->syndrome, - ((char *)__get_str (driver_detail))[0 ] ?" " :"" , +__get_str (driver_detail)[0 ] ?" " :"" , __get_str(driver_detail)) );
Signature · 1 line
2.7.4
PATCH 3/4 tracing: Use __get_str() when manipulating strings
In reply to Daniel Bristot de OliveiraUse __get_str(str) rather than __get_dynamic_array(str) when deadling with strings.
It is just a code cleanup, no changes on tracepoint ABI.
--- fs/nfs/nfs4trace.h | 4 ++-- fs/nfs/nfstrace.h | 4 ++-- include/trace/events/printk.h | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-)
fs/nfs/nfs4trace.h +2 -2
@@ -1235,8 +1235,8 @@ DECLARE_EVENT_CLASS(nfs4_idmap_event, len =0 ; __entry->error = error <0 ? error :0 ; __entry->id = id; -memcpy (__get_dynamic_array (name), name, len); - ((char *)__get_dynamic_array (name))[len] =0 ; +memcpy (__get_str (name), name, len); +__get_str (name)[len] =0 ; ), TP_printk(
fs/nfs/nfstrace.h +2 -2
@@ -707,9 +707,9 @@ TRACE_EVENT(nfs_sillyrename_unlink, __entry->dev = dir->i_sb->s_dev; __entry->dir =NFS_FILEID (dir); __entry->error = error; -memcpy (__get_dynamic_array (name), +memcpy (__get_str (name), data->args.name.name, len); - ((char *)__get_dynamic_array (name))[len] =0 ; +__get_str (name)[len] =0 ; ), TP_printk(
include/trace/events/printk.h +2 -2
@@ -16,8 +16,8 @@ TRACE_EVENT(console, ), TP_fast_assign( - memcpy(__get_dynamic_array(msg), text, len); - ((char *)__get_dynamic_array (msg))[len] =0 ; + memcpy(__get_str(msg), text, len); +__get_str (msg)[len] =0 ; ),TP_printk ("%s" ,__get_str (msg))
Signature · 1 line
2.7.4
PATCH 4/4 printk, tracing: Avoiding unneeded blank lines
In reply to Daniel Bristot de OliveiraPrintk messages often finish with '\n' to cause a new line. But as each tracepoint is already printed in a new line, printk messages that finish with '\n' ends up adding a blank line to the trace output. For example:
kworker/0:1-86 [000] d... 46.006949: console: [ 46.006946] usb 1-3: USB disconnect, device number 3
kworker/2:2-374 [002] d... 48.699342: console: [ 48.699339] usb 1-3: new high-speed USB device number 4 using ehci-pci
kworker/2:2-374 [002] d... 49.041450: console: [ 49.041448] usb 1-3: New USB device found, idVendor=5986, idProduct=0To avoid unneeded blank lines, this patch checks if the printk message finishes with '\n', if so, it cut is off the '\n' to avoid blank lines.
In a patched kernel, the same messages are printed without extra blank lines. For example:
kworker/0:4-185 [000] d... 23.641738: console: [ 23.641736] usb 1-3: USB disconnect, device number 3
kworker/0:4-185 [000] d... 24.918703: console: [ 24.918700] usb 1-3: new high-speed USB device number 4 using ehci-pci
kworker/0:4-185 [000] d... 25.228308: console: [ 25.228306] usb 1-3: New USB device found, idVendor=5986, idProduct=02d5--- include/trace/events/printk.h | 8 ++++++++ 1 file changed, 8 insertions(+)
include/trace/events/printk.h +8 -0
@@ -16,6 +16,14 @@ TRACE_EVENT(console, ),TP_fast_assign ( +/* +* Each trace entry is printed in a new line. +* If the msg finishes with '\n', cut it off +* to avoid blank lines in the trace. +*/ + if ((len > 0) && (text[len-1] == '\n')) + len -= 1; +memcpy (__get_str (msg), text, len);__get_str (msg)[len] =0 ; ),
Signature · 1 line
2.7.4
Quoted 6 lines · Daniel Bristot de Oliveira
This patch series fixes a problem on printk:console tracepoint that prints a blank line in the trace output after each printk message that finishes with '\n'.
It also does some cleanup on
__get_str()usage, that was found while fixing the printk:console tracepoint.
This is just a gentle ping.
Thanks in advance!
-- Daniel