linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] perf kvm: fix segfault with default guest arguments
@ 2012-06-25  4:37 David Ahern
  0 siblings, 0 replies; 12+ messages in thread
From: David Ahern @ 2012-06-25  4:37 UTC (permalink / raw)
  To: linux-kernel
  Cc: psuriset, David Ahern, Arnaldo Carvalho de Melo, Ingo Molnar,
	Jiri Olsa, Namhyung Kim, Frederic Weisbecker, Peter Zijlstra

File generated with:
$ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
    --guestmodules=/tmp/guest-modules record -a

The report command:
$ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
    --guestmodules=/tmp/guest-modules report

dies with a SEGFAULT:
Program received signal SIGSEGV, Segmentation fault.
0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
715			snprintf(bf, size, "[%s.%d]", "guest.kernel.kallsyms", self->pid);

(gdb) bt
    at util/event.c:668
    file_offset=8480) at util/session.c:979
    0x7fffffffdd80) at util/session.c:1363

If no samples hit within a guest module then no build id events are written
to the header during the record. On the report side this cases no 'machine'
to be generated for the default guest (pid == 0) leading to a
machine == NULL in perf_session_deliver_event.

perf's handling of default kallsyms and guest-modules needs to be reworked.
Until then perf should at least not segfault.

Reported-by: Pradeep Kumar Surisetty <psuriset@linux.vnet.ibm.com>
CC: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: David Ahern <dsahern@gmail.com>
---
 tools/perf/util/session.c |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index c3e399b..3999d5e 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -976,6 +976,8 @@ static int perf_session_deliver_event(struct perf_session *session,
 		}
 		return tool->sample(tool, event, sample, evsel, machine);
 	case PERF_RECORD_MMAP:
+		if (machine == NULL)
+			return 0;
 		return tool->mmap(tool, event, sample, machine);
 	case PERF_RECORD_COMM:
 		return tool->comm(tool, event, sample, machine);
-- 
1.7.10.1


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

* [PATCH] perf kvm: fix segfault with default guest arguments
@ 2012-06-25  4:41 David Ahern
  2012-06-25  8:39 ` Namhyung Kim
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: David Ahern @ 2012-06-25  4:41 UTC (permalink / raw)
  To: linux-kernel
  Cc: psuriset, David Ahern, Arnaldo Carvalho de Melo, Ingo Molnar,
	Jiri Olsa, Namhyung Kim, Frederic Weisbecker, Peter Zijlstra

(This time with actual backtrace; forgot to remove the leading '#' on the frames.)

File generated with:
$ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
    --guestmodules=/tmp/guest-modules record -a

The report command:
$ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
    --guestmodules=/tmp/guest-modules report

dies with a SEGFAULT:
Program received signal SIGSEGV, Segmentation fault.
0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
715			snprintf(bf, size, "[%s.%d]", "guest.kernel.kallsyms", self->pid);

(gdb) bt
0  0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
1  0x0000000000444161 in perf_event__process_kernel_mmap (tool=0x7fffffffdd80, event=0x7ffff7fb4120, machine=0x0) at util/event.c:562
2  0x0000000000444642 in perf_event__process_mmap (tool=0x7fffffffdd80, event=0x7ffff7fb4120, sample=0x7fffffffd210, machine=0x0)
    at util/event.c:668
3  0x0000000000470e0b in perf_session_deliver_event (session=0x915ca0, event=0x7ffff7fb4120, sample=0x7fffffffd210, tool=0x7fffffffdd80,
    file_offset=8480) at util/session.c:979
4  0x000000000047032e in flush_sample_queue (s=0x915ca0, tool=0x7fffffffdd80) at util/session.c:679
5  0x0000000000471c8d in __perf_session__process_events (session=0x915ca0, data_offset=400, data_size=150448, file_size=150848, tool=
    0x7fffffffdd80) at util/session.c:1363
6  0x0000000000471d42 in perf_session__process_events (self=0x915ca0, tool=0x7fffffffdd80) at util/session.c:1379
7  0x000000000042484a in __cmd_report (rep=0x7fffffffdd80) at builtin-report.c:368
8  0x0000000000425bf1 in cmd_report (argc=0, argv=0x915b00, prefix=0x0) at builtin-report.c:756
9  0x0000000000438505 in __cmd_report (argc=4, argv=0x7fffffffe260) at builtin-kvm.c:84
10 0x000000000043882a in cmd_kvm (argc=4, argv=0x7fffffffe260, prefix=0x0) at builtin-kvm.c:131
11 0x00000000004152cd in run_builtin (p=0x7a54e8, argc=9, argv=0x7fffffffe260) at perf.c:273
12 0x00000000004154c7 in handle_internal_command (argc=9, argv=0x7fffffffe260) at perf.c:345
13 0x0000000000415613 in run_argv (argcp=0x7fffffffe14c, argv=0x7fffffffe140) at perf.c:389
14 0x0000000000415899 in main (argc=9, argv=0x7fffffffe260) at perf.c:487

If no samples hit within a guest module then no build id events are written
to the header during the record. On the report side this cases no 'machine'
to be generated for the default guest (pid == 0) leading to a
machine == NULL in perf_session_deliver_event.

perf's handling of default kallsyms and guest-modules needs to be reworked.
Until then perf should at least not segfault.

Reported-by: Pradeep Kumar Surisetty <psuriset@linux.vnet.ibm.com>
CC: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Signed-off-by: David Ahern <dsahern@gmail.com>

Signed-off-by: David Ahern <dsahern@gmail.com>
---
 tools/perf/util/session.c |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
index c3e399b..3999d5e 100644
--- a/tools/perf/util/session.c
+++ b/tools/perf/util/session.c
@@ -976,6 +976,8 @@ static int perf_session_deliver_event(struct perf_session *session,
 		}
 		return tool->sample(tool, event, sample, evsel, machine);
 	case PERF_RECORD_MMAP:
+		if (machine == NULL)
+			return 0;
 		return tool->mmap(tool, event, sample, machine);
 	case PERF_RECORD_COMM:
 		return tool->comm(tool, event, sample, machine);
-- 
1.7.10.1


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

* Re: [PATCH] perf kvm: fix segfault with default guest arguments
  2012-06-25  4:41 [PATCH] perf kvm: fix segfault with default guest arguments David Ahern
@ 2012-06-25  8:39 ` Namhyung Kim
  2012-06-25 12:51   ` David Ahern
  2012-06-25 16:08 ` Jiri Olsa
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 12+ messages in thread
From: Namhyung Kim @ 2012-06-25  8:39 UTC (permalink / raw)
  To: David Ahern
  Cc: linux-kernel, psuriset, Arnaldo Carvalho de Melo, Ingo Molnar,
	Jiri Olsa, Frederic Weisbecker, Peter Zijlstra

Hi, David

On Sun, 24 Jun 2012 22:41:26 -0600, David Ahern wrote:
> (This time with actual backtrace; forgot to remove the leading '#' on the frames.)
>
> File generated with:
> $ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
>     --guestmodules=/tmp/guest-modules record -a
>
> The report command:
> $ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
>     --guestmodules=/tmp/guest-modules report
>
> dies with a SEGFAULT:
> Program received signal SIGSEGV, Segmentation fault.
> 0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
> 715			snprintf(bf, size, "[%s.%d]", "guest.kernel.kallsyms", self->pid);
>
> (gdb) bt
> 0  0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
> 1  0x0000000000444161 in perf_event__process_kernel_mmap (tool=0x7fffffffdd80, event=0x7ffff7fb4120, machine=0x0) at util/event.c:562
> 2  0x0000000000444642 in perf_event__process_mmap (tool=0x7fffffffdd80, event=0x7ffff7fb4120, sample=0x7fffffffd210, machine=0x0)
>     at util/event.c:668
> 3  0x0000000000470e0b in perf_session_deliver_event (session=0x915ca0, event=0x7ffff7fb4120, sample=0x7fffffffd210, tool=0x7fffffffdd80,
>     file_offset=8480) at util/session.c:979
> 4  0x000000000047032e in flush_sample_queue (s=0x915ca0, tool=0x7fffffffdd80) at util/session.c:679
> 5  0x0000000000471c8d in __perf_session__process_events (session=0x915ca0, data_offset=400, data_size=150448, file_size=150848, tool=
>     0x7fffffffdd80) at util/session.c:1363
> 6  0x0000000000471d42 in perf_session__process_events (self=0x915ca0, tool=0x7fffffffdd80) at util/session.c:1379
> 7  0x000000000042484a in __cmd_report (rep=0x7fffffffdd80) at builtin-report.c:368
> 8  0x0000000000425bf1 in cmd_report (argc=0, argv=0x915b00, prefix=0x0) at builtin-report.c:756
> 9  0x0000000000438505 in __cmd_report (argc=4, argv=0x7fffffffe260) at builtin-kvm.c:84
> 10 0x000000000043882a in cmd_kvm (argc=4, argv=0x7fffffffe260, prefix=0x0) at builtin-kvm.c:131
> 11 0x00000000004152cd in run_builtin (p=0x7a54e8, argc=9, argv=0x7fffffffe260) at perf.c:273
> 12 0x00000000004154c7 in handle_internal_command (argc=9, argv=0x7fffffffe260) at perf.c:345
> 13 0x0000000000415613 in run_argv (argcp=0x7fffffffe14c, argv=0x7fffffffe140) at perf.c:389
> 14 0x0000000000415899 in main (argc=9, argv=0x7fffffffe260) at perf.c:487
>
> If no samples hit within a guest module then no build id events are written
> to the header during the record. On the report side this cases no 'machine'
> to be generated for the default guest (pid == 0) leading to a
> machine == NULL in perf_session_deliver_event.
>
> perf's handling of default kallsyms and guest-modules needs to be reworked.
> Until then perf should at least not segfault.
>
> Reported-by: Pradeep Kumar Surisetty <psuriset@linux.vnet.ibm.com>
> CC: Arnaldo Carvalho de Melo <acme@redhat.com>
> Cc: Ingo Molnar <mingo@kernel.org>
> Cc: Jiri Olsa <jolsa@redhat.com>
> Cc: Namhyung Kim <namhyung@gmail.com>
> Cc: Frederic Weisbecker <fweisbec@gmail.com>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Signed-off-by: David Ahern <dsahern@gmail.com>
>
> Signed-off-by: David Ahern <dsahern@gmail.com>
> ---
>  tools/perf/util/session.c |    2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
> index c3e399b..3999d5e 100644
> --- a/tools/perf/util/session.c
> +++ b/tools/perf/util/session.c
> @@ -976,6 +976,8 @@ static int perf_session_deliver_event(struct perf_session *session,
>  		}
>  		return tool->sample(tool, event, sample, evsel, machine);
>  	case PERF_RECORD_MMAP:
> +		if (machine == NULL)
> +			return 0;
>  		return tool->mmap(tool, event, sample, machine);
>  	case PERF_RECORD_COMM:
>  		return tool->comm(tool, event, sample, machine);

I don't know about the kvm, but isn't there a possibility that the same
thing happends on other types of event too - i.e. comm, fork, exit..?

Thanks,
Namhyung

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

* Re: [PATCH] perf kvm: fix segfault with default guest arguments
  2012-06-25  8:39 ` Namhyung Kim
@ 2012-06-25 12:51   ` David Ahern
  2012-06-25 19:04     ` David Ahern
  0 siblings, 1 reply; 12+ messages in thread
From: David Ahern @ 2012-06-25 12:51 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: linux-kernel, psuriset, Arnaldo Carvalho de Melo, Ingo Molnar,
	Jiri Olsa, Frederic Weisbecker, Peter Zijlstra

On 6/25/12 2:39 AM, Namhyung Kim wrote
>
> I don't know about the kvm, but isn't there a possibility that the same
> thing happends on other types of event too - i.e. comm, fork, exit..?

COMM, FORK, EXIT events cannot be generated in the guest of a guest; 
host machine is always non-NULL.

David

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

* Re: [PATCH] perf kvm: fix segfault with default guest arguments
  2012-06-25  4:41 [PATCH] perf kvm: fix segfault with default guest arguments David Ahern
  2012-06-25  8:39 ` Namhyung Kim
@ 2012-06-25 16:08 ` Jiri Olsa
  2012-06-25 18:44   ` David Ahern
       [not found] ` <20120628144418.GG4038@infradead.org>
  2012-07-01 22:16 ` David Ahern
  3 siblings, 1 reply; 12+ messages in thread
From: Jiri Olsa @ 2012-06-25 16:08 UTC (permalink / raw)
  To: David Ahern
  Cc: linux-kernel, psuriset, Arnaldo Carvalho de Melo, Ingo Molnar,
	Namhyung Kim, Frederic Weisbecker, Peter Zijlstra

On Sun, Jun 24, 2012 at 10:41:26PM -0600, David Ahern wrote:
> (This time with actual backtrace; forgot to remove the leading '#' on the frames.)
> 
> File generated with:
> $ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
>     --guestmodules=/tmp/guest-modules record -a
> 
> The report command:
> $ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
>     --guestmodules=/tmp/guest-modules report
> 
> dies with a SEGFAULT:
> Program received signal SIGSEGV, Segmentation fault.
> 0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
> 715			snprintf(bf, size, "[%s.%d]", "guest.kernel.kallsyms", self->pid);
> 
> (gdb) bt
> 0  0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
> 1  0x0000000000444161 in perf_event__process_kernel_mmap (tool=0x7fffffffdd80, event=0x7ffff7fb4120, machine=0x0) at util/event.c:562
> 2  0x0000000000444642 in perf_event__process_mmap (tool=0x7fffffffdd80, event=0x7ffff7fb4120, sample=0x7fffffffd210, machine=0x0)
>     at util/event.c:668
> 3  0x0000000000470e0b in perf_session_deliver_event (session=0x915ca0, event=0x7ffff7fb4120, sample=0x7fffffffd210, tool=0x7fffffffdd80,
>     file_offset=8480) at util/session.c:979
> 4  0x000000000047032e in flush_sample_queue (s=0x915ca0, tool=0x7fffffffdd80) at util/session.c:679
> 5  0x0000000000471c8d in __perf_session__process_events (session=0x915ca0, data_offset=400, data_size=150448, file_size=150848, tool=
>     0x7fffffffdd80) at util/session.c:1363
> 6  0x0000000000471d42 in perf_session__process_events (self=0x915ca0, tool=0x7fffffffdd80) at util/session.c:1379
> 7  0x000000000042484a in __cmd_report (rep=0x7fffffffdd80) at builtin-report.c:368
> 8  0x0000000000425bf1 in cmd_report (argc=0, argv=0x915b00, prefix=0x0) at builtin-report.c:756
> 9  0x0000000000438505 in __cmd_report (argc=4, argv=0x7fffffffe260) at builtin-kvm.c:84
> 10 0x000000000043882a in cmd_kvm (argc=4, argv=0x7fffffffe260, prefix=0x0) at builtin-kvm.c:131
> 11 0x00000000004152cd in run_builtin (p=0x7a54e8, argc=9, argv=0x7fffffffe260) at perf.c:273
> 12 0x00000000004154c7 in handle_internal_command (argc=9, argv=0x7fffffffe260) at perf.c:345
> 13 0x0000000000415613 in run_argv (argcp=0x7fffffffe14c, argv=0x7fffffffe140) at perf.c:389
> 14 0x0000000000415899 in main (argc=9, argv=0x7fffffffe260) at perf.c:487
> 
> If no samples hit within a guest module then no build id events are written
> to the header during the record. On the report side this cases no 'machine'
> to be generated for the default guest (pid == 0) leading to a
> machine == NULL in perf_session_deliver_event.
> 
> perf's handling of default kallsyms and guest-modules needs to be reworked.
agreed ;) any plans on that?

jirka

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

* Re: [PATCH] perf kvm: fix segfault with default guest arguments
  2012-06-25 16:08 ` Jiri Olsa
@ 2012-06-25 18:44   ` David Ahern
  0 siblings, 0 replies; 12+ messages in thread
From: David Ahern @ 2012-06-25 18:44 UTC (permalink / raw)
  To: Jiri Olsa
  Cc: linux-kernel, psuriset, Arnaldo Carvalho de Melo, Ingo Molnar,
	Namhyung Kim, Frederic Weisbecker, Peter Zijlstra

On 6/25/12 10:08 AM, Jiri Olsa wrote:
>> perf's handling of default kallsyms and guest-modules needs to be reworked.
> agreed ;) any plans on that?

I am working on it as time allows. After debugging this latest data 
point (running longer avoid the segfault) I certainly understand the 
problem better, but the problem keeps expanding too -- like wrong paths 
on guest side modules. It really suggests that this notion of a 
'default' guest is just wrong - too little information. We'll see.

David

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

* Re: [PATCH] perf kvm: fix segfault with default guest arguments
  2012-06-25 12:51   ` David Ahern
@ 2012-06-25 19:04     ` David Ahern
  2012-06-26  0:35       ` Namhyung Kim
  0 siblings, 1 reply; 12+ messages in thread
From: David Ahern @ 2012-06-25 19:04 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: linux-kernel, psuriset, Arnaldo Carvalho de Melo, Ingo Molnar,
	Jiri Olsa, Frederic Weisbecker, Peter Zijlstra

On 6/25/12 6:51 AM, David Ahern wrote:
> On 6/25/12 2:39 AM, Namhyung Kim wrote
>>
>> I don't know about the kvm, but isn't there a possibility that the same
>> thing happends on other types of event too - i.e. comm, fork, exit..?
>
> COMM, FORK, EXIT events cannot be generated in the guest of a guest;
> host machine is always non-NULL.

s/guest of a guest/context of a guest/

[That's I what get for rushing an email as I run out the door this morning.]


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

* Re: [PATCH] perf kvm: fix segfault with default guest arguments
  2012-06-25 19:04     ` David Ahern
@ 2012-06-26  0:35       ` Namhyung Kim
  0 siblings, 0 replies; 12+ messages in thread
From: Namhyung Kim @ 2012-06-26  0:35 UTC (permalink / raw)
  To: David Ahern
  Cc: linux-kernel, psuriset, Arnaldo Carvalho de Melo, Ingo Molnar,
	Jiri Olsa, Frederic Weisbecker, Peter Zijlstra

On Mon, 25 Jun 2012 13:04:54 -0600, David Ahern wrote:
> On 6/25/12 6:51 AM, David Ahern wrote:
>> On 6/25/12 2:39 AM, Namhyung Kim wrote
>>>
>>> I don't know about the kvm, but isn't there a possibility that the same
>>> thing happends on other types of event too - i.e. comm, fork, exit..?
>>
>> COMM, FORK, EXIT events cannot be generated in the guest of a guest;
>> host machine is always non-NULL.
>
> s/guest of a guest/context of a guest/
>
> [That's I what get for rushing an email as I run out the door this morning.]

:) Thanks for the correction!

Thanks,
Namhyung

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

* Re: [PATCH] perf kvm: fix segfault with default guest arguments
       [not found] ` <20120628144418.GG4038@infradead.org>
@ 2012-06-28 14:51   ` David Ahern
  2012-06-28 14:52   ` David Ahern
  2012-06-30  0:40   ` David Ahern
  2 siblings, 0 replies; 12+ messages in thread
From: David Ahern @ 2012-06-28 14:51 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, psuriset, Ingo Molnar, Jiri Olsa, Namhyung Kim,
	Frederic Weisbecker, Peter Zijlstra

On 6/28/12 8:44 AM, Arnaldo Carvalho de Melo wrote:
> Em Sun, Jun 24, 2012 at 10:41:26PM -0600, David Ahern escreveu:
>> File generated with:
>> $ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
>>      --guestmodules=/tmp/guest-modules record -a
>>
>> The report command:
>> $ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
>>      --guestmodules=/tmp/guest-modules report
>>
>> dies with a SEGFAULT:
>> Program received signal SIGSEGV, Segmentation fault.
>> 0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
>> 715			snprintf(bf, size, "[%s.%d]", "guest.kernel.kallsyms", self->pid);
>>
>> (gdb) bt
>> 0  0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
>> 1  0x0000000000444161 in perf_event__process_kernel_mmap (tool=0x7fffffffdd80, event=0x7ffff7fb4120, machine=0x0) at util/event.c:562
>
> I think that this should be handled at perf_event__process_kernel_mmap,
> i.e. tools can conceivably handle this situation in their specific
> handlers.
>
>>   @@ -976,6 +976,8 @@ static int perf_session_deliver_event(struct perf_session *session,
>>   		}
>>   		return tool->sample(tool, event, sample, evsel, machine);
>>   	case PERF_RECORD_MMAP:
>> +		if (machine == NULL)
>> +			return 0;
>>   		return tool->mmap(tool, event, sample, machine);
>>
> - Arnaldo
>

Ok. Doing it in perf_session_deliver_event makes it consistent with the 
SAMPLE case.

David

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

* Re: [PATCH] perf kvm: fix segfault with default guest arguments
       [not found] ` <20120628144418.GG4038@infradead.org>
  2012-06-28 14:51   ` David Ahern
@ 2012-06-28 14:52   ` David Ahern
  2012-06-30  0:40   ` David Ahern
  2 siblings, 0 replies; 12+ messages in thread
From: David Ahern @ 2012-06-28 14:52 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, psuriset, Ingo Molnar, Jiri Olsa, Namhyung Kim,
	Frederic Weisbecker, Peter Zijlstra

On 6/28/12 8:44 AM, Arnaldo Carvalho de Melo wrote:
> Em Sun, Jun 24, 2012 at 10:41:26PM -0600, David Ahern escreveu:
>> File generated with:
>> $ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
>>      --guestmodules=/tmp/guest-modules record -a
>>
>> The report command:
>> $ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
>>      --guestmodules=/tmp/guest-modules report
>>
>> dies with a SEGFAULT:
>> Program received signal SIGSEGV, Segmentation fault.
>> 0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
>> 715			snprintf(bf, size, "[%s.%d]", "guest.kernel.kallsyms", self->pid);
>>
>> (gdb) bt
>> 0  0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
>> 1  0x0000000000444161 in perf_event__process_kernel_mmap (tool=0x7fffffffdd80, event=0x7ffff7fb4120, machine=0x0) at util/event.c:562
>
> I think that this should be handled at perf_event__process_kernel_mmap,
> i.e. tools can conceivably handle this situation in their specific
> handlers.
>
>>   @@ -976,6 +976,8 @@ static int perf_session_deliver_event(struct perf_session *session,
>>   		}
>>   		return tool->sample(tool, event, sample, evsel, machine);
>>   	case PERF_RECORD_MMAP:
>> +		if (machine == NULL)
>> +			return 0;
>>   		return tool->mmap(tool, event, sample, machine);
>>
> - Arnaldo
>

Ok. Doing it in perf_session_deliver_event makes it consistent with the 
SAMPLE case.

David

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

* Re: [PATCH] perf kvm: fix segfault with default guest arguments
       [not found] ` <20120628144418.GG4038@infradead.org>
  2012-06-28 14:51   ` David Ahern
  2012-06-28 14:52   ` David Ahern
@ 2012-06-30  0:40   ` David Ahern
  2 siblings, 0 replies; 12+ messages in thread
From: David Ahern @ 2012-06-30  0:40 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: linux-kernel, psuriset, Ingo Molnar, Jiri Olsa, Namhyung Kim,
	Frederic Weisbecker, Peter Zijlstra

On 6/28/12 8:44 AM, Arnaldo Carvalho de Melo wrote:
> Em Sun, Jun 24, 2012 at 10:41:26PM -0600, David Ahern escreveu:
>> File generated with:
>> $ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
>>      --guestmodules=/tmp/guest-modules record -a
>>
>> The report command:
>> $ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
>>      --guestmodules=/tmp/guest-modules report
>>
>> dies with a SEGFAULT:
>> Program received signal SIGSEGV, Segmentation fault.
>> 0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
>> 715			snprintf(bf, size, "[%s.%d]", "guest.kernel.kallsyms", self->pid);
>>
>> (gdb) bt
>> 0  0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
>> 1  0x0000000000444161 in perf_event__process_kernel_mmap (tool=0x7fffffffdd80, event=0x7ffff7fb4120, machine=0x0) at util/event.c:562
>

So this is the root cause of the SEGFAULT:

743eb868657bdb1b26c7b24077ca21c67c82c777 is the first bad commit
commit 743eb868657bdb1b26c7b24077ca21c67c82c777
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
Date:   Mon Nov 28 07:56:39 2011 -0200

     perf tools: Resolve machine earlier and pass it to perf_event_ops

     Reducing the exposure of perf_session further, so that we can use the
     classes in cases where no perf.data file is created.

     Cc: David Ahern <dsahern@gmail.com>
     Cc: Frederic Weisbecker <fweisbec@gmail.com>
     Cc: Mike Galbraith <efault@gmx.de>
     Cc: Paul Mackerras <paulus@samba.org>
     Cc: Peter Zijlstra <peterz@infradead.org>
     Cc: Stephane Eranian <eranian@google.com>
     Link: 
http://lkml.kernel.org/n/tip-stua66dcscsezzrcdugvbmvd@git.kernel.org
     Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

:040000 040000 414f7e982a230f633440b3da2900da4d2d9c30ef
3231e148910bd596c61814e18bba77ecf7ad5dfb M  tools


specifically, this part:

-   machine = perf_session__findnew_machine(session, event->mmap.pid);
-   if (!machine) {
-       pr_err("Can't find id %d's machine\n", event->mmap.pid);
-       goto out_problem;
-   }
-

Suggestions on how to fix that part?

More to the perf-kvm story; details in future emails.

David

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

* Re: [PATCH] perf kvm: fix segfault with default guest arguments
  2012-06-25  4:41 [PATCH] perf kvm: fix segfault with default guest arguments David Ahern
                   ` (2 preceding siblings ...)
       [not found] ` <20120628144418.GG4038@infradead.org>
@ 2012-07-01 22:16 ` David Ahern
  3 siblings, 0 replies; 12+ messages in thread
From: David Ahern @ 2012-07-01 22:16 UTC (permalink / raw)
  To: psuriset, Arnaldo Carvalho de Melo
  Cc: linux-kernel, Ingo Molnar, Jiri Olsa, Namhyung Kim,
	Frederic Weisbecker, Peter Zijlstra

Arnaldo:

Please ignore this one in favor of the patch I just sent -- 'perf kvm: 
fix regression with guest machine creation'.


