All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support
@ 2016-04-26 14:25 Ravi Bangoria
  2016-04-26 14:25 ` [PATCH 2/2] perf probe: Fix offline module name missmatch issue Ravi Bangoria
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Ravi Bangoria @ 2016-04-26 14:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: acme, peterz, mingo, alexander.shishkin, mhiramat, wangnan0,
	namhyung, srikar, naveen.n.rao, Ravi Bangoria

Perf is not able to register probe in kernel module when dwarf supprt
is not there(and so it goes for symtab). Perf passes full path of
module where only module name is required which is causing the problem.
This patch fixes this issue.

Before applying patch:

  $ dpkg -s libdw-dev
  dpkg-query: package 'libdw-dev' is not installed and no information is...

  $ sudo ./perf probe -m /linux/samples/kprobes/kprobe_example.ko kprobe_init
  Added new event:
    probe:kprobe_init (on kprobe_init in /linux/samples/kprobes/kprobe_example.ko)

  You can now use it in all perf tools, such as:

  perf record -e probe:kprobe_init -aR sleep 1

  $ sudo cat /sys/kernel/debug/tracing/kprobe_events
  p:probe/kprobe_init /linux/samples/kprobes/kprobe_example.ko:kprobe_init

  $ sudo ./perf record -a -e probe:kprobe_init
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.105 MB perf.data ]

  $ sudo ./perf script 	# No output here 

After applying patch:

  $ sudo ./perf probe -m /linux/samples/kprobes/kprobe_example.ko kprobe_init
  Added new event:
    probe:kprobe_init    (on kprobe_init in kprobe_example)

  You can now use it in all perf tools, such as:

  perf record -e probe:kprobe_init -aR sleep 1

  $ sudo cat /sys/kernel/debug/tracing/kprobe_events
  p:probe/kprobe_init kprobe_example:kprobe_init

  $ sudo ./perf record -a -e probe:kprobe_init
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.105 MB perf.data (2 samples) ]

  $ sudo ./perf script
  insmod 13990 [002]  5961.216833: probe:kprobe_init: ...
  insmod 13995 [002]  5962.889384: probe:kprobe_init: ...

Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
---
 tools/perf/util/probe-event.c | 76 +++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 73 insertions(+), 3 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 8319fbb..d58de20 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -265,6 +265,65 @@ static bool kprobe_warn_out_range(const char *symbol, unsigned long address)
 	return true;
 }
 
+/*
+ * NOTE:
+ * '.gnu.linkonce.this_module' section of kernel module elf directly
+ * maps to 'struct module' from linux/module.h. This section contains
+ * actual module name which will be used by kernel after loading it.
+ * But, we cannot use 'struct module' here since linux/module.h is not
+ * exposed to user-space. Offset of 'name' has remained same from long
+ * time, so hardcoding it here.
+ */
+#ifdef __LP64__
+#define MOD_NAME_OFFSET 24
+#else
+#define MOD_NAME_OFFSET 12
+#endif
+
+/*
+ * @module can be module name of module file path. In case of path,
+ * inspect elf and find out what is actual module name.
+ * Caller has to free mod_name after using it.
+ */
+static char *find_module_name(const char *module)
+{
+	int fd;
+	Elf *elf;
+	GElf_Ehdr ehdr;
+	GElf_Shdr shdr;
+	Elf_Data *data;
+	Elf_Scn *sec;
+	char *mod_name = NULL;
+
+	fd = open(module, O_RDONLY);
+	if (fd < 0)
+		return NULL;
+
+	elf = elf_begin(fd, PERF_ELF_C_READ_MMAP, NULL);
+	if (elf == NULL)
+		goto elf_err;
+
+	if (gelf_getehdr(elf, &ehdr) == NULL)
+		goto ret_err;
+
+	sec = elf_section_by_name(elf, &ehdr, &shdr,
+			".gnu.linkonce.this_module", NULL);
+	if (!sec)
+		goto ret_err;
+
+	data = elf_getdata(sec, NULL);
+	if (!data || !data->d_buf)
+		goto ret_err;
+
+	mod_name = strdup((char *)data->d_buf + MOD_NAME_OFFSET);
+
+ret_err:
+	elf_end(elf);
+elf_err:
+	close(fd);
+	return mod_name;
+}
+
 #ifdef HAVE_DWARF_SUPPORT
 
 static int kernel_get_module_dso(const char *module, struct dso **pdso)
@@ -2516,6 +2575,7 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev,
 	struct probe_trace_point *tp;
 	int num_matched_functions;
 	int ret, i, j, skipped = 0;
+	char *mod_name;
 
 	map = get_target_map(pev->target, pev->uprobes);
 	if (!map) {
@@ -2600,9 +2660,19 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev,
 		tp->realname = strdup_or_goto(sym->name, nomem_out);
 
 		tp->retprobe = pp->retprobe;
-		if (pev->target)
-			tev->point.module = strdup_or_goto(pev->target,
-							   nomem_out);
+		if (pev->target) {
+			if (pev->uprobes) {
+				tev->point.module = strdup_or_goto(pev->target,
+								   nomem_out);
+			} else {
+				mod_name = find_module_name(pev->target);
+				tev->point.module =
+					strdup(mod_name ? mod_name : pev->target);
+				free(mod_name);
+				if (!tev->point.module)
+					goto nomem_out;
+			}
+		}
 		tev->uprobes = pev->uprobes;
 		tev->nargs = pev->nargs;
 		if (tev->nargs) {
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/2] perf probe: Fix offline module name missmatch issue
  2016-04-26 14:25 [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support Ravi Bangoria
@ 2016-04-26 14:25 ` Ravi Bangoria
  2016-04-26 14:45   ` Masami Hiramatsu
  2016-04-27 15:38   ` [tip:perf/core] " tip-bot for Ravi Bangoria
  2016-04-26 14:34 ` [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support Arnaldo Carvalho de Melo
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 10+ messages in thread
From: Ravi Bangoria @ 2016-04-26 14:25 UTC (permalink / raw)
  To: linux-kernel
  Cc: acme, peterz, mingo, alexander.shishkin, mhiramat, wangnan0,
	namhyung, srikar, naveen.n.rao, Ravi Bangoria

Perf can add a probe on kernel module which has not been loaded yet.
Current implementation finds module name from path. But if filename
is different from actual module name then perf fails to register
probe while loading module because of mismatch in names. For example,
samples/kobject/kobject-example.ko is loaded as kobject_example.

Before applying patch:

  $ sudo ./perf probe -m /linux/samples/kobject/kobject-example.ko foo_show
    Added new event:
      probe:foo_show       (on foo_show in kobject-example)

    You can now use it in all perf tools, such as:

    perf record -e probe:foo_show -aR sleep 1

  $ cat /sys/kernel/debug/tracing/kprobe_events
    p:probe/foo_show kobject-example:foo_show

  $ insmod kobject-example.ko

  $ lsmod
    Module                  Size  Used by
    kobject_example        16384  0

  Generate read to /sys/kernel/kobject_example/foo while recording data
  with below command
  $ sudo ./perf record -e probe:foo_show -a
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.093 MB perf.data ]

  $./perf report --stdio -F overhead,comm,dso,sym
    Error:
    The perf.data.old file has no samples!

After applying patch:

  $ sudo ./perf probe -m /linux/samples/kobject/kobject-example.ko foo_show
    Added new event:
      probe:foo_show       (on foo_show in kobject_example)

    You can now use it in all perf tools, such as:

    perf record -e probe:foo_show -aR sleep 1

  $ sudo cat /sys/kernel/debug/tracing/kprobe_events
    p:probe/foo_show kobject_example:foo_show

  $ insmod kobject-example.ko

  $ lsmod
    Module                  Size  Used by
    kobject_example        16384  0

  Generate read to /sys/kernel/kobject_example/foo while recording data
  with below command
  $ sudo ./perf record -e probe:foo_show -a
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.097 MB perf.data (8 samples) ]

  $ sudo ./perf report  --stdio -F overhead,comm,dso,sym
    ...
    # Samples: 8  of event 'probe:foo_show'
    # Event count (approx.): 8
    #
    # Overhead  Command  Shared Object      Symbol
    # ........  .......  .................  ............
    #
       100.00%  cat      [kobject_example]  [k] foo_show

Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
---
 tools/perf/util/probe-event.c | 19 +++++--------------
 1 file changed, 5 insertions(+), 14 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index d58de20..26803e1 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -642,32 +642,23 @@ static int add_module_to_probe_trace_events(struct probe_trace_event *tevs,
 					    int ntevs, const char *module)
 {
 	int i, ret = 0;
-	char *tmp;
+	char *mod_name = NULL;
 
 	if (!module)
 		return 0;
 
-	tmp = strrchr(module, '/');
-	if (tmp) {
-		/* This is a module path -- get the module name */
-		module = strdup(tmp + 1);
-		if (!module)
-			return -ENOMEM;
-		tmp = strchr(module, '.');
-		if (tmp)
-			*tmp = '\0';
-		tmp = (char *)module;	/* For free() */
-	}
+	mod_name = find_module_name(module);
 
 	for (i = 0; i < ntevs; i++) {
-		tevs[i].point.module = strdup(module);
+		tevs[i].point.module =
+			strdup(mod_name ? mod_name : module);
 		if (!tevs[i].point.module) {
 			ret = -ENOMEM;
 			break;
 		}
 	}
 
-	free(tmp);
+	free(mod_name);
 	return ret;
 }
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support
  2016-04-26 14:25 [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support Ravi Bangoria
  2016-04-26 14:25 ` [PATCH 2/2] perf probe: Fix offline module name missmatch issue Ravi Bangoria
@ 2016-04-26 14:34 ` Arnaldo Carvalho de Melo
  2016-04-26 15:12   ` Ravi Bangoria
  2016-04-26 14:45 ` Masami Hiramatsu
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 10+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-04-26 14:34 UTC (permalink / raw)
  To: Ravi Bangoria
  Cc: linux-kernel, peterz, mingo, alexander.shishkin, mhiramat,
	wangnan0, namhyung, srikar, naveen.n.rao

Em Tue, Apr 26, 2016 at 07:55:40PM +0530, Ravi Bangoria escreveu:
> Perf is not able to register probe in kernel module when dwarf supprt
> is not there(and so it goes for symtab). Perf passes full path of
> module where only module name is required which is causing the problem.
> This patch fixes this issue.

Is this v3? What has changed from v2?

- Arnaldo
 
> Before applying patch:
> 
>   $ dpkg -s libdw-dev
>   dpkg-query: package 'libdw-dev' is not installed and no information is...
> 
>   $ sudo ./perf probe -m /linux/samples/kprobes/kprobe_example.ko kprobe_init
>   Added new event:
>     probe:kprobe_init (on kprobe_init in /linux/samples/kprobes/kprobe_example.ko)
> 
>   You can now use it in all perf tools, such as:
> 
>   perf record -e probe:kprobe_init -aR sleep 1
> 
>   $ sudo cat /sys/kernel/debug/tracing/kprobe_events
>   p:probe/kprobe_init /linux/samples/kprobes/kprobe_example.ko:kprobe_init
> 
>   $ sudo ./perf record -a -e probe:kprobe_init
>   [ perf record: Woken up 1 times to write data ]
>   [ perf record: Captured and wrote 0.105 MB perf.data ]
> 
>   $ sudo ./perf script 	# No output here 
> 
> After applying patch:
> 
>   $ sudo ./perf probe -m /linux/samples/kprobes/kprobe_example.ko kprobe_init
>   Added new event:
>     probe:kprobe_init    (on kprobe_init in kprobe_example)
> 
>   You can now use it in all perf tools, such as:
> 
>   perf record -e probe:kprobe_init -aR sleep 1
> 
>   $ sudo cat /sys/kernel/debug/tracing/kprobe_events
>   p:probe/kprobe_init kprobe_example:kprobe_init
> 
>   $ sudo ./perf record -a -e probe:kprobe_init
>   [ perf record: Woken up 1 times to write data ]
>   [ perf record: Captured and wrote 0.105 MB perf.data (2 samples) ]
> 
>   $ sudo ./perf script
>   insmod 13990 [002]  5961.216833: probe:kprobe_init: ...
>   insmod 13995 [002]  5962.889384: probe:kprobe_init: ...
> 
> Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
> ---
>  tools/perf/util/probe-event.c | 76 +++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 73 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> index 8319fbb..d58de20 100644
> --- a/tools/perf/util/probe-event.c
> +++ b/tools/perf/util/probe-event.c
> @@ -265,6 +265,65 @@ static bool kprobe_warn_out_range(const char *symbol, unsigned long address)
>  	return true;
>  }
>  
> +/*
> + * NOTE:
> + * '.gnu.linkonce.this_module' section of kernel module elf directly
> + * maps to 'struct module' from linux/module.h. This section contains
> + * actual module name which will be used by kernel after loading it.
> + * But, we cannot use 'struct module' here since linux/module.h is not
> + * exposed to user-space. Offset of 'name' has remained same from long
> + * time, so hardcoding it here.
> + */
> +#ifdef __LP64__
> +#define MOD_NAME_OFFSET 24
> +#else
> +#define MOD_NAME_OFFSET 12
> +#endif
> +
> +/*
> + * @module can be module name of module file path. In case of path,
> + * inspect elf and find out what is actual module name.
> + * Caller has to free mod_name after using it.
> + */
> +static char *find_module_name(const char *module)
> +{
> +	int fd;
> +	Elf *elf;
> +	GElf_Ehdr ehdr;
> +	GElf_Shdr shdr;
> +	Elf_Data *data;
> +	Elf_Scn *sec;
> +	char *mod_name = NULL;
> +
> +	fd = open(module, O_RDONLY);
> +	if (fd < 0)
> +		return NULL;
> +
> +	elf = elf_begin(fd, PERF_ELF_C_READ_MMAP, NULL);
> +	if (elf == NULL)
> +		goto elf_err;
> +
> +	if (gelf_getehdr(elf, &ehdr) == NULL)
> +		goto ret_err;
> +
> +	sec = elf_section_by_name(elf, &ehdr, &shdr,
> +			".gnu.linkonce.this_module", NULL);
> +	if (!sec)
> +		goto ret_err;
> +
> +	data = elf_getdata(sec, NULL);
> +	if (!data || !data->d_buf)
> +		goto ret_err;
> +
> +	mod_name = strdup((char *)data->d_buf + MOD_NAME_OFFSET);
> +
> +ret_err:
> +	elf_end(elf);
> +elf_err:
> +	close(fd);
> +	return mod_name;
> +}
> +
>  #ifdef HAVE_DWARF_SUPPORT
>  
>  static int kernel_get_module_dso(const char *module, struct dso **pdso)
> @@ -2516,6 +2575,7 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev,
>  	struct probe_trace_point *tp;
>  	int num_matched_functions;
>  	int ret, i, j, skipped = 0;
> +	char *mod_name;
>  
>  	map = get_target_map(pev->target, pev->uprobes);
>  	if (!map) {
> @@ -2600,9 +2660,19 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev,
>  		tp->realname = strdup_or_goto(sym->name, nomem_out);
>  
>  		tp->retprobe = pp->retprobe;
> -		if (pev->target)
> -			tev->point.module = strdup_or_goto(pev->target,
> -							   nomem_out);
> +		if (pev->target) {
> +			if (pev->uprobes) {
> +				tev->point.module = strdup_or_goto(pev->target,
> +								   nomem_out);
> +			} else {
> +				mod_name = find_module_name(pev->target);
> +				tev->point.module =
> +					strdup(mod_name ? mod_name : pev->target);
> +				free(mod_name);
> +				if (!tev->point.module)
> +					goto nomem_out;
> +			}
> +		}
>  		tev->uprobes = pev->uprobes;
>  		tev->nargs = pev->nargs;
>  		if (tev->nargs) {
> -- 
> 1.9.1

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support
  2016-04-26 14:25 [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support Ravi Bangoria
  2016-04-26 14:25 ` [PATCH 2/2] perf probe: Fix offline module name missmatch issue Ravi Bangoria
  2016-04-26 14:34 ` [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support Arnaldo Carvalho de Melo
@ 2016-04-26 14:45 ` Masami Hiramatsu
  2016-04-26 15:49 ` Arnaldo Carvalho de Melo
  2016-04-27 15:38 ` [tip:perf/core] " tip-bot for Ravi Bangoria
  4 siblings, 0 replies; 10+ messages in thread
