• David Ahern's avatar
    perf kvm: Fix regression with guest machine creation · 207b5792
    David Ahern authored
    Commit 743eb868 reworked when the
    machines were created. Prior to this commit guest machines could be
    created in perf_event__process_kernel_mmap() while processing kernel
    MMAP events. This commit assumes that the machines exist by the time
    perf_session_deliver_event is called (e.g., during processing of build
    id events) - which is not always correct.
    
    One example is the use of default guest args (--guestkallsyms and
    --guestmodules) for short times where no samples hit within a guest
    module. For this case no build id is added to the file header. No build
    id == no machine created. That leads to the next example -- the use of
    no-buildid (-B) on the record for all perf-kvm invocations. In both
    cases perf report dies with a SEGFAULT of the form:
    
    (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
    
    Fix by allowing the machine to be created in perf_session_deliver_event.
    
    Tested with --guestmount option and default guest args, with and without
    -B arg on record for both and for short (10 seconds) and long (10
    minutes) windows.
    Reported-by: default avatarPradeep Kumar Surisetty <psuriset@linux.vnet.ibm.com>
    Signed-off-by: default avatarDavid Ahern <dsahern@gmail.com>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Namhyung Kim <namhyung@gmail.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Pradeep Kumar Surisetty <psuriset@linux.vnet.ibm.com>
    Link: http://lkml.kernel.org/r/1341180697-64515-1-git-send-email-dsahern@gmail.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    207b5792
session.c 41.2 KB