On 6/24/12 10:41 PM, David Ahern wrote:
> (This time with actual backtrace; forgot to remove the leading '#' on the frames.)
>
> File generated with:
> $ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
>      --guestmodules=/tmp/guest-modules record -a
>
> The report command:
> $ perf kvm --host --guest --guestkallsyms=/tmp/guest-kallsyms
>      --guestmodules=/tmp/guest-modules report
>
> dies with a SEGFAULT:
> Program received signal SIGSEGV, Segmentation fault.
> 0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
> 715			snprintf(bf, size, "[%s.%d]", "guest.kernel.kallsyms", self->pid);
>
> (gdb) bt
> 0  0x000000000046dd7b in machine__mmap_name (self=0x0, bf=0x7fffffffbd20 "q\021", size=4096) at util/map.c:715
> 1  0x0000000000444161 in perf_event__process_kernel_mmap (tool=0x7fffffffdd80, event=0x7ffff7fb4120, machine=0x0) at util/event.c:562
> 2  0x0000000000444642 in perf_event__process_mmap (tool=0x7fffffffdd80, event=0x7ffff7fb4120, sample=0x7fffffffd210, machine=0x0)
>      at util/event.c:668
> 3  0x0000000000470e0b in perf_session_deliver_event (session=0x915ca0, event=0x7ffff7fb4120, sample=0x7fffffffd210, tool=0x7fffffffdd80,
>      file_offset=8480) at util/session.c:979
> 4  0x000000000047032e in flush_sample_queue (s=0x915ca0, tool=0x7fffffffdd80) at util/session.c:679
> 5  0x0000000000471c8d in __perf_session__process_events (session=0x915ca0, data_offset=400, data_size=150448, file_size=150848, tool=
>      0x7fffffffdd80) at util/session.c:1363
> 6  0x0000000000471d42 in perf_session__process_events (self=0x915ca0, tool=0x7fffffffdd80) at util/session.c:1379
> 7  0x000000000042484a in __cmd_report (rep=0x7fffffffdd80) at builtin-report.c:368
> 8  0x0000000000425bf1 in cmd_report (argc=0, argv=0x915b00, prefix=0x0) at builtin-report.c:756
> 9  0x0000000000438505 in __cmd_report (argc=4, argv=0x7fffffffe260) at builtin-kvm.c:84
> 10 0x000000000043882a in cmd_kvm (argc=4, argv=0x7fffffffe260, prefix=0x0) at builtin-kvm.c:131
> 11 0x00000000004152cd in run_builtin (p=0x7a54e8, argc=9, argv=0x7fffffffe260) at perf.c:273
> 12 0x00000000004154c7 in handle_internal_command (argc=9, argv=0x7fffffffe260) at perf.c:345
> 13 0x0000000000415613 in run_argv (argcp=0x7fffffffe14c, argv=0x7fffffffe140) at perf.c:389
> 14 0x0000000000415899 in main (argc=9, argv=0x7fffffffe260) at perf.c:487
>
> If no samples hit within a guest module then no build id events are written
> to the header during the record. On the report side this cases no 'machine'
> to be generated for the default guest (pid == 0) leading to a
> machine == NULL in perf_session_deliver_event.
>
> perf's handling of default kallsyms and guest-modules needs to be reworked.
> Until then perf should at least not segfault.
>
> Reported-by: Pradeep Kumar Surisetty <psuriset@linux.vnet.ibm.com>
> CC: Arnaldo Carvalho de Melo <acme@redhat.com>
> Cc: Ingo Molnar <mingo@kernel.org>
> Cc: Jiri Olsa <jolsa@redhat.com>
> Cc: Namhyung Kim <namhyung@gmail.com>
> Cc: Frederic Weisbecker <fweisbec@gmail.com>
> Cc: Peter Zijlstra <peterz@infradead.org>
> Signed-off-by: David Ahern <dsahern@gmail.com>
>
> Signed-off-by: David Ahern <dsahern@gmail.com>
> ---
>   tools/perf/util/session.c |    2 ++
>   1 file changed, 2 insertions(+)
>
> diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
> index c3e399b..3999d5e 100644
> --- a/tools/perf/util/session.c
> +++ b/tools/perf/util/session.c
> @@ -976,6 +976,8 @@ static int perf_session_deliver_event(struct perf_session *session,
>   		}
>   		return tool->sample(tool, event, sample, evsel, machine);
>   	case PERF_RECORD_MMAP:
> +		if (machine == NULL)
> +			return 0;
>   		return tool->mmap(tool, event, sample, machine);
>   	case PERF_RECORD_COMM:
>   		return tool->comm(tool, event, sample, machine);
>



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

end of thread, other threads:[~2012-07-01 22:16 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-06-25  4:41 [PATCH] perf kvm: fix segfault with default guest arguments David Ahern
2012-06-25  8:39 ` Namhyung Kim
2012-06-25 12:51   ` David Ahern
2012-06-25 19:04     ` David Ahern
2012-06-26  0:35       ` Namhyung Kim
2012-06-25 16:08 ` Jiri Olsa
2012-06-25 18:44   ` David Ahern
     [not found] ` <20120628144418.GG4038@infradead.org>
2012-06-28 14:51   ` David Ahern
2012-06-28 14:52   ` David Ahern
2012-06-30  0:40   ` David Ahern
2012-07-01 22:16 ` David Ahern
  -- strict thread matches above, loose matches on Subject: below --
2012-06-25  4:37 David Ahern

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).