From: Masami Hiramatsu @ 2016-04-26 14:45 UTC (permalink / raw)
  To: Ravi Bangoria
  Cc: linux-kernel, acme, peterz, mingo, alexander.shishkin, mhiramat,
	wangnan0, namhyung, srikar, naveen.n.rao

On Tue, 26 Apr 2016 19:55:40 +0530
Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com> wrote:

> Perf is not able to register probe in kernel module when dwarf supprt
> is not there(and so it goes for symtab). Perf passes full path of
> module where only module name is required which is causing the problem.
> This patch fixes this issue.
> 
> Before applying patch:
> 
>   $ dpkg -s libdw-dev
>   dpkg-query: package 'libdw-dev' is not installed and no information is...
> 
>   $ sudo ./perf probe -m /linux/samples/kprobes/kprobe_example.ko kprobe_init
>   Added new event:
>     probe:kprobe_init (on kprobe_init in /linux/samples/kprobes/kprobe_example.ko)
> 
>   You can now use it in all perf tools, such as:
> 
>   perf record -e probe:kprobe_init -aR sleep 1
> 
>   $ sudo cat /sys/kernel/debug/tracing/kprobe_events
>   p:probe/kprobe_init /linux/samples/kprobes/kprobe_example.ko:kprobe_init
> 
>   $ sudo ./perf record -a -e probe:kprobe_init
>   [ perf record: Woken up 1 times to write data ]
>   [ perf record: Captured and wrote 0.105 MB perf.data ]
> 
>   $ sudo ./perf script 	# No output here 
> 
> After applying patch:
> 
>   $ sudo ./perf probe -m /linux/samples/kprobes/kprobe_example.ko kprobe_init
>   Added new event:
>     probe:kprobe_init    (on kprobe_init in kprobe_example)
> 
>   You can now use it in all perf tools, such as:
> 
>   perf record -e probe:kprobe_init -aR sleep 1
> 
>   $ sudo cat /sys/kernel/debug/tracing/kprobe_events
>   p:probe/kprobe_init kprobe_example:kprobe_init
> 
>   $ sudo ./perf record -a -e probe:kprobe_init
>   [ perf record: Woken up 1 times to write data ]
>   [ perf record: Captured and wrote 0.105 MB perf.data (2 samples) ]
> 
>   $ sudo ./perf script
>   insmod 13990 [002]  5961.216833: probe:kprobe_init: ...
>   insmod 13995 [002]  5962.889384: probe:kprobe_init: ...
> 

