mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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,




  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome