From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
To: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
LKML <linux-kernel@vger.kernel.org>,
Jim Keniston <jkenisto@linux.vnet.ibm.com>,
2nddept-manager@sdl.hitachi.co.jp
Subject: Re: [PATCH v5 10/14] trace: Common code for kprobes/uprobes traceevents
Date: Tue, 15 Jun 2010 13:13:41 +0900 [thread overview]
Message-ID: <4C16FDF5.1070803@hitachi.com> (raw)
In-Reply-To: <20100614082953.29068.76083.sendpatchset@localhost6.localdomain6>
Srikar Dronamraju wrote:
> share_traceevents.patch.
>
> From: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
>
> Changelog from v5: Addressed comments from Masami.
> Also shared lot more code from kprobes traceevents.
>
> Move common parts of trace_kprobe.c and trace_uprobec.
> Adjust kernel/trace/trace_kprobe.c after moving common code to
> kernel/trace/trace_probe.h. However they still have few duplicate
> functions.
Hi Shriker,
OK, sharing fetch codes between them is acceptable.
> diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
> new file mode 100644
> index 0000000..b4c5763
> --- /dev/null
> +++ b/kernel/trace/trace_probe.h
[...]
> +/* Printing in basic type function template */
> +#define DEFINE_BASIC_PRINT_TYPE_FUNC(type, fmt, cast) \
> +static __kprobes int PRINT_TYPE_FUNC_NAME(type)(struct trace_seq *s, \
> + const char *name, void *data)\
> +{ \
> + return trace_seq_printf(s, " %s=" fmt, name, (cast)*(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)
Please do NOT define static variables in header file...
It should be in trace_probe_common.c.
> +
> +/* Data fetch function type */
> +typedef void (*fetch_func_t)(struct pt_regs *, void *, void *);
> +
> +struct fetch_param {
> + fetch_func_t fn;
> + void *data;
> +};
> +
> +#define FETCH_FUNC_NAME(kind, type) fetch_##kind##_##type
> +/*
> + * Define macro for basic types - we don't need to define s* types, because
> + * we have to care only about bitwidth at recording time.
> + */
> +#define DEFINE_BASIC_FETCH_FUNCS(kind) \
> +DEFINE_FETCH_##kind(u8) \
> +DEFINE_FETCH_##kind(u16) \
> +DEFINE_FETCH_##kind(u32) \
> +DEFINE_FETCH_##kind(u64)
> +
> +#define CHECK_BASIC_FETCH_FUNCS(kind, fn) \
> + ((FETCH_FUNC_NAME(kind, u8) == fn) || \
> + (FETCH_FUNC_NAME(kind, u16) == fn) || \
> + (FETCH_FUNC_NAME(kind, u32) == fn) || \
> + (FETCH_FUNC_NAME(kind, u64) == fn))
> +
> +/* Data fetch function templates */
> +#define DEFINE_FETCH_reg(type) \
> +static __kprobes void FETCH_FUNC_NAME(reg, type)(struct pt_regs *regs, \
> + void *offset, void *dest) \
> +{ \
> + *(type *)dest = (type)regs_get_register(regs, \
> + (unsigned int)((unsigned long)offset)); \
> +}
> +DEFINE_BASIC_FETCH_FUNCS(reg)
> +
> +/* 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(kind, type) \
> + .kind = FETCH_FUNC_NAME(kind, type)
And, please do not split these macros and function bodies.
I think we should make a new .c and put them into there.
Maybe, we need a new interface for generating new fetch_arg
according to its type (and access region, user/kernel).
> +
> +/* Flags for trace_probe */
> +#define TP_FLAG_TRACE 1
> +#define TP_FLAG_PROFILE 2
> +
> +#define PARAM_MAX_ARGS 16
> +#define PARAM_MAX_STACK (THREAD_SIZE / sizeof(unsigned long))
> +
> +struct probe_arg {
> + struct fetch_param fetch;
> + unsigned int offset; /* Offset from argument entry */
> + const char *name; /* Name of this argument */
> + const char *comm; /* Command of this argument */
> + const struct fetch_type *type; /* Type of this argument */
> +};
> +
> +static __kprobes void call_fetch(struct fetch_param *fprm,
> + struct pt_regs *regs, void *dest)
> +{
> + return fprm->fn(regs, fprm->data, dest);
> +}
> +
> +/* Check the name is good for event/group */
> +static inline int check_event_name(const char *name)
> +{
> + if (!isalpha(*name) && *name != '_')
> + return 0;
> + while (*++name != '\0') {
> + if (!isalpha(*name) && !isdigit(*name) && *name != '_')
> + return 0;
> + }
> + return 1;
> +}
> +
> +static int probe_event_raw_init(struct ftrace_event_call *event_call)
> +{
> + return 0;
> +}
Exporting these interfaces are OK.
Thank you,
next prev parent reply other threads:[~2010-06-15 4:16 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-14 8:27 [PATCH v5 0/14] Uprobes v5 Srikar Dronamraju
2010-06-14 8:28 ` [PATCH v5 1/14] X86 instruction analysis: Move Macro W to insn.h Srikar Dronamraju
2010-06-14 17:39 ` Christoph Hellwig
2010-06-15 6:32 ` Srikar Dronamraju
2010-06-14 8:28 ` [PATCH v5 2/14] mm: Move replace_page to mm/memory.c Srikar Dronamraju
2010-06-14 17:44 ` Christoph Hellwig
2010-06-15 4:00 ` Srikar Dronamraju
2010-06-15 6:23 ` Christoph Hellwig
2010-06-14 8:28 ` [PATCH v5 3/14] User Space Breakpoint Assistance Layer Srikar Dronamraju
2010-06-14 17:40 ` Christoph Hellwig
2010-06-21 14:20 ` Steven Rostedt
2010-06-14 17:50 ` Christoph Hellwig
2010-06-15 11:27 ` Srikar Dronamraju
2010-06-21 13:59 ` Steven Rostedt
2010-06-22 5:44 ` Srikar Dronamraju
2010-06-14 8:28 ` [PATCH v5 4/14] x86 support for User space breakpoint assistance Srikar Dronamraju
2010-06-14 8:28 ` [PATCH v5 5/14] Slot allocation for execution out of line (XOL) Srikar Dronamraju
2010-06-14 17:52 ` Christoph Hellwig
2010-06-16 7:06 ` Srikar Dronamraju
2010-06-14 8:29 ` [PATCH v5 6/14] Uprobes Implementation Srikar Dronamraju
2010-06-14 14:27 ` Randy Dunlap
2010-06-15 11:30 ` Srikar Dronamraju
2010-06-14 8:29 ` [PATCH v5 7/14] x86 support for Uprobes Srikar Dronamraju
2010-06-14 17:54 ` Christoph Hellwig
2010-06-15 6:23 ` Srikar Dronamraju
2010-06-15 11:51 ` Oleg Nesterov
2010-06-15 12:15 ` Srikar Dronamraju
2010-06-15 13:15 ` Oleg Nesterov
2010-06-21 14:12 ` Steven Rostedt
2010-06-14 8:29 ` [PATCH v5 8/14] samples: Uprobes samples Srikar Dronamraju
2010-06-14 17:47 ` Christoph Hellwig
2010-06-14 8:29 ` [PATCH v5 9/14] Uprobes documentation Srikar Dronamraju
2010-06-14 8:29 ` [PATCH v5 10/14] trace: Common code for kprobes/uprobes traceevents Srikar Dronamraju
2010-06-15 4:13 ` Masami Hiramatsu [this message]
2010-06-21 14:18 ` Steven Rostedt
2010-06-22 5:46 ` Srikar Dronamraju
2010-06-14 8:30 ` [PATCH v5 11/14] trace: uprobes trace_event interface Srikar Dronamraju
2010-06-21 14:22 ` Steven Rostedt
2010-06-22 4:15 ` Srikar Dronamraju
2010-06-22 6:34 ` Christoph Hellwig
2010-06-14 8:30 ` [PATCH v5 12/14] perf: Dont adjust symbols on name lookup Srikar Dronamraju
2010-06-14 8:30 ` [PATCH v5 13/14] perf: Re-Add make_absolute_path Srikar Dronamraju
2010-06-14 8:30 ` [PATCH v5 14/14] perf: perf interface for uprobes Srikar Dronamraju
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=4C16FDF5.1070803@hitachi.com \
--to=masami.hiramatsu.pt@hitachi.com \
--cc=2nddept-manager@sdl.hitachi.co.jp \
--cc=ananth@in.ibm.com \
--cc=jkenisto@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.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.