Looks good to me!
Thanks for updating.

Acked-by: Masami Hiramatsu <mhiramat@kernel.org>

Thank you!

> Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
> ---
>  tools/perf/util/probe-event.c | 76 +++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 73 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> index 8319fbb..d58de20 100644
> --- a/tools/perf/util/probe-event.c
> +++ b/tools/perf/util/probe-event.c
> @@ -265,6 +265,65 @@ static bool kprobe_warn_out_range(const char *symbol, unsigned long address)
>  	return true;
>  }
>  
> +/*
> + * NOTE:
> + * '.gnu.linkonce.this_module' section of kernel module elf directly
> + * maps to 'struct module' from linux/module.h. This section contains
> + * actual module name which will be used by kernel after loading it.
> + * But, we cannot use 'struct module' here since linux/module.h is not
> + * exposed to user-space. Offset of 'name' has remained same from long
> + * time, so hardcoding it here.
> + */
> +#ifdef __LP64__
> +#define MOD_NAME_OFFSET 24
> +#else
> +#define MOD_NAME_OFFSET 12
> +#endif
> +
> +/*
> + * @module can be module name of module file path. In case of path,
> + * inspect elf and find out what is actual module name.
> + * Caller has to free mod_name after using it.
> + */
> +static char *find_module_name(const char *module)
> +{
> +	int fd;
> +	Elf *elf;
> +	GElf_Ehdr ehdr;
> +	GElf_Shdr shdr;
> +	Elf_Data *data;
> +	Elf_Scn *sec;
> +	char *mod_name = NULL;
> +
> +	fd = open(module, O_RDONLY);
> +	if (fd < 0)
> +		return NULL;
> +
> +	elf = elf_begin(fd, PERF_ELF_C_READ_MMAP, NULL);
> +	if (elf == NULL)
> +		goto elf_err;
> +
> +	if (gelf_getehdr(elf, &ehdr) == NULL)
> +		goto ret_err;
> +
> +	sec = elf_section_by_name(elf, &ehdr, &shdr,
> +			".gnu.linkonce.this_module", NULL);
> +	if (!sec)
> +		goto ret_err;
> +
> +	data = elf_getdata(sec, NULL);
> +	if (!data || !data->d_buf)
> +		goto ret_err;
> +
> +	mod_name = strdup((char *)data->d_buf + MOD_NAME_OFFSET);
> +
> +ret_err:
> +	elf_end(elf);
> +elf_err:
> +	close(fd);
> +	return mod_name;
> +}
> +
>  #ifdef HAVE_DWARF_SUPPORT
>  
>  static int kernel_get_module_dso(const char *module, struct dso **pdso)
> @@ -2516,6 +2575,7 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev,
>  	struct probe_trace_point *tp;
>  	int num_matched_functions;
>  	int ret, i, j, skipped = 0;
> +	char *mod_name;
>  
>  	map = get_target_map(pev->target, pev->uprobes);
>  	if (!map) {
> @@ -2600,9 +2660,19 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev,
>  		tp->realname = strdup_or_goto(sym->name, nomem_out);
>  
>  		tp->retprobe = pp->retprobe;
> -		if (pev->target)
> -			tev->point.module = strdup_or_goto(pev->target,
> -							   nomem_out);
> +		if (pev->target) {
> +			if (pev->uprobes) {
> +				tev->point.module = strdup_or_goto(pev->target,
> +								   nomem_out);
> +			} else {
> +				mod_name = find_module_name(pev->target);
> +				tev->point.module =
> +					strdup(mod_name ? mod_name : pev->target);
> +				free(mod_name);
> +				if (!tev->point.module)
> +					goto nomem_out;
> +			}
> +		}
>  		tev->uprobes = pev->uprobes;
>  		tev->nargs = pev->nargs;
>  		if (tev->nargs) {
> -- 
> 1.9.1
> 


-- 
Masami Hiramatsu <mhiramat@kernel.org>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/2] perf probe: Fix offline module name missmatch issue
  2016-04-26 14:25 ` [PATCH 2/2] perf probe: Fix offline module name missmatch issue Ravi Bangoria
@ 2016-04-26 14:45   ` Masami Hiramatsu
  2016-04-27 15:38   ` [tip:perf/core] " tip-bot for Ravi Bangoria
  1 sibling, 0 replies; 10+ messages in thread
From: Masami Hiramatsu @ 2016-04-26 14:45 UTC (permalink / raw)
  To: Ravi Bangoria
  Cc: linux-kernel, acme, peterz, mingo, alexander.shishkin, mhiramat,
	wangnan0, namhyung, srikar, naveen.n.rao

On Tue, 26 Apr 2016 19:55:41 +0530
Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com> wrote:

> Perf can add a probe on kernel module which has not been loaded yet.
> Current implementation finds module name from path. But if filename
> is different from actual module name then perf fails to register
> probe while loading module because of mismatch in names. For example,
> samples/kobject/kobject-example.ko is loaded as kobject_example.
> 
> Before applying patch:
> 
>   $ sudo ./perf probe -m /linux/samples/kobject/kobject-example.ko foo_show
>     Added new event:
>       probe:foo_show       (on foo_show in kobject-example)
> 
>     You can now use it in all perf tools, such as:
> 
>     perf record -e probe:foo_show -aR sleep 1
> 
>   $ cat /sys/kernel/debug/tracing/kprobe_events
>     p:probe/foo_show kobject-example:foo_show
> 
>   $ insmod kobject-example.ko
> 
>   $ lsmod
>     Module                  Size  Used by
>     kobject_example        16384  0
> 
>   Generate read to /sys/kernel/kobject_example/foo while recording data
>   with below command
>   $ sudo ./perf record -e probe:foo_show -a
>     [ perf record: Woken up 1 times to write data ]
>     [ perf record: Captured and wrote 0.093 MB perf.data ]
> 
>   $./perf report --stdio -F overhead,comm,dso,sym
>     Error:
>     The perf.data.old file has no samples!
> 
> After applying patch:
> 
>   $ sudo ./perf probe -m /linux/samples/kobject/kobject-example.ko foo_show
>     Added new event:
>       probe:foo_show       (on foo_show in kobject_example)
> 
>     You can now use it in all perf tools, such as:
> 
>     perf record -e probe:foo_show -aR sleep 1
> 
>   $ sudo cat /sys/kernel/debug/tracing/kprobe_events
>     p:probe/foo_show kobject_example:foo_show
> 
>   $ insmod kobject-example.ko
> 
>   $ lsmod
>     Module                  Size  Used by
>     kobject_example        16384  0
> 
>   Generate read to /sys/kernel/kobject_example/foo while recording data
>   with below command
>   $ sudo ./perf record -e probe:foo_show -a
>     [ perf record: Woken up 1 times to write data ]
>     [ perf record: Captured and wrote 0.097 MB perf.data (8 samples) ]
> 
>   $ sudo ./perf report  --stdio -F overhead,comm,dso,sym
>     ...
>     # Samples: 8  of event 'probe:foo_show'
>     # Event count (approx.): 8
>     #
>     # Overhead  Command  Shared Object      Symbol
>     # ........  .......  .................  ............
>     #
>        100.00%  cat      [kobject_example]  [k] foo_show
> 

Looks good to me :)

Acked-by: Masami Hiramatsu <mhiramat@kernel.org>

Thank you!

> Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
> ---
>  tools/perf/util/probe-event.c | 19 +++++--------------
>  1 file changed, 5 insertions(+), 14 deletions(-)
> 
> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> index d58de20..26803e1 100644
> --- a/tools/perf/util/probe-event.c
> +++ b/tools/perf/util/probe-event.c
> @@ -642,32 +642,23 @@ static int add_module_to_probe_trace_events(struct probe_trace_event *tevs,
>  					    int ntevs, const char *module)
>  {
>  	int i, ret = 0;
> -	char *tmp;
> +	char *mod_name = NULL;
>  
>  	if (!module)
>  		return 0;
>  
> -	tmp = strrchr(module, '/');
> -	if (tmp) {
> -		/* This is a module path -- get the module name */
> -		module = strdup(tmp + 1);
> -		if (!module)
> -			return -ENOMEM;
> -		tmp = strchr(module, '.');
> -		if (tmp)
> -			*tmp = '\0';
> -		tmp = (char *)module;	/* For free() */
> -	}
> +	mod_name = find_module_name(module);
>  
>  	for (i = 0; i < ntevs; i++) {
> -		tevs[i].point.module = strdup(module);
> +		tevs[i].point.module =
> +			strdup(mod_name ? mod_name : module);
>  		if (!tevs[i].point.module) {
>  			ret = -ENOMEM;
>  			break;
>  		}
>  	}
>  
> -	free(tmp);
> +	free(mod_name);
>  	return ret;
>  }
>  
> -- 
> 1.9.1
> 


-- 
Masami Hiramatsu <mhiramat@kernel.org>

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support
  2016-04-26 14:34 ` [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support Arnaldo Carvalho de Melo
@ 2016-04-26 15:12   ` Ravi Bangoria
  2016-04-26 15:44     ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 10+ messages in thread
From: Ravi Bangoria @ 2016-04-26 15:12 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, peterz, mingo, alexander.shishkin, mhiramat,
	wangnan0, namhyung, srikar, naveen.n.rao



On Tuesday 26 April 2016 08:04 PM, Arnaldo Carvalho de Melo wrote:
> Em Tue, Apr 26, 2016 at 07:55:40PM +0530, Ravi Bangoria escreveu:
>> Perf is not able to register probe in kernel module when dwarf supprt
>> is not there(and so it goes for symtab). Perf passes full path of
>> module where only module name is required which is causing the problem.
>> This patch fixes this issue.
> Is this v3? What has changed from v2?
>
> - Arnaldo

Yes Arnaldo. But I changed it from [RFC] to [PATCH], so didn't include
version. Here is [RFC v2] link: https://lkml.org/lkml/2016/4/26/114

Changes w.r.t. [RFC v2]:
   - Swapped patch in series and move definition of find_module_name in 
other patch.

Regards,
Ravi

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support
  2016-04-26 15:12   ` Ravi Bangoria
@ 2016-04-26 15:44     ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 10+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-04-26 15:44 UTC (permalink / raw)
  To: Ravi Bangoria
  Cc: linux-kernel, peterz, mingo, alexander.shishkin, mhiramat,
	wangnan0, namhyung, srikar, naveen.n.rao

Em Tue, Apr 26, 2016 at 08:42:46PM +0530, Ravi Bangoria escreveu:
> 
> 
> On Tuesday 26 April 2016 08:04 PM, Arnaldo Carvalho de Melo wrote:
> >Em Tue, Apr 26, 2016 at 07:55:40PM +0530, Ravi Bangoria escreveu:
> >>Perf is not able to register probe in kernel module when dwarf supprt
> >>is not there(and so it goes for symtab). Perf passes full path of
> >>module where only module name is required which is causing the problem.
> >>This patch fixes this issue.
> >Is this v3? What has changed from v2?
> >
> >- Arnaldo
> 
> Yes Arnaldo. But I changed it from [RFC] to [PATCH], so didn't include
> version. Here is [RFC v2] link: https://lkml.org/lkml/2016/4/26/114
> 
> Changes w.r.t. [RFC v2]:
>   - Swapped patch in series and move definition of find_module_name in other
> patch.

Ok, hadn't noticed the change from RFC to PATCH, and Masami just acked
it, applying.

- Arnaldo

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support
  2016-04-26 14:25 [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support Ravi Bangoria
                   ` (2 preceding siblings ...)
  2016-04-26 14:45 ` Masami Hiramatsu
@ 2016-04-26 15:49 ` Arnaldo Carvalho de Melo
  2016-04-27 15:38 ` [tip:perf/core] " tip-bot for Ravi Bangoria
  4 siblings, 0 replies; 10+ messages in thread
From: Arnaldo Carvalho de Melo @ 2016-04-26 15:49 UTC (permalink / raw)
  To: Ravi Bangoria
  Cc: linux-kernel, peterz, mingo, alexander.shishkin, mhiramat,
	wangnan0, namhyung, srikar, naveen.n.rao

Em Tue, Apr 26, 2016 at 07:55:40PM +0530, Ravi Bangoria escreveu:
> Perf is not able to register probe in kernel module when dwarf supprt
> is not there(and so it goes for symtab). Perf passes full path of
> module where only module name is required which is causing the problem.
> This patch fixes this issue.

Applied both patches, thanks!

- Arnaldo

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [tip:perf/core] perf probe: Fix offline module name missmatch issue
  2016-04-26 14:25 ` [PATCH 2/2] perf probe: Fix offline module name missmatch issue Ravi Bangoria
  2016-04-26 14:45   ` Masami Hiramatsu
@ 2016-04-27 15:38   ` tip-bot for Ravi Bangoria
  1 sibling, 0 replies; 10+ messages in thread
From: tip-bot for Ravi Bangoria @ 2016-04-27 15:38 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: hpa, wangnan0, ravi.bangoria, tglx, naveen.n.rao, mhiramat, acme,
	linux-kernel, srikar, alexander.shishkin, namhyung, mingo,
	peterz

Commit-ID:  63a29613d7c69f17b6a3266bfc338986698b2546
Gitweb:     http://git.kernel.org/tip/63a29613d7c69f17b6a3266bfc338986698b2546
Author:     Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
AuthorDate: Tue, 26 Apr 2016 19:55:41 +0530
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 26 Apr 2016 13:15:01 -0300

perf probe: Fix offline module name missmatch issue

Perf can add a probe on kernel module which has not been loaded yet.

The current implementation finds the module name from path. But if the
filename is different from the actual module name then perf fails to
register a probe while loading module because of mismatch in the names.

For example, samples/kobject/kobject-example.ko is loaded as
kobject_example.

Before applying patch:

  $ sudo ./perf probe -m /linux/samples/kobject/kobject-example.ko foo_show
    Added new event:
      probe:foo_show       (on foo_show in kobject-example)

    You can now use it in all perf tools, such as:

    perf record -e probe:foo_show -aR sleep 1

  $ cat /sys/kernel/debug/tracing/kprobe_events
    p:probe/foo_show kobject-example:foo_show

  $ insmod kobject-example.ko

  $ lsmod
    Module                  Size  Used by
    kobject_example        16384  0

  Generate read to /sys/kernel/kobject_example/foo while recording data
  with below command
  $ sudo ./perf record -e probe:foo_show -a
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.093 MB perf.data ]

  $./perf report --stdio -F overhead,comm,dso,sym
    Error:
    The perf.data.old file has no samples!

After applying patch:

  $ sudo ./perf probe -m /linux/samples/kobject/kobject-example.ko foo_show
    Added new event:
      probe:foo_show       (on foo_show in kobject_example)

    You can now use it in all perf tools, such as:

    perf record -e probe:foo_show -aR sleep 1

  $ sudo cat /sys/kernel/debug/tracing/kprobe_events
    p:probe/foo_show kobject_example:foo_show

  $ insmod kobject-example.ko

  $ lsmod
    Module                  Size  Used by
    kobject_example        16384  0

  Generate read to /sys/kernel/kobject_example/foo while recording data
  with below command
  $ sudo ./perf record -e probe:foo_show -a
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.097 MB perf.data (8 samples) ]

  $ sudo ./perf report  --stdio -F overhead,comm,dso,sym
    ...
    # Samples: 8  of event 'probe:foo_show'
    # Event count (approx.): 8
    #
    # Overhead  Command  Shared Object      Symbol
    # ........  .......  .................  ............
    #
       100.00%  cat      [kobject_example]  [k] foo_show

Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1461680741-12517-2-git-send-email-ravi.bangoria@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/probe-event.c | 19 +++++--------------
 1 file changed, 5 insertions(+), 14 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 0de5d10..bc2eb7c 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -588,32 +588,23 @@ static int add_module_to_probe_trace_events(struct probe_trace_event *tevs,
 					    int ntevs, const char *module)
 {
 	int i, ret = 0;
-	char *tmp;
+	char *mod_name = NULL;
 
 	if (!module)
 		return 0;
 
-	tmp = strrchr(module, '/');
-	if (tmp) {
-		/* This is a module path -- get the module name */
-		module = strdup(tmp + 1);
-		if (!module)
-			return -ENOMEM;
-		tmp = strchr(module, '.');
-		if (tmp)
-			*tmp = '\0';
-		tmp = (char *)module;	/* For free() */
-	}
+	mod_name = find_module_name(module);
 
 	for (i = 0; i < ntevs; i++) {
-		tevs[i].point.module = strdup(module);
+		tevs[i].point.module =
+			strdup(mod_name ? mod_name : module);
 		if (!tevs[i].point.module) {
 			ret = -ENOMEM;
 			break;
 		}
 	}
 
-	free(tmp);
+	free(mod_name);
 	return ret;
 }
 

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [tip:perf/core] perf probe: Fix module probe issue if no dwarf support
  2016-04-26 14:25 [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support Ravi Bangoria
                   ` (3 preceding siblings ...)
  2016-04-26 15:49 ` Arnaldo Carvalho de Melo
@ 2016-04-27 15:38 ` tip-bot for Ravi Bangoria
  4 siblings, 0 replies; 10+ messages in thread
From: tip-bot for Ravi Bangoria @ 2016-04-27 15:38 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: acme, hpa, srikar, mhiramat, namhyung, linux-kernel, tglx,
	ravi.bangoria, naveen.n.rao, mingo, wangnan0, peterz,
	alexander.shishkin

Commit-ID:  c61fb959df898b994382d586046d7704476ff503
Gitweb:     http://git.kernel.org/tip/c61fb959df898b994382d586046d7704476ff503
Author:     Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
AuthorDate: Tue, 26 Apr 2016 19:55:40 +0530
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Tue, 26 Apr 2016 13:15:01 -0300

perf probe: Fix module probe issue if no dwarf support

Perf is not able to register probe in kernel module when dwarf supprt
is not there(and so it goes for symtab). Perf passes full path of
module where only module name is required which is causing the problem.
This patch fixes this issue.

Before applying patch:

  $ dpkg -s libdw-dev
  dpkg-query: package 'libdw-dev' is not installed and no information is...

  $ sudo ./perf probe -m /linux/samples/kprobes/kprobe_example.ko kprobe_init
  Added new event:
    probe:kprobe_init (on kprobe_init in /linux/samples/kprobes/kprobe_example.ko)

  You can now use it in all perf tools, such as:

  perf record -e probe:kprobe_init -aR sleep 1

  $ sudo cat /sys/kernel/debug/tracing/kprobe_events
  p:probe/kprobe_init /linux/samples/kprobes/kprobe_example.ko:kprobe_init

  $ sudo ./perf record -a -e probe:kprobe_init
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.105 MB perf.data ]

  $ sudo ./perf script 	# No output here

After applying patch:

  $ sudo ./perf probe -m /linux/samples/kprobes/kprobe_example.ko kprobe_init
  Added new event:
    probe:kprobe_init    (on kprobe_init in kprobe_example)

  You can now use it in all perf tools, such as:

  perf record -e probe:kprobe_init -aR sleep 1

  $ sudo cat /sys/kernel/debug/tracing/kprobe_events
  p:probe/kprobe_init kprobe_example:kprobe_init

  $ sudo ./perf record -a -e probe:kprobe_init
  [ perf record: Woken up 1 times to write data ]
  [ perf record: Captured and wrote 0.105 MB perf.data (2 samples) ]

  $ sudo ./perf script
  insmod 13990 [002]  5961.216833: probe:kprobe_init: ...
  insmod 13995 [002]  5962.889384: probe:kprobe_init: ...

Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1461680741-12517-1-git-send-email-ravi.bangoria@linux.vnet.ibm.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/probe-event.c | 76 +++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 73 insertions(+), 3 deletions(-)

diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index bc2eb7c..a977462 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -265,6 +265,65 @@ static bool kprobe_warn_out_range(const char *symbol, unsigned long address)
 	return true;
 }
 
+/*
+ * NOTE:
+ * '.gnu.linkonce.this_module' section of kernel module elf directly
+ * maps to 'struct module' from linux/module.h. This section contains
+ * actual module name which will be used by kernel after loading it.
+ * But, we cannot use 'struct module' here since linux/module.h is not
+ * exposed to user-space. Offset of 'name' has remained same from long
+ * time, so hardcoding it here.
+ */
+#ifdef __LP64__
+#define MOD_NAME_OFFSET 24
+#else
+#define MOD_NAME_OFFSET 12
+#endif
+
+/*
+ * @module can be module name of module file path. In case of path,
+ * inspect elf and find out what is actual module name.
+ * Caller has to free mod_name after using it.
+ */
+static char *find_module_name(const char *module)
+{
+	int fd;
+	Elf *elf;
+	GElf_Ehdr ehdr;
+	GElf_Shdr shdr;
+	Elf_Data *data;
+	Elf_Scn *sec;
+	char *mod_name = NULL;
+
+	fd = open(module, O_RDONLY);
+	if (fd < 0)
+		return NULL;
+
+	elf = elf_begin(fd, PERF_ELF_C_READ_MMAP, NULL);
+	if (elf == NULL)
+		goto elf_err;
+
+	if (gelf_getehdr(elf, &ehdr) == NULL)
+		goto ret_err;
+
+	sec = elf_section_by_name(elf, &ehdr, &shdr,
+			".gnu.linkonce.this_module", NULL);
+	if (!sec)
+		goto ret_err;
+
+	data = elf_getdata(sec, NULL);
+	if (!data || !data->d_buf)
+		goto ret_err;
+
+	mod_name = strdup((char *)data->d_buf + MOD_NAME_OFFSET);
+
+ret_err:
+	elf_end(elf);
+elf_err:
+	close(fd);
+	return mod_name;
+}
+
 #ifdef HAVE_DWARF_SUPPORT
 
 static int kernel_get_module_dso(const char *module, struct dso **pdso)
@@ -2512,6 +2571,7 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev,
 	struct probe_trace_point *tp;
 	int num_matched_functions;
 	int ret, i, j, skipped = 0;
+	char *mod_name;
 
 	map = get_target_map(pev->target, pev->uprobes);
 	if (!map) {
@@ -2596,9 +2656,19 @@ static int find_probe_trace_events_from_map(struct perf_probe_event *pev,
 		tp->realname = strdup_or_goto(sym->name, nomem_out);
 
 		tp->retprobe = pp->retprobe;
-		if (pev->target)
-			tev->point.module = strdup_or_goto(pev->target,
-							   nomem_out);
+		if (pev->target) {
+			if (pev->uprobes) {
+				tev->point.module = strdup_or_goto(pev->target,
+								   nomem_out);
+			} else {
+				mod_name = find_module_name(pev->target);
+				tev->point.module =
+					strdup(mod_name ? mod_name : pev->target);
+				free(mod_name);
+				if (!tev->point.module)
+					goto nomem_out;
+			}
+		}
 		tev->uprobes = pev->uprobes;
 		tev->nargs = pev->nargs;
 		if (tev->nargs) {

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2016-04-27 15:39 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-04-26 14:25 [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support Ravi Bangoria
2016-04-26 14:25 ` [PATCH 2/2] perf probe: Fix offline module name missmatch issue Ravi Bangoria
2016-04-26 14:45   ` Masami Hiramatsu
2016-04-27 15:38   ` [tip:perf/core] " tip-bot for Ravi Bangoria
2016-04-26 14:34 ` [PATCH 1/2] perf probe: Fix module probe issue if no dwarf support Arnaldo Carvalho de Melo
2016-04-26 15:12   ` Ravi Bangoria
2016-04-26 15:44     ` Arnaldo Carvalho de Melo
2016-04-26 14:45 ` Masami Hiramatsu
2016-04-26 15:49 ` Arnaldo Carvalho de Melo
2016-04-27 15:38 ` [tip:perf/core] " tip-bot for Ravi Bangoria

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.