From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>,
Oleg Nesterov <oleg@redhat.com>,
Srikar Dronamraju <srikar@linux.vnet.ibm.com>,
Hyeoncheol Lee <cheol.lee@lge.com>,
"zhangwei(Jovi)" <jovi.zhangwei@huawei.com>,
Arnaldo Carvalho de Melo <acme@ghostprotocols.net>,
Hemant Kumar <hkshaw@linux.vnet.ibm.com>,
LKML <linux-kernel@vger.kernel.org>,
Namhyung Kim <namhyung.kim@lge.com>
Subject: Re: [PATCH 07/17] tracing/probes: Move fetch function helpers to trace_probe.h
Date: Tue, 10 Dec 2013 00:12:24 +0900 [thread overview]
Message-ID: <52A5DDD8.4030007@hitachi.com> (raw)
In-Reply-To: <1386570005-3368-8-git-send-email-namhyung@kernel.org>
(2013/12/09 15:19), Namhyung Kim wrote:
> From: Namhyung Kim <namhyung.kim@lge.com>
>
> Move fetch function helper macros/functions to the header file and
> make them external. This is preparation of supporting uprobe fetch
> table in next patch.
>
> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
> Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
> Cc: Oleg Nesterov <oleg@redhat.com>
> Cc: zhangwei(Jovi) <jovi.zhangwei@huawei.com>
> Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
This looks OK for me.
Acked-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Thanks!
> ---
> kernel/trace/trace_probe.c | 74 ++++++++--------------------------------------
> kernel/trace/trace_probe.h | 64 +++++++++++++++++++++++++++++++++++++++
> 2 files changed, 77 insertions(+), 61 deletions(-)
>
> diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
> index d8347b01ce89..c26bc9eaa2ac 100644
> --- a/kernel/trace/trace_probe.c
> +++ b/kernel/trace/trace_probe.c
> @@ -35,19 +35,15 @@ const char *reserved_field_names[] = {
> FIELD_STRING_FUNC,
> };
>
> -/* Printing function type */
> -#define PRINT_TYPE_FUNC_NAME(type) print_type_##type
> -#define PRINT_TYPE_FMT_NAME(type) print_type_format_##type
> -
> /* Printing in basic type function template */
> #define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt) \
> -static __kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \
> +__kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \
> const char *name, \
> void *data, void *ent) \
> { \
> return trace_seq_printf(s, " %s=" fmt, name, *(type *)data); \
> } \
> -static const char PRINT_TYPE_FMT_NAME(type)[] = fmt;
> +const char PRINT_TYPE_FMT_NAME(type)[] = fmt;
>
> DEFINE_BASIC_PRINT_TYPE_FUNC(u8 , "0x%x")
> DEFINE_BASIC_PRINT_TYPE_FUNC(u16, "0x%x")
> @@ -58,23 +54,12 @@ 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)
> -{
> - return (u8 *)dl + get_rloc_offs(*dl);
> -}
> -
> -/* For data_loc conversion */
> -static inline void *get_loc_data(u32 *dl, void *ent)
> -{
> - return (u8 *)ent + get_rloc_offs(*dl);
> -}
> -
> /* For defining macros, define string/string_size types */
> typedef u32 string;
> typedef u32 string_size;
>
> /* Print type function for string type */
> -static __kprobes int PRINT_TYPE_FUNC_NAME(string)(struct trace_seq *s,
> +__kprobes int PRINT_TYPE_FUNC_NAME(string)(struct trace_seq *s,
> const char *name,
> void *data, void *ent)
> {
> @@ -87,7 +72,7 @@ static __kprobes int PRINT_TYPE_FUNC_NAME(string)(struct trace_seq *s,
> (const char *)get_loc_data(data, ent));
> }
>
> -static const char PRINT_TYPE_FMT_NAME(string)[] = "\\\"%s\\\"";
> +const char PRINT_TYPE_FMT_NAME(string)[] = "\\\"%s\\\"";
>
> #define FETCH_FUNC_NAME(method, type) fetch_##method##_##type
> /*
> @@ -111,7 +96,7 @@ DEFINE_FETCH_##method(u64)
>
> /* Data fetch function templates */
> #define DEFINE_FETCH_reg(type) \
> -static __kprobes void FETCH_FUNC_NAME(reg, type)(struct pt_regs *regs, \
> +__kprobes void FETCH_FUNC_NAME(reg, type)(struct pt_regs *regs, \
> void *offset, void *dest) \
> { \
> *(type *)dest = (type)regs_get_register(regs, \
> @@ -123,7 +108,7 @@ DEFINE_BASIC_FETCH_FUNCS(reg)
> #define fetch_reg_string_size NULL
>
> #define DEFINE_FETCH_stack(type) \
> -static __kprobes void FETCH_FUNC_NAME(stack, type)(struct pt_regs *regs,\
> +__kprobes void FETCH_FUNC_NAME(stack, type)(struct pt_regs *regs, \
> void *offset, void *dest) \
> { \
> *(type *)dest = (type)regs_get_kernel_stack_nth(regs, \
> @@ -135,7 +120,7 @@ DEFINE_BASIC_FETCH_FUNCS(stack)
> #define fetch_stack_string_size NULL
>
> #define DEFINE_FETCH_retval(type) \
> -static __kprobes void FETCH_FUNC_NAME(retval, type)(struct pt_regs *regs,\
> +__kprobes void FETCH_FUNC_NAME(retval, type)(struct pt_regs *regs, \
> void *dummy, void *dest) \
> { \
> *(type *)dest = (type)regs_return_value(regs); \
> @@ -146,7 +131,7 @@ DEFINE_BASIC_FETCH_FUNCS(retval)
> #define fetch_retval_string_size NULL
>
> #define DEFINE_FETCH_memory(type) \
> -static __kprobes void FETCH_FUNC_NAME(memory, type)(struct pt_regs *regs,\
> +__kprobes void FETCH_FUNC_NAME(memory, type)(struct pt_regs *regs, \
> void *addr, void *dest) \
> { \
> type retval; \
> @@ -160,7 +145,7 @@ DEFINE_BASIC_FETCH_FUNCS(memory)
> * Fetch a null-terminated string. Caller MUST set *(u32 *)dest with max
> * length and relative data location.
> */
> -static __kprobes void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs,
> +__kprobes void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs,
> void *addr, void *dest)
> {
> long ret;
> @@ -197,7 +182,7 @@ static __kprobes void FETCH_FUNC_NAME(memory, string)(struct pt_regs *regs,
> }
>
> /* Return the length of string -- including null terminal byte */
> -static __kprobes void FETCH_FUNC_NAME(memory, string_size)(struct pt_regs *regs,
> +__kprobes void FETCH_FUNC_NAME(memory, string_size)(struct pt_regs *regs,
> void *addr, void *dest)
> {
> mm_segment_t old_fs;
> @@ -268,7 +253,7 @@ static struct symbol_cache *alloc_symbol_cache(const char *sym, long offset)
> }
>
> #define DEFINE_FETCH_symbol(type) \
> -static __kprobes void FETCH_FUNC_NAME(symbol, type)(struct pt_regs *regs,\
> +__kprobes void FETCH_FUNC_NAME(symbol, type)(struct pt_regs *regs, \
> void *data, void *dest) \
> { \
> struct symbol_cache *sc = data; \
> @@ -288,7 +273,7 @@ struct deref_fetch_param {
> };
>
> #define DEFINE_FETCH_deref(type) \
> -static __kprobes void FETCH_FUNC_NAME(deref, type)(struct pt_regs *regs,\
> +__kprobes void FETCH_FUNC_NAME(deref, type)(struct pt_regs *regs, \
> void *data, void *dest) \
> { \
> struct deref_fetch_param *dprm = data; \
> @@ -329,7 +314,7 @@ struct bitfield_fetch_param {
> };
>
> #define DEFINE_FETCH_bitfield(type) \
> -static __kprobes void FETCH_FUNC_NAME(bitfield, type)(struct pt_regs *regs,\
> +__kprobes void FETCH_FUNC_NAME(bitfield, type)(struct pt_regs *regs, \
> void *data, void *dest) \
> { \
> struct bitfield_fetch_param *bprm = data; \
> @@ -374,39 +359,6 @@ free_bitfield_fetch_param(struct bitfield_fetch_param *data)
> kfree(data);
> }
>
> -/* Default (unsigned long) fetch type */
> -#define __DEFAULT_FETCH_TYPE(t) u##t
> -#define _DEFAULT_FETCH_TYPE(t) __DEFAULT_FETCH_TYPE(t)
> -#define DEFAULT_FETCH_TYPE _DEFAULT_FETCH_TYPE(BITS_PER_LONG)
> -#define DEFAULT_FETCH_TYPE_STR __stringify(DEFAULT_FETCH_TYPE)
> -
> -#define ASSIGN_FETCH_FUNC(method, type) \
> - [FETCH_MTD_##method] = FETCH_FUNC_NAME(method, type)
> -
> -#define __ASSIGN_FETCH_TYPE(_name, ptype, ftype, _size, sign, _fmttype) \
> - {.name = _name, \
> - .size = _size, \
> - .is_signed = sign, \
> - .print = PRINT_TYPE_FUNC_NAME(ptype), \
> - .fmt = PRINT_TYPE_FMT_NAME(ptype), \
> - .fmttype = _fmttype, \
> - .fetch = { \
> -ASSIGN_FETCH_FUNC(reg, ftype), \
> -ASSIGN_FETCH_FUNC(stack, ftype), \
> -ASSIGN_FETCH_FUNC(retval, ftype), \
> -ASSIGN_FETCH_FUNC(memory, ftype), \
> -ASSIGN_FETCH_FUNC(symbol, ftype), \
> -ASSIGN_FETCH_FUNC(deref, ftype), \
> -ASSIGN_FETCH_FUNC(bitfield, ftype), \
> - } \
> - }
> -
> -#define ASSIGN_FETCH_TYPE(ptype, ftype, sign) \
> - __ASSIGN_FETCH_TYPE(#ptype, ptype, ftype, sizeof(ftype), sign, #ptype)
> -
> -#define FETCH_TYPE_STRING 0
> -#define FETCH_TYPE_STRSIZE 1
> -
> /* Fetch type information table */
> static const struct fetch_type fetch_type_table[] = {
> /* Special types */
> diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
> index 2c979cb66367..7c6be146f444 100644
> --- a/kernel/trace/trace_probe.h
> +++ b/kernel/trace/trace_probe.h
> @@ -81,6 +81,17 @@
> */
> #define convert_rloc_to_loc(dl, offs) ((u32)(dl) + (offs))
>
> +static inline void *get_rloc_data(u32 *dl)
> +{
> + return (u8 *)dl + get_rloc_offs(*dl);
> +}
> +
> +/* For data_loc conversion */
> +static inline void *get_loc_data(u32 *dl, void *ent)
> +{
> + return (u8 *)ent + get_rloc_offs(*dl);
> +}
> +
> /* Data fetch function type */
> typedef void (*fetch_func_t)(struct pt_regs *, void *, void *);
> /* Printing function type */
> @@ -115,6 +126,59 @@ struct fetch_param {
> void *data;
> };
>
> +#define PRINT_TYPE_FUNC_NAME(type) print_type_##type
> +#define PRINT_TYPE_FMT_NAME(type) print_type_format_##type
> +
> +/* Printing in basic type function template */
> +#define DECLARE_BASIC_PRINT_TYPE_FUNC(type, fmt) \
> +__kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \
> + const char *name, \
> + void *data, void *ent); \
> +extern const char PRINT_TYPE_FMT_NAME(type)[];
> +
> +DECLARE_BASIC_PRINT_TYPE_FUNC(u8 , "%x")
> +DECLARE_BASIC_PRINT_TYPE_FUNC(u16, "%x")
> +DECLARE_BASIC_PRINT_TYPE_FUNC(u32, "%x")
> +DECLARE_BASIC_PRINT_TYPE_FUNC(u64, "%Lx")
> +DECLARE_BASIC_PRINT_TYPE_FUNC(s8, "%d")
> +DECLARE_BASIC_PRINT_TYPE_FUNC(s16, "%d")
> +DECLARE_BASIC_PRINT_TYPE_FUNC(s32, "%d")
> +DECLARE_BASIC_PRINT_TYPE_FUNC(s64, "%Ld")
> +
> +/* Default (unsigned long) fetch type */
> +#define __DEFAULT_FETCH_TYPE(t) u##t
> +#define _DEFAULT_FETCH_TYPE(t) __DEFAULT_FETCH_TYPE(t)
> +#define DEFAULT_FETCH_TYPE _DEFAULT_FETCH_TYPE(BITS_PER_LONG)
> +#define DEFAULT_FETCH_TYPE_STR __stringify(DEFAULT_FETCH_TYPE)
> +
> +#define ASSIGN_FETCH_FUNC(method, type) \
> + [FETCH_MTD_##method] = FETCH_FUNC_NAME(method, type)
> +
> +#define __ASSIGN_FETCH_TYPE(_name, ptype, ftype, _size, sign, _fmttype) \
> + {.name = _name, \
> + .size = _size, \
> + .is_signed = sign, \
> + .print = PRINT_TYPE_FUNC_NAME(ptype), \
> + .fmt = PRINT_TYPE_FMT_NAME(ptype), \
> + .fmttype = _fmttype, \
> + .fetch = { \
> +ASSIGN_FETCH_FUNC(reg, ftype), \
> +ASSIGN_FETCH_FUNC(stack, ftype), \
> +ASSIGN_FETCH_FUNC(retval, ftype), \
> +ASSIGN_FETCH_FUNC(memory, ftype), \
> +ASSIGN_FETCH_FUNC(symbol, ftype), \
> +ASSIGN_FETCH_FUNC(deref, ftype), \
> +ASSIGN_FETCH_FUNC(bitfield, ftype), \
> + } \
> + }
> +
> +#define ASSIGN_FETCH_TYPE(ptype, ftype, sign) \
> + __ASSIGN_FETCH_TYPE(#ptype, ptype, ftype, sizeof(ftype), sign, #ptype)
> +
> +#define FETCH_TYPE_STRING 0
> +#define FETCH_TYPE_STRSIZE 1
> +
> +
> struct probe_arg {
> struct fetch_param fetch;
> struct fetch_param fetch_size;
>
--
Masami HIRAMATSU
IT Management Research Dept. Linux Technology Center
Hitachi, Ltd., Yokohama Research Laboratory
E-mail: masami.hiramatsu.pt@hitachi.com
next prev parent reply other threads:[~2013-12-09 15:12 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-09 6:19 [PATCHSET 00/17] tracing/uprobes: Add support for more fetch methods (v8) Namhyung Kim
2013-12-09 6:19 ` [PATCH 01/17] tracing/uprobes: Fix documentation of uprobe registration syntax Namhyung Kim
2013-12-09 6:19 ` [PATCH 02/17] tracing/probes: Fix basic print type functions Namhyung Kim
2013-12-09 6:19 ` [PATCH 03/17] tracing/kprobes: Factor out struct trace_probe Namhyung Kim
2013-12-09 6:19 ` [PATCH 04/17] tracing/uprobes: Convert to " Namhyung Kim
2013-12-09 6:19 ` [PATCH 05/17] tracing/kprobes: Move common functions to trace_probe.h Namhyung Kim
2013-12-09 6:19 ` [PATCH 06/17] tracing/probes: Integrate duplicate set_print_fmt() Namhyung Kim
2013-12-09 6:19 ` [PATCH 07/17] tracing/probes: Move fetch function helpers to trace_probe.h Namhyung Kim
2013-12-09 15:12 ` Masami Hiramatsu [this message]
2013-12-09 6:19 ` [PATCH 08/17] tracing/probes: Split [ku]probes_fetch_type_table Namhyung Kim
2013-12-09 15:09 ` Masami Hiramatsu
2013-12-10 1:05 ` Namhyung Kim
2013-12-10 4:41 ` Namhyung Kim
2013-12-10 9:14 ` Masami Hiramatsu
2013-12-09 6:19 ` [PATCH 09/17] tracing/probes: Implement 'stack' fetch method for uprobes Namhyung Kim
2013-12-09 6:19 ` [PATCH 10/17] tracing/probes: Move 'symbol' fetch method to kprobes Namhyung Kim
2013-12-10 10:12 ` Masami Hiramatsu
2013-12-11 1:05 ` Namhyung Kim
2013-12-11 1:26 ` Masami Hiramatsu
2013-12-09 6:19 ` [PATCH 11/17] tracing/probes: Add fetch{,_size} member into deref fetch method Namhyung Kim
2013-12-09 6:20 ` [PATCH 12/17] tracing/probes: Implement 'memory' fetch method for uprobes Namhyung Kim
2013-12-10 11:00 ` Masami Hiramatsu
2013-12-11 1:15 ` Namhyung Kim
2013-12-11 1:27 ` Masami Hiramatsu
2013-12-09 6:20 ` [PATCH 13/17] tracing/uprobes: Pass 'is_return' to traceprobe_parse_probe_arg() Namhyung Kim
2013-12-09 15:11 ` Masami Hiramatsu
2013-12-09 6:20 ` [PATCH 14/17] tracing/uprobes: Fetch args before reserving a ring buffer Namhyung Kim
2013-12-09 6:20 ` [PATCH 15/17] tracing/uprobes: Add support for full argument access methods Namhyung Kim
2013-12-09 6:20 ` [PATCH 16/17] uprobes: Allocate ->utask before handler_chain() for tracing handlers Namhyung Kim
2013-12-10 10:41 ` Masami Hiramatsu
2013-12-10 15:57 ` Oleg Nesterov
2013-12-11 1:30 ` Namhyung Kim
2013-12-11 1:43 ` Masami Hiramatsu
2013-12-11 18:11 ` Oleg Nesterov
2013-12-12 5:55 ` Masami Hiramatsu
2013-12-12 19:46 ` Oleg Nesterov
2013-12-13 1:57 ` Masami Hiramatsu
2013-12-13 1:58 ` Masami Hiramatsu
2013-12-09 6:20 ` [PATCH 17/17] tracing/uprobes: Add @+file_offset fetch method Namhyung Kim
-- strict thread matches above, loose matches on Subject: below --
2013-12-16 4:31 [PATCHSET 00/17] tracing/uprobes: Add support for more fetch methods (v9) Namhyung Kim
2013-12-16 4:32 ` [PATCH 07/17] tracing/probes: Move fetch function helpers to trace_probe.h Namhyung Kim
2013-11-27 6:19 [PATCHSET 00/17] tracing/uprobes: Add support for more fetch methods (v7) Namhyung Kim
2013-11-27 6:19 ` [PATCH 07/17] tracing/probes: Move fetch function helpers to trace_probe.h Namhyung Kim
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52A5DDD8.4030007@hitachi.com \
--to=masami.hiramatsu.pt@hitachi.com \
--cc=acme@ghostprotocols.net \
--cc=cheol.lee@lge.com \
--cc=hkshaw@linux.vnet.ibm.com \
--cc=jovi.zhangwei@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=namhyung.kim@lge.com \
--cc=namhyung@kernel.org \
--cc=oleg@redhat.com \
--cc=rostedt@goodmis.org \
--cc=srikar@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.