diff options
| author | liubo <liubo2009@cn.fujitsu.com> | 2011-04-18 21:35:28 -0400 |
|---|---|---|
| committer | Steven Rostedt <rostedt@goodmis.org> | 2011-05-25 22:13:44 -0400 |
| commit | 2fc1b6f0d0a719e1e2a30bf076a3a799feaf6af2 (patch) | |
| tree | 3101c47095ef438b6657b7e0dbb57b2f7188666f | |
| parent | 3b6cfdb1714a33ae4d2ca9fbc818a42cf7adee69 (diff) | |
tracing: Add __print_symbolic_u64 to avoid warnings on 32bit machine
Filesystem, like Btrfs, has some "ULL" macros, and when these macros are passed
to tracepoints'__print_symbolic(), there will be 64->32 truncate WARNINGS during
compiling on 32bit box.
Signed-off-by: Liu Bo <liubo2009@cn.fujitsu.com>
Link: http://lkml.kernel.org/r/4DACE6E0.7000507@cn.fujitsu.com
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
| -rw-r--r-- | include/linux/ftrace_event.h | 12 | ||||
| -rw-r--r-- | include/trace/ftrace.h | 13 | ||||
| -rw-r--r-- | kernel/trace/trace_output.c | 27 |
3 files changed, 52 insertions, 0 deletions
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index b5a550a39a70..59d3ef100eb9 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
| @@ -16,6 +16,11 @@ struct trace_print_flags { | |||
| 16 | const char *name; | 16 | const char *name; |
| 17 | }; | 17 | }; |
| 18 | 18 | ||
| 19 | struct trace_print_flags_u64 { | ||
| 20 | unsigned long long mask; | ||
| 21 | const char *name; | ||
| 22 | }; | ||
| 23 | |||
| 19 | const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim, | 24 | const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim, |
| 20 | unsigned long flags, | 25 | unsigned long flags, |
| 21 | const struct trace_print_flags *flag_array); | 26 | const struct trace_print_flags *flag_array); |
| @@ -23,6 +28,13 @@ const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim, | |||
| 23 | const char *ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val, | 28 | const char *ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val, |
| 24 | const struct trace_print_flags *symbol_array); | 29 | const struct trace_print_flags *symbol_array); |
| 25 | 30 | ||
| 31 | #if BITS_PER_LONG == 32 | ||
| 32 | const char *ftrace_print_symbols_seq_u64(struct trace_seq *p, | ||
| 33 | unsigned long long val, | ||
| 34 | const struct trace_print_flags_u64 | ||
| 35 | *symbol_array); | ||
| 36 | #endif | ||
| 37 | |||
| 26 | const char *ftrace_print_hex_seq(struct trace_seq *p, | 38 | const char *ftrace_print_hex_seq(struct trace_seq *p, |
| 27 | const unsigned char *buf, int len); | 39 | const unsigned char *buf, int len); |
| 28 | 40 | ||
diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h index 3e68366d485a..533c49f48047 100644 --- a/include/trace/ftrace.h +++ b/include/trace/ftrace.h | |||
| @@ -205,6 +205,19 @@ | |||
| 205 | ftrace_print_symbols_seq(p, value, symbols); \ | 205 | ftrace_print_symbols_seq(p, value, symbols); \ |
| 206 | }) | 206 | }) |
| 207 | 207 | ||
| 208 | #undef __print_symbolic_u64 | ||
| 209 | #if BITS_PER_LONG == 32 | ||
| 210 | #define __print_symbolic_u64(value, symbol_array...) \ | ||
| 211 | ({ \ | ||
| 212 | static const struct trace_print_flags_u64 symbols[] = \ | ||
| 213 | { symbol_array, { -1, NULL } }; \ | ||
| 214 | ftrace_print_symbols_seq_u64(p, value, symbols); \ | ||
| 215 | }) | ||
| 216 | #else | ||
| 217 | #define __print_symbolic_u64(value, symbol_array...) \ | ||
| 218 | __print_symbolic(value, symbol_array) | ||
| 219 | #endif | ||
| 220 | |||
| 208 | #undef __print_hex | 221 | #undef __print_hex |
| 209 | #define __print_hex(buf, buf_len) ftrace_print_hex_seq(p, buf, buf_len) | 222 | #define __print_hex(buf, buf_len) ftrace_print_hex_seq(p, buf, buf_len) |
| 210 | 223 | ||
diff --git a/kernel/trace/trace_output.c b/kernel/trace/trace_output.c index cf535ccedc86..e37de492a9e1 100644 --- a/kernel/trace/trace_output.c +++ b/kernel/trace/trace_output.c | |||
| @@ -353,6 +353,33 @@ ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val, | |||
| 353 | } | 353 | } |
| 354 | EXPORT_SYMBOL(ftrace_print_symbols_seq); | 354 | EXPORT_SYMBOL(ftrace_print_symbols_seq); |
| 355 | 355 | ||
| 356 | #if BITS_PER_LONG == 32 | ||
| 357 | const char * | ||
| 358 | ftrace_print_symbols_seq_u64(struct trace_seq *p, unsigned long long val, | ||
| 359 | const struct trace_print_flags_u64 *symbol_array) | ||
| 360 | { | ||
| 361 | int i; | ||
| 362 | const char *ret = p->buffer + p->len; | ||
| 363 | |||
| 364 | for (i = 0; symbol_array[i].name; i++) { | ||
| 365 | |||
| 366 | if (val != symbol_array[i].mask) | ||
| 367 | continue; | ||
| 368 | |||
| 369 | trace_seq_puts(p, symbol_array[i].name); | ||
| 370 | break; | ||
| 371 | } | ||
| 372 | |||
| 373 | if (!p->len) | ||
| 374 | trace_seq_printf(p, "0x%llx", val); | ||
| 375 | |||
| 376 | trace_seq_putc(p, 0); | ||
| 377 | |||
| 378 | return ret; | ||
| 379 | } | ||
| 380 | EXPORT_SYMBOL(ftrace_print_symbols_seq_u64); | ||
| 381 | #endif | ||
| 382 | |||
| 356 | const char * | 383 | const char * |
| 357 | ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int buf_len) | 384 | ftrace_print_hex_seq(struct trace_seq *p, const unsigned char *buf, int buf_len) |
| 358 | { | 385 | { |
