[for-next][PATCH 02/17] tracing/probes: Fix basic print type functions
From: Namhyung Kim The print format of s32 type was "ld" and it's casted to "long". So it turned out to print 4294967295 for "-1" on 64-bit systems. Not sure whether it worked well on 32-bit systems. Anyway, it doesn't need to have cast argument at all since it already casted using type pointer - just get rid of it. Thanks to Oleg for pointing that out. And print 0x prefix for unsigned type as it shows hex numbers. Suggested-by: Oleg Nesterov Acked-by: Oleg Nesterov Acked-by: Masami Hiramatsu Cc: Srikar Dronamraju Cc: zhangwei(Jovi) Cc: Arnaldo Carvalho de Melo Signed-off-by: Namhyung Kim --- kernel/trace/trace_probe.c | 22 +++--- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 412e959..430505b 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -40,23 +40,23 @@ const char *reserved_field_names[] = { #define PRINT_TYPE_FMT_NAME(type) print_type_format_##type /* Printing in basic type function template */ -#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt, cast) \ +#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt) \ static __kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \ const char *name, \ - void *data, void *ent)\ + void *data, void *ent) \ { \ - return trace_seq_printf(s, " %s=" fmt, name, (cast)*(type *)data);\ + return trace_seq_printf(s, " %s=" fmt, name, *(type *)data);\ } \ static const char PRINT_TYPE_FMT_NAME(type)[] = fmt; -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, "%x", unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%x", unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%lx", unsigned long) -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%llx", unsigned long long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, "%d", int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, "%d", int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%ld", long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%lld", long long) +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , "0x%x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "0x%x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "0x%x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "0x%Lx") +DEFINE_BASIC_PRINT_TYPE_FUNC(s8, "%d") +DEFINE_BASIC_PRINT_TYPE_FUNC(s16, "%d") +DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%d") +DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%Ld") static inline void *get_rloc_data(u32 *dl) { -- 1.8.4.3 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[for-next][PATCH 02/17] tracing/probes: Fix basic print type functions
From: Namhyung Kim namhyung@lge.com The print format of s32 type was ld and it's casted to long. So it turned out to print 4294967295 for -1 on 64-bit systems. Not sure whether it worked well on 32-bit systems. Anyway, it doesn't need to have cast argument at all since it already casted using type pointer - just get rid of it. Thanks to Oleg for pointing that out. And print 0x prefix for unsigned type as it shows hex numbers. Suggested-by: Oleg Nesterov o...@redhat.com Acked-by: Oleg Nesterov o...@redhat.com Acked-by: Masami Hiramatsu masami.hiramatsu...@hitachi.com Cc: Srikar Dronamraju sri...@linux.vnet.ibm.com Cc: zhangwei(Jovi) jovi.zhang...@huawei.com Cc: Arnaldo Carvalho de Melo a...@ghostprotocols.net Signed-off-by: Namhyung Kim namhy...@kernel.org --- kernel/trace/trace_probe.c | 22 +++--- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 412e959..430505b 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -40,23 +40,23 @@ const char *reserved_field_names[] = { #define PRINT_TYPE_FMT_NAME(type) print_type_format_##type /* Printing in basic type function template */ -#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt, cast) \ +#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt) \ static __kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \ const char *name, \ - void *data, void *ent)\ + void *data, void *ent) \ { \ - return trace_seq_printf(s, %s= fmt, name, (cast)*(type *)data);\ + return trace_seq_printf(s, %s= fmt, name, *(type *)data);\ } \ static const char PRINT_TYPE_FMT_NAME(type)[] = fmt; -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, %lx, unsigned long) -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, %llx, unsigned long long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, %ld, long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, %lld, long long) +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , 0x%x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, 0x%x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, 0x%x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, 0x%Lx) +DEFINE_BASIC_PRINT_TYPE_FUNC(s8, %d) +DEFINE_BASIC_PRINT_TYPE_FUNC(s16, %d) +DEFINE_BASIC_PRINT_TYPE_FUNC(s32, %d) +DEFINE_BASIC_PRINT_TYPE_FUNC(s64, %Ld) static inline void *get_rloc_data(u32 *dl) { -- 1.8.4.3 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 02/17] tracing/probes: Fix basic print type functions
From: Namhyung Kim The print format of s32 type was "ld" and it's casted to "long". So it turned out to print 4294967295 for "-1" on 64-bit systems. Not sure whether it worked well on 32-bit systems. Anyway, it doesn't need to have cast argument at all since it already casted using type pointer - just get rid of it. Thanks to Oleg for pointing that out. And print 0x prefix for unsigned type as it shows hex numbers. Suggested-by: Oleg Nesterov Acked-by: Masami Hiramatsu Cc: Srikar Dronamraju Cc: Oleg Nesterov Cc: zhangwei(Jovi) Cc: Arnaldo Carvalho de Melo Signed-off-by: Namhyung Kim --- kernel/trace/trace_probe.c | 22 +++--- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 412e959709b4..430505b08a6f 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -40,23 +40,23 @@ const char *reserved_field_names[] = { #define PRINT_TYPE_FMT_NAME(type) print_type_format_##type /* Printing in basic type function template */ -#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt, cast) \ +#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt) \ static __kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \ const char *name, \ - void *data, void *ent)\ + void *data, void *ent) \ { \ - return trace_seq_printf(s, " %s=" fmt, name, (cast)*(type *)data);\ + return trace_seq_printf(s, " %s=" fmt, name, *(type *)data);\ } \ static const char PRINT_TYPE_FMT_NAME(type)[] = fmt; -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, "%x", unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%x", unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%lx", unsigned long) -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%llx", unsigned long long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, "%d", int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, "%d", int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%ld", long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%lld", long long) +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , "0x%x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "0x%x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "0x%x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "0x%Lx") +DEFINE_BASIC_PRINT_TYPE_FUNC(s8, "%d") +DEFINE_BASIC_PRINT_TYPE_FUNC(s16, "%d") +DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%d") +DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%Ld") static inline void *get_rloc_data(u32 *dl) { -- 1.7.11.7 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 02/17] tracing/probes: Fix basic print type functions
From: Namhyung Kim namhyung@lge.com The print format of s32 type was ld and it's casted to long. So it turned out to print 4294967295 for -1 on 64-bit systems. Not sure whether it worked well on 32-bit systems. Anyway, it doesn't need to have cast argument at all since it already casted using type pointer - just get rid of it. Thanks to Oleg for pointing that out. And print 0x prefix for unsigned type as it shows hex numbers. Suggested-by: Oleg Nesterov o...@redhat.com Acked-by: Masami Hiramatsu masami.hiramatsu...@hitachi.com Cc: Srikar Dronamraju sri...@linux.vnet.ibm.com Cc: Oleg Nesterov o...@redhat.com Cc: zhangwei(Jovi) jovi.zhang...@huawei.com Cc: Arnaldo Carvalho de Melo a...@ghostprotocols.net Signed-off-by: Namhyung Kim namhy...@kernel.org --- kernel/trace/trace_probe.c | 22 +++--- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 412e959709b4..430505b08a6f 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -40,23 +40,23 @@ const char *reserved_field_names[] = { #define PRINT_TYPE_FMT_NAME(type) print_type_format_##type /* Printing in basic type function template */ -#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt, cast) \ +#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt) \ static __kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \ const char *name, \ - void *data, void *ent)\ + void *data, void *ent) \ { \ - return trace_seq_printf(s, %s= fmt, name, (cast)*(type *)data);\ + return trace_seq_printf(s, %s= fmt, name, *(type *)data);\ } \ static const char PRINT_TYPE_FMT_NAME(type)[] = fmt; -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, %lx, unsigned long) -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, %llx, unsigned long long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, %ld, long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, %lld, long long) +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , 0x%x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, 0x%x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, 0x%x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, 0x%Lx) +DEFINE_BASIC_PRINT_TYPE_FUNC(s8, %d) +DEFINE_BASIC_PRINT_TYPE_FUNC(s16, %d) +DEFINE_BASIC_PRINT_TYPE_FUNC(s32, %d) +DEFINE_BASIC_PRINT_TYPE_FUNC(s64, %Ld) static inline void *get_rloc_data(u32 *dl) { -- 1.7.11.7 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 02/17] tracing/probes: Fix basic print type functions
From: Namhyung Kim The print format of s32 type was "ld" and it's casted to "long". So it turned out to print 4294967295 for "-1" on 64-bit systems. Not sure whether it worked well on 32-bit systems. Anyway, it doesn't need to have cast argument at all since it already casted using type pointer - just get rid of it. Thanks to Oleg for pointing that out. And print 0x prefix for unsigned type as it shows hex numbers. Suggested-by: Oleg Nesterov Acked-by: Masami Hiramatsu Cc: Srikar Dronamraju Cc: Oleg Nesterov Cc: zhangwei(Jovi) Cc: Arnaldo Carvalho de Melo Signed-off-by: Namhyung Kim --- kernel/trace/trace_probe.c | 22 +++--- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 412e959709b4..430505b08a6f 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -40,23 +40,23 @@ const char *reserved_field_names[] = { #define PRINT_TYPE_FMT_NAME(type) print_type_format_##type /* Printing in basic type function template */ -#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt, cast) \ +#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt) \ static __kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \ const char *name, \ - void *data, void *ent)\ + void *data, void *ent) \ { \ - return trace_seq_printf(s, " %s=" fmt, name, (cast)*(type *)data);\ + return trace_seq_printf(s, " %s=" fmt, name, *(type *)data);\ } \ static const char PRINT_TYPE_FMT_NAME(type)[] = fmt; -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, "%x", unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%x", unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%lx", unsigned long) -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%llx", unsigned long long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, "%d", int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, "%d", int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%ld", long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%lld", long long) +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , "0x%x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "0x%x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "0x%x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "0x%Lx") +DEFINE_BASIC_PRINT_TYPE_FUNC(s8, "%d") +DEFINE_BASIC_PRINT_TYPE_FUNC(s16, "%d") +DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%d") +DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%Ld") static inline void *get_rloc_data(u32 *dl) { -- 1.7.11.7 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 02/17] tracing/probes: Fix basic print type functions
From: Namhyung Kim namhyung@lge.com The print format of s32 type was ld and it's casted to long. So it turned out to print 4294967295 for -1 on 64-bit systems. Not sure whether it worked well on 32-bit systems. Anyway, it doesn't need to have cast argument at all since it already casted using type pointer - just get rid of it. Thanks to Oleg for pointing that out. And print 0x prefix for unsigned type as it shows hex numbers. Suggested-by: Oleg Nesterov o...@redhat.com Acked-by: Masami Hiramatsu masami.hiramatsu...@hitachi.com Cc: Srikar Dronamraju sri...@linux.vnet.ibm.com Cc: Oleg Nesterov o...@redhat.com Cc: zhangwei(Jovi) jovi.zhang...@huawei.com Cc: Arnaldo Carvalho de Melo a...@ghostprotocols.net Signed-off-by: Namhyung Kim namhy...@kernel.org --- kernel/trace/trace_probe.c | 22 +++--- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 412e959709b4..430505b08a6f 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -40,23 +40,23 @@ const char *reserved_field_names[] = { #define PRINT_TYPE_FMT_NAME(type) print_type_format_##type /* Printing in basic type function template */ -#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt, cast) \ +#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt) \ static __kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \ const char *name, \ - void *data, void *ent)\ + void *data, void *ent) \ { \ - return trace_seq_printf(s, %s= fmt, name, (cast)*(type *)data);\ + return trace_seq_printf(s, %s= fmt, name, *(type *)data);\ } \ static const char PRINT_TYPE_FMT_NAME(type)[] = fmt; -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, %lx, unsigned long) -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, %llx, unsigned long long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, %ld, long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, %lld, long long) +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , 0x%x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, 0x%x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, 0x%x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, 0x%Lx) +DEFINE_BASIC_PRINT_TYPE_FUNC(s8, %d) +DEFINE_BASIC_PRINT_TYPE_FUNC(s16, %d) +DEFINE_BASIC_PRINT_TYPE_FUNC(s32, %d) +DEFINE_BASIC_PRINT_TYPE_FUNC(s64, %Ld) static inline void *get_rloc_data(u32 *dl) { -- 1.7.11.7 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 02/17] tracing/probes: Fix basic print type functions
Hi Masami, On Thu, 28 Nov 2013 13:16:09 +0900, Masami Hiramatsu wrote: > (2013/11/27 23:39), Namhyung Kim wrote: >> Hi Masami, >> >> 2013-11-27 (수), 20:57 +0900, Masami Hiramatsu: >>> (2013/11/27 15:19), Namhyung Kim wrote: -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, "%x", unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%x", unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%lx", unsigned long) -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%llx", unsigned long long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, "%d", int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, "%d", int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%ld", long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%lld", long long) +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , "%#x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%#x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%#x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%#Lx") >>> >>> As I said I'd like to ask you to change it in %x. >>> >>> I just checked in Fedora18, but %#x is not supported on this glibc-2.17. >>> Since this format is exported via debugfs (format file), I think %x is >>> better. >> >> Hmm.. but in most cases it's used for printf() not scanf(), right? In >> that case adding 0x prefix will help human readers a lot. >> >> How about mandating the prefix with "0x%x"? This way it can be used >> both for printf() and scanf() IMHO. > > Agreed, you can just use "0x%x" in above case instead of "%#x". :) Okay, will change. > For other traceevents, from the human readability point of view, > I think we should move all the event format should use 0x%x instead > of %x, because sometimes it confuse users (e.g. 100 => 0x64, without 0x, > it is just "64"). Agreed. I'll take a look at them later. Thanks, Namhyung -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: Re: [PATCH 02/17] tracing/probes: Fix basic print type functions
(2013/11/27 23:39), Namhyung Kim wrote: > Hi Masami, > > 2013-11-27 (수), 20:57 +0900, Masami Hiramatsu: >> (2013/11/27 15:19), Namhyung Kim wrote: >>> >>> -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, "%x", unsigned int) >>> -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%x", unsigned int) >>> -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%lx", unsigned long) >>> -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%llx", unsigned long long) >>> -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, "%d", int) >>> -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, "%d", int) >>> -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%ld", long) >>> -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%lld", long long) >>> +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , "%#x") >>> +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%#x") >>> +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%#x") >>> +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%#Lx") >> >> As I said I'd like to ask you to change it in %x. >> >> I just checked in Fedora18, but %#x is not supported on this glibc-2.17. >> Since this format is exported via debugfs (format file), I think %x is >> better. > > Hmm.. but in most cases it's used for printf() not scanf(), right? In > that case adding 0x prefix will help human readers a lot. > > How about mandating the prefix with "0x%x"? This way it can be used > both for printf() and scanf() IMHO. Agreed, you can just use "0x%x" in above case instead of "%#x". :) For other traceevents, from the human readability point of view, I think we should move all the event format should use 0x%x instead of %x, because sometimes it confuse users (e.g. 100 => 0x64, without 0x, it is just "64"). Thank you, -- Masami HIRAMATSU IT Management Research Dept. Linux Technology Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu...@hitachi.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 02/17] tracing/probes: Fix basic print type functions
Hi Masami, 2013-11-27 (수), 20:57 +0900, Masami Hiramatsu: > (2013/11/27 15:19), Namhyung Kim wrote: > > > > -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, "%x", unsigned int) > > -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%x", unsigned int) > > -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%lx", unsigned long) > > -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%llx", unsigned long long) > > -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, "%d", int) > > -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, "%d", int) > > -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%ld", long) > > -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%lld", long long) > > +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , "%#x") > > +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%#x") > > +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%#x") > > +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%#Lx") > > As I said I'd like to ask you to change it in %x. > > I just checked in Fedora18, but %#x is not supported on this glibc-2.17. > Since this format is exported via debugfs (format file), I think %x is > better. Hmm.. but in most cases it's used for printf() not scanf(), right? In that case adding 0x prefix will help human readers a lot. How about mandating the prefix with "0x%x"? This way it can be used both for printf() and scanf() IMHO. Thanks, Namhyung -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 02/17] tracing/probes: Fix basic print type functions
(2013/11/27 15:19), Namhyung Kim wrote: > > -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, "%x", unsigned int) > -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%x", unsigned int) > -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%lx", unsigned long) > -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%llx", unsigned long long) > -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, "%d", int) > -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, "%d", int) > -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%ld", long) > -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%lld", long long) > +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , "%#x") > +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%#x") > +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%#x") > +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%#Lx") As I said I'd like to ask you to change it in %x. I just checked in Fedora18, but %#x is not supported on this glibc-2.17. Since this format is exported via debugfs (format file), I think %x is better. Thank you, -- Masami HIRAMATSU IT Management Research Dept. Linux Technology Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu...@hitachi.com -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 02/17] tracing/probes: Fix basic print type functions
(2013/11/27 15:19), Namhyung Kim wrote: -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, %lx, unsigned long) -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, %llx, unsigned long long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, %ld, long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, %lld, long long) +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, %#Lx) As I said I'd like to ask you to change it in %x. I just checked in Fedora18, but %#x is not supported on this glibc-2.17. Since this format is exported via debugfs (format file), I think %x is better. Thank you, -- Masami HIRAMATSU IT Management Research Dept. Linux Technology Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu...@hitachi.com -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 02/17] tracing/probes: Fix basic print type functions
Hi Masami, 2013-11-27 (수), 20:57 +0900, Masami Hiramatsu: (2013/11/27 15:19), Namhyung Kim wrote: -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, %lx, unsigned long) -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, %llx, unsigned long long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, %ld, long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, %lld, long long) +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, %#Lx) As I said I'd like to ask you to change it in %x. I just checked in Fedora18, but %#x is not supported on this glibc-2.17. Since this format is exported via debugfs (format file), I think %x is better. Hmm.. but in most cases it's used for printf() not scanf(), right? In that case adding 0x prefix will help human readers a lot. How about mandating the prefix with 0x%x? This way it can be used both for printf() and scanf() IMHO. Thanks, Namhyung -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: Re: [PATCH 02/17] tracing/probes: Fix basic print type functions
(2013/11/27 23:39), Namhyung Kim wrote: Hi Masami, 2013-11-27 (수), 20:57 +0900, Masami Hiramatsu: (2013/11/27 15:19), Namhyung Kim wrote: -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, %lx, unsigned long) -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, %llx, unsigned long long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, %ld, long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, %lld, long long) +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, %#Lx) As I said I'd like to ask you to change it in %x. I just checked in Fedora18, but %#x is not supported on this glibc-2.17. Since this format is exported via debugfs (format file), I think %x is better. Hmm.. but in most cases it's used for printf() not scanf(), right? In that case adding 0x prefix will help human readers a lot. How about mandating the prefix with 0x%x? This way it can be used both for printf() and scanf() IMHO. Agreed, you can just use 0x%x in above case instead of %#x. :) For other traceevents, from the human readability point of view, I think we should move all the event format should use 0x%x instead of %x, because sometimes it confuse users (e.g. 100 = 0x64, without 0x, it is just 64). Thank you, -- Masami HIRAMATSU IT Management Research Dept. Linux Technology Center Hitachi, Ltd., Yokohama Research Laboratory E-mail: masami.hiramatsu...@hitachi.com -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 02/17] tracing/probes: Fix basic print type functions
Hi Masami, On Thu, 28 Nov 2013 13:16:09 +0900, Masami Hiramatsu wrote: (2013/11/27 23:39), Namhyung Kim wrote: Hi Masami, 2013-11-27 (수), 20:57 +0900, Masami Hiramatsu: (2013/11/27 15:19), Namhyung Kim wrote: -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, %lx, unsigned long) -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, %llx, unsigned long long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, %ld, long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, %lld, long long) +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, %#Lx) As I said I'd like to ask you to change it in %x. I just checked in Fedora18, but %#x is not supported on this glibc-2.17. Since this format is exported via debugfs (format file), I think %x is better. Hmm.. but in most cases it's used for printf() not scanf(), right? In that case adding 0x prefix will help human readers a lot. How about mandating the prefix with 0x%x? This way it can be used both for printf() and scanf() IMHO. Agreed, you can just use 0x%x in above case instead of %#x. :) Okay, will change. For other traceevents, from the human readability point of view, I think we should move all the event format should use 0x%x instead of %x, because sometimes it confuse users (e.g. 100 = 0x64, without 0x, it is just 64). Agreed. I'll take a look at them later. Thanks, Namhyung -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 02/17] tracing/probes: Fix basic print type functions
From: Namhyung Kim The print format of s32 type was "ld" and it's casted to "long". So it turned out to print 4294967295 for "-1" on 64-bit systems. Not sure whether it worked well on 32-bit systems. Anyway, it doesn't need to have cast argument at all since it already casted using type pointer - just get rid of it. Thanks to Oleg for pointing that out. And print 0x prefix for unsigned type as it shows hex numbers. Suggested-by: Oleg Nesterov Acked-by: Masami Hiramatsu Cc: Srikar Dronamraju Cc: Oleg Nesterov Cc: zhangwei(Jovi) Cc: Arnaldo Carvalho de Melo Signed-off-by: Namhyung Kim --- kernel/trace/trace_probe.c | 22 +++--- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 412e959709b4..e1b975fb5d7c 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -40,23 +40,23 @@ const char *reserved_field_names[] = { #define PRINT_TYPE_FMT_NAME(type) print_type_format_##type /* Printing in basic type function template */ -#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt, cast) \ +#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt) \ static __kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \ const char *name, \ - void *data, void *ent)\ + void *data, void *ent) \ { \ - return trace_seq_printf(s, " %s=" fmt, name, (cast)*(type *)data);\ + return trace_seq_printf(s, " %s=" fmt, name, *(type *)data);\ } \ static const char PRINT_TYPE_FMT_NAME(type)[] = fmt; -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, "%x", unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%x", unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%lx", unsigned long) -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%llx", unsigned long long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, "%d", int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, "%d", int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%ld", long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%lld", long long) +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , "%#x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "%#x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, "%#x") +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, "%#Lx") +DEFINE_BASIC_PRINT_TYPE_FUNC(s8, "%d") +DEFINE_BASIC_PRINT_TYPE_FUNC(s16, "%d") +DEFINE_BASIC_PRINT_TYPE_FUNC(s32, "%d") +DEFINE_BASIC_PRINT_TYPE_FUNC(s64, "%Ld") static inline void *get_rloc_data(u32 *dl) { -- 1.7.11.7 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 02/17] tracing/probes: Fix basic print type functions
From: Namhyung Kim namhyung@lge.com The print format of s32 type was ld and it's casted to long. So it turned out to print 4294967295 for -1 on 64-bit systems. Not sure whether it worked well on 32-bit systems. Anyway, it doesn't need to have cast argument at all since it already casted using type pointer - just get rid of it. Thanks to Oleg for pointing that out. And print 0x prefix for unsigned type as it shows hex numbers. Suggested-by: Oleg Nesterov o...@redhat.com Acked-by: Masami Hiramatsu masami.hiramatsu...@hitachi.com Cc: Srikar Dronamraju sri...@linux.vnet.ibm.com Cc: Oleg Nesterov o...@redhat.com Cc: zhangwei(Jovi) jovi.zhang...@huawei.com Cc: Arnaldo Carvalho de Melo a...@ghostprotocols.net Signed-off-by: Namhyung Kim namhy...@kernel.org --- kernel/trace/trace_probe.c | 22 +++--- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c index 412e959709b4..e1b975fb5d7c 100644 --- a/kernel/trace/trace_probe.c +++ b/kernel/trace/trace_probe.c @@ -40,23 +40,23 @@ const char *reserved_field_names[] = { #define PRINT_TYPE_FMT_NAME(type) print_type_format_##type /* Printing in basic type function template */ -#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt, cast) \ +#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt) \ static __kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \ const char *name, \ - void *data, void *ent)\ + void *data, void *ent) \ { \ - return trace_seq_printf(s, %s= fmt, name, (cast)*(type *)data);\ + return trace_seq_printf(s, %s= fmt, name, *(type *)data);\ } \ static const char PRINT_TYPE_FMT_NAME(type)[] = fmt; -DEFINE_BASIC_PRINT_TYPE_FUNC(u8, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u16, %x, unsigned int) -DEFINE_BASIC_PRINT_TYPE_FUNC(u32, %lx, unsigned long) -DEFINE_BASIC_PRINT_TYPE_FUNC(u64, %llx, unsigned long long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s8, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s16, %d, int) -DEFINE_BASIC_PRINT_TYPE_FUNC(s32, %ld, long) -DEFINE_BASIC_PRINT_TYPE_FUNC(s64, %lld, long long) +DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u16, %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u32, %#x) +DEFINE_BASIC_PRINT_TYPE_FUNC(u64, %#Lx) +DEFINE_BASIC_PRINT_TYPE_FUNC(s8, %d) +DEFINE_BASIC_PRINT_TYPE_FUNC(s16, %d) +DEFINE_BASIC_PRINT_TYPE_FUNC(s32, %d) +DEFINE_BASIC_PRINT_TYPE_FUNC(s64, %Ld) static inline void *get_rloc_data(u32 *dl) { -- 1.7.11.7 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/