14 Dec, 2009

2 commits

  • Here, tvec->tv_usec is "unsigned int" not "unsigned long".

    Since the type is different on every platform, it's probably
    best to just use long printf formats and cast.

    Signed-off-by: David S. Miller
    Cc: Peter Zijlstra
    Cc: Mike Galbraith
    Cc: Paul Mackerras
    Cc: Arnaldo Carvalho de Melo
    Cc: Frederic Weisbecker
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    David Miller
     
  • This patch adds a new "all" pseudo subsystem and an "all" pseudo
    suite. These are for testing all subsystem and its all suite, or
    all suite of one subsystem.

    (This patch also contains a few trivial comment fixes for
    bench/* and output style fixes. I judged that there are no
    necessity to make them into individual patch.)

    Example of use:

    | % ./perf bench sched all # Test all suites of sched subsystem
    | # Running sched/messaging benchmark...
    | # 20 sender and receiver processes per group
    | # 10 groups == 400 processes run
    |
    | Total time: 0.414 [sec]
    |
    | # Running sched/pipe benchmark...
    | # Extecuted 1000000 pipe operations between two tasks
    |
    | Total time: 10.999 [sec]
    |
    | 10.999317 usecs/op
    | 90914 ops/sec
    |
    | % ./perf bench all # Test all suites of all subsystems
    | # Running sched/messaging benchmark...
    | # 20 sender and receiver processes per group
    | # 10 groups == 400 processes run
    |
    | Total time: 0.420 [sec]
    |
    | # Running sched/pipe benchmark...
    | # Extecuted 1000000 pipe operations between two tasks
    |
    | Total time: 11.741 [sec]
    |
    | 11.741346 usecs/op
    | 85169 ops/sec
    |
    | # Running mem/memcpy benchmark...
    | # Copying 1MB Bytes from 0x7ff33e920010 to 0x7ff3401ae010 ...
    |
    | 808.407437 MB/Sec

    Signed-off-by: Hitoshi Mitake
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Cc: Frederic Weisbecker
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Hitoshi Mitake
     

12 Dec, 2009

8 commits

  • That does all the initialization boilerplate, opening the file,
    reading the header, checking if it is valid, etc.

    And that will as well have the threads list, kmap (now) global
    variable, etc, so that we can handle two (or more) perf.data files
    describing sessions to compare.

    Signed-off-by: Arnaldo Carvalho de Melo
    Cc: Frédéric Weisbecker
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     
  • It is always wired to dso__find_symbol.

    Signed-off-by: Arnaldo Carvalho de Melo
    Cc: Frédéric Weisbecker
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     
  • Configurable via symbol_conf.sort_by_name, so that the cost of an
    extra rb_node on all 'struct symbol' instances is not paid by tools
    that only want to decode addresses.

    How to use it:

    symbol_conf.sort_by_name = true;
    symbol_init(&symbol_conf);

    struct map *map = map_groups__find_by_name(kmaps, MAP__VARIABLE, "[kernel.kallsyms]");

    if (map == NULL) {
    pr_err("couldn't find map!\n");
    kernel_maps__fprintf(stdout);
    } else {
    struct symbol *sym = map__find_symbol_by_name(map, sym_filter, NULL);
    if (sym == NULL)
    pr_err("couldn't find symbol %s!\n", sym_filter);
    else
    pr_info("symbol %s: %#Lx-%#Lx \n", sym_filter, sym->start, sym->end);
    }

    Looking over the vmlinux/kallsyms is common enough that I'll add a
    variable to the upcoming struct perf_session to avoid the need to
    use map_groups__find_by_name to get the main vmlinux/kallsyms map.

    The above example looks on the 'variable' symtab, but it is just
    like that for the functions one.

    Also the sort operation is done when we first use
    map__find_symbol_by_name, in a lazy way.

    Signed-off-by: Arnaldo Carvalho de Melo
    Cc: Frédéric Weisbecker
    Cc: Masami Hiramatsu
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     
  • Signed-off-by: Arnaldo Carvalho de Melo
    Cc: Frédéric Weisbecker
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     
  • Example:

    {
    u64 addr = strtoull(sym_filter, NULL, 16);
    struct map *map = map_groups__find(kmaps, MAP__VARIABLE, addr);

    if (map == NULL)
    pr_err("couldn't find map!\n");
    else {
    struct symbol *sym = map__find_symbol(map, addr, NULL);
    if (sym == NULL)
    pr_err("couldn't find addr!\n");
    else
    pr_info("addr %#Lx is in %s global var\n", addr, sym->name);
    }
    exit(0);
    }

    Added just after symbol__init() call in 'perf top', then:

    {
    u64 addr = strtoull(sym_filter, NULL, 16);
    struct map *map = map_groups__find(kmaps, MAP__VARIABLE, addr);

    if (map == NULL)
    pr_err("couldn't find map!\n");
    else {
    struct symbol *sym = map__find_symbol(map, addr, NULL);
    if (sym == NULL)
    pr_err("couldn't find addr!\n");
    else
    pr_info("addr %#Lx is in %s global var\n", addr, sym->name);
    }
    exit(0);
    }

    [root@doppio linux-2.6-tip]# grep ' [dD] ' /proc/kallsyms | grep ' sched'
    ffffffff817827d8 d sched_nr_latency
    ffffffff81782ce0 d sched_domains_mutex
    ffffffff8178c070 d schedstr.22423
    ffffffff817909a0 d sched_register_mutex
    ffffffff81823490 d sched_feat_names
    ffffffff81823558 d scheduler_running
    ffffffff818235b8 d sched_clock_running
    ffffffff818235bc D sched_clock_stable
    ffffffff81824f00 d sched_switch_trace
    [root@doppio linux-2.6-tip]# perf top -s 0xffffffff817827d9
    addr 0xffffffff817827d9 is in sched_nr_latency global var
    [root@doppio linux-2.6-tip]# perf top -s ffffffff81782ce0
    addr 0xffffffff81782ce0 is in sched_domains_mutex global var
    [root@doppio linux-2.6-tip]#
    [root@doppio linux-2.6-tip]# perf top -s ffffffff81782ce0 --vmlinux OFF
    The file OFF cannot be used, trying to use /proc/kallsyms...addr 0xffffffff81782ce0 is in sched_domains_mutex global var
    [root@doppio linux-2.6-tip]# perf top -s ffffffff818235bc --vmlinux OFF
    The file OFF cannot be used, trying to use /proc/kallsyms...addr 0xffffffff818235bc is in sched_clock_stable global var
    [root@doppio linux-2.6-tip]#

    So it works with both /proc/kallsyms and with ELF symtabs, either
    the one on the vmlinux explicitely passed via --vmlinux or in one
    in the vmlinux_path that matches the buildid for the running kernel
    or the one found in the buildid header section in a perf.data file.

    Signed-off-by: Arnaldo Carvalho de Melo
    Cc: Frédéric Weisbecker
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     
  • For selecting the right types of symbols in ELF symtabs.

    Signed-off-by: Arnaldo Carvalho de Melo
    Cc: Frédéric Weisbecker
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     
  • For selecting the right types of symbols in /proc/kallsyms, will be
    followed by elf_symbol_type__is_a, for the same purpose on ELF
    symtabs.

    Signed-off-by: Arnaldo Carvalho de Melo
    Cc: Frédéric Weisbecker
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     
  • Using a struct thread instance just to hold the kernel space maps
    (vmlinux + modules) is overkill and confuses people trying to
    understand the perf symbols abstractions.

    The kernel maps are really present in all threads, i.e. the kernel
    is a library, not a separate thread.

    So introduce the 'map_groups' abstraction and use it for the kernel
    maps, now in the kmaps global variable.

    It, in turn, will move, together with the threads list to the
    perf_file abstraction, so that we can support multiple perf_file
    instances, needed by perf diff.

    Brainstormed-with: Eduardo Habkost
    Signed-off-by: Arnaldo Carvalho de Melo
    Cc: Eduardo Habkost
    Cc: Frédéric Weisbecker
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     

11 Dec, 2009

2 commits

  • Add definitions of rmb() and cpu_relax() and include the ARM
    unistd.h header. The __kuser_memory_barrier helper in the helper
    page is used to provide the correct memory barrier depending on
    the CPU type.

    [ The rmb() will work on v6 and v7, segfault on v5. Dynamic
    detection to add v5 support will be added later. ]

    Signed-off-by: Jamie Iles
    Cc: Russell King
    Cc: Peter Zijlstra
    Cc: Mikael Pettersson
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Jamie Iles
     
  • For embedded platforms, we want to be able to build the perf
    tools on a build machine to run on a different arch. This patch
    allows $CROSS_COMPILE to set the cross compiler.

    Additionally, if NO_LIBPERL is set, then don't use perl include
    paths as they will be for the host arch.

    Signed-off-by: Jamie Iles
    Cc: Peter Zijlstra
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Jamie Iles
     

10 Dec, 2009

7 commits

  • Fix:

    builtin-kmem.c: In function 'parse_caller_opt':
    builtin-kmem.c:690: error: unused parameter 'arg'
    builtin-kmem.c: In function 'parse_alloc_opt':
    builtin-kmem.c:697: error: unused parameter 'arg'

    Cc: Li Zefan
    Cc: Pekka Enberg
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Ingo Molnar
     
  • As off_t is a long, so breaking things on 32-bit land. Now
    buildids work on 32-bit land.

    [root@ana ~]# uname -a
    Linux ana.ghostprotocols.net 2.6.31.6-162.fc12.i686 #1 SMP Fri
    Dec 4 01:09:09 EST 2009 i686 i686 i386 GNU/Linux [root@ana ~]#
    perf buildid-list | tail -5
    136ee6792ba2ae57870ecd87369f4ae3194d5b27 /lib/libreadline.so.6.0
    d202dcb1ad48d140065783657d37ae3f2d9ab83f /usr/bin/gdb
    0a56c0c00dcc2e9e581ae9997f31957c9c4671df
    /usr/lib/libdwarf.so.0.0
    5f9e6ac95241cbb3227608e0ff2a2e0cbbe72439 /home/acme/bin/perf
    925d19eccc2ddb1c9d74dd178a011426f1b124a8 /bin/sleep [root@ana ~]#

    Signed-off-by: Arnaldo Carvalho de Melo
    Cc: Frédéric Weisbecker
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     
  • Signed-off-by: Arnaldo Carvalho de Melo
    Cc: Frédéric Weisbecker
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     
  • Before:

    $ ./perf kmem
    ...
    -l, --line show n lines
    --raw-ip show raw ip instead of symbol

    After:

    $ ./perf kmem
    ...
    -l, --line show n lines
    --raw-ip show raw ip instead of symbol

    Signed-off-by: Li Zefan
    Cc: Pekka Enberg
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Li Zefan
     
  • As Ingo suggested, make "perf kmem" show help information.
    "perf kmem stat [--caller] [--alloc] .." will show memory
    statistics.

    Signed-off-by: Li Zefan
    Acked-by: Pekka Enberg
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Li Zefan
     
  • When we have a maximum latency reported for a task, we need a
    convenient way to find the matching location to the raw traces
    or to perf sched map that shows where the task has been
    eventually scheduled in. This gives a pointer to retrieve the
    events that occured during this max latency.

    Signed-off-by: Frederic Weisbecker
    Reviewed-by: Xiao Guangrong
    Cc: Peter Zijlstra
    Cc: Arnaldo Carvalho de Melo
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Frederic Weisbecker
     
  • Memset should be given the size of the structure, not the size
    of the pointer.

    The semantic patch that makes this change is as follows:
    (http://coccinelle.lip6.fr/)

    //
    @@
    type T;
    T *x;
    expression E;
    @@

    memset(x, E, sizeof(
    + *
    x))
    //

    Signed-off-by: Julia Lawall
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Julia Lawall
     

09 Dec, 2009

8 commits

  • In current code, task's execute time is got by reading
    '/proc//sched' file, it's wrong if the task is created
    by pthread_create(), because every thread task has same pid.

    This way also has two demerits:

    1: 'perf sched replay' can't work if the kernel is not
    compiled with the 'CONFIG_SCHED_DEBUG' option

    2: perf tool should depend on proc file system

    So, this patch uses PERF_COUNT_SW_TASK_CLOCK to get task's
    execution time instead of reading /proc file.

    Changelog v2 -> v3:
    use PERF_COUNT_SW_TASK_CLOCK instead of rusage() as Ingo's
    suggestion

    Reported-by: Torok Edwin
    Signed-off-by: Xiao Guangrong
    Cc: Xiao Guangrong
    Cc: Peter Zijlstra
    Cc: Frederic Weisbecker
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Xiao Guangrong
     
  • Add --list and --del option descriptions to perf-probe.txt.

    Signed-off-by: Masami Hiramatsu
    Cc: Steven Rostedt
    Cc: Jim Keniston
    Cc: Ananth N Mavinakayanahalli
    Cc: Christoph Hellwig
    Cc: Frank Ch. Eigler
    Cc: Frederic Weisbecker
    Cc: Jason Baron
    Cc: K.Prasad
    Cc: Peter Zijlstra
    Cc: Srikar Dronamraju
    Cc: Arnaldo Carvalho de Melo
    Cc: systemtap
    Cc: DLE
    Cc: Frederic Weisbecker
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • Support perf probe --del option. Currently,
    perf probe can have only one event for each --del option.
    If you'd like to delete several probe events, you need
    to specify --del for each events.

    Signed-off-by: Masami Hiramatsu
    Cc: Steven Rostedt
    Cc: Jim Keniston
    Cc: Ananth N Mavinakayanahalli
    Cc: Christoph Hellwig
    Cc: Frank Ch. Eigler
    Cc: Frederic Weisbecker
    Cc: Jason Baron
    Cc: K.Prasad
    Cc: Peter Zijlstra
    Cc: Srikar Dronamraju
    Cc: Arnaldo Carvalho de Melo
    Cc: systemtap
    Cc: DLE
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • Support vmlinux on current working direcotry by default and
    also update file-open messages.
    Now perf probe searches ./vmlinux too.

    Signed-off-by: Masami Hiramatsu
    Cc: Steven Rostedt
    Cc: Jim Keniston
    Cc: Ananth N Mavinakayanahalli
    Cc: Christoph Hellwig
    Cc: Frank Ch. Eigler
    Cc: Frederic Weisbecker
    Cc: Jason Baron
    Cc: K.Prasad
    Cc: Peter Zijlstra
    Cc: Srikar Dronamraju
    Cc: Arnaldo Carvalho de Melo
    Cc: systemtap
    Cc: DLE
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • Remove event suffix number _0 if it is the first.
    The first event has no suffix, and from the second,
    each event has suffix number counted from _1. This
    reduces typing cost :-).

    Signed-off-by: Masami Hiramatsu
    Cc: Steven Rostedt
    Cc: Jim Keniston
    Cc: Ananth N Mavinakayanahalli
    Cc: Christoph Hellwig
    Cc: Frank Ch. Eigler
    Cc: Frederic Weisbecker
    Cc: Jason Baron
    Cc: K.Prasad
    Cc: Peter Zijlstra
    Cc: Srikar Dronamraju
    Cc: Arnaldo Carvalho de Melo
    Cc: systemtap
    Cc: DLE
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • Fix add-probe command syntax without --add option.
    perf-probe supports add-probe command without --add
    option. But it treats each argument as an event definition.
    e.g.

    perf probe func arg1 arg2

    is interpreted as

    perf probe --add func --add arg1 --add arg2

    But it may be useless in many cases.

    This patch fixes this syntax to fold those arguments into
    one event definition if there is no --add option. With this
    change, above command is interpreted as below;

    perf probe --add "func arg1 arg2"

    Signed-off-by: Masami Hiramatsu
    Cc: Steven Rostedt
    Cc: Jim Keniston
    Cc: Ananth N Mavinakayanahalli
    Cc: Christoph Hellwig
    Cc: Frank Ch. Eigler
    Cc: Frederic Weisbecker
    Cc: Jason Baron
    Cc: K.Prasad
    Cc: Peter Zijlstra
    Cc: Srikar Dronamraju
    Cc: Arnaldo Carvalho de Melo
    Cc: systemtap
    Cc: DLE
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • Change probe-added message more user-friendly expression and
    show usage of new events.

    Before:
    Added new event: p:probe/schedule_0 schedule+10 prev=%ax cpu=%bx

    After:
    Added new event:
    probe:schedule_1 (on schedule+1 with prev cpu)

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

    perf record -e probe:schedule_1 -a sleep 1

    Signed-off-by: Masami Hiramatsu
    Cc: Steven Rostedt
    Cc: Jim Keniston
    Cc: Ananth N Mavinakayanahalli
    Cc: Christoph Hellwig
    Cc: Frank Ch. Eigler
    Cc: Frederic Weisbecker
    Cc: Jason Baron
    Cc: K.Prasad
    Cc: Peter Zijlstra
    Cc: Srikar Dronamraju
    Cc: Arnaldo Carvalho de Melo
    Cc: systemtap
    Cc: DLE
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • Change event list format for user readability. perf probe --list
    shows event list in "[GROUP:EVENT] EVENT-DEFINITION" format, but
    this format is different from the output of perf-list, and
    EVENT-DEFINITION is a bit blunt. This patch changes the format to
    more user friendly one.

    Before:
    [probe:schedule_0] schedule+10 prev cpu

    After:
    probe:schedule_0 (on schedule+10 with prev cpu)

    Signed-off-by: Masami Hiramatsu
    Cc: Steven Rostedt
    Cc: Jim Keniston
    Cc: Ananth N Mavinakayanahalli
    Cc: Christoph Hellwig
    Cc: Frank Ch. Eigler
    Cc: Frederic Weisbecker
    Cc: Jason Baron
    Cc: K.Prasad
    Cc: Peter Zijlstra
    Cc: Srikar Dronamraju
    Cc: Arnaldo Carvalho de Melo
    Cc: systemtap
    Cc: DLE
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     

08 Dec, 2009

4 commits

  • Use pr_debug() for "missing vmlinux" debugging message.

    Signed-off-by: Masami Hiramatsu
    Cc: systemtap
    Cc: DLE
    Cc: Frederic Weisbecker
    Cc: Arnaldo Carvalho de Melo
    Cc: Frederic Weisbecker
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • Check e_snprintf() format string by gcc, and fix a bug of
    e_snprintf() caller.

    Signed-off-by: Masami Hiramatsu
    Cc: systemtap
    Cc: DLE
    Cc: Frederic Weisbecker
    Cc: Arnaldo Carvalho de Melo
    Cc: Frederic Weisbecker
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • Fix event namelist to duplicate string. Without duplicating, adding
    multiple probes causes stack overwrite bug, because it reuses a
    buffer on stack while the buffer is already added in the namelist.
    String duplication solves this bug because only contents of the
    buffer is copied to the namelist.

    Signed-off-by: Masami Hiramatsu
    Cc: systemtap
    Cc: DLE
    Cc: Frederic Weisbecker
    Cc: Arnaldo Carvalho de Melo
    Cc: Frederic Weisbecker
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Masami Hiramatsu
     
  • Fix strtailcmp() to compare s1[0] and s2[0]. strtailcmp() returns 0
    if "a" and "b" or "a" and "ab", it's a wrong behavior. This patch
    fixes it.

    Signed-off-by: "Juha Leppanen"
    Acked-by: Masami Hiramatsu
    Cc: systemtap
    Cc: DLE
    Cc: Juha Leppanen
    Cc: Frederic Weisbecker
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Juha Leppanen
     

07 Dec, 2009

9 commits

  • Uses of strcat are almost always signs that someone is too lazy
    to think about the code a bit more carefully. One always has to
    know about the lengths of the strings involved to avoid buffer
    overflows.

    This is one case where the size of the object code for me is
    reduced by 38 bytes. The code should also be faster, especially
    if flags is non-NULL.

    Signed-off-by: Ulrich Drepper
    Cc: a.p.zijlstra@chello.nl
    Cc: fweisbec@gmail.com
    Cc: jaswinderrajput@gmail.com
    Cc: paulus@samba.org
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Ulrich Drepper
     
  • The 'scripting unsupported' message should only be displayed
    when the -s or -g options are used, and not when they aren't, as
    the current code does.

    Signed-off-by: Tom Zanussi
    Cc: rostedt@goodmis.org
    Cc: Peter Zijlstra
    Cc: Mike Galbraith
    Cc: Paul Mackerras
    Cc: Arnaldo Carvalho de Melo
    Cc: Frederic Weisbecker
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Tom Zanussi
     
  • When I added the xs callbacks into perf, I forgot to re-check
    the no-libperl case. This patch fixes the undefined reference
    error for that.

    Reported-by: Arnaldo Carvalho de Melo
    Signed-off-by: Tom Zanussi
    Cc: Frederic Weisbecker
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Tom Zanussi
     
  • raw->size is not used, this patch just cleans it up.

    Signed-off-by: Xiao Guangrong
    Cc: Frederic Weisbecker
    Cc: Paul Mackerras
    Cc: OGAWA Hirofumi
    Cc: Peter Zijlstra
    Cc: Li Zefan
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Xiao Guangrong
     
  • The remain buff size is 'len - pos->long_name_len - 1', not
    'len - pos->long_name_len + 1'

    This bug was introduced by commit 7691b1e ("perf tools: Misc small
    fixes").

    Signed-off-by: Xiao Guangrong
    Acked-by: OGAWA Hirofumi
    Cc: Frederic Weisbecker
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Li Zefan
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Xiao Guangrong
     
  • We use 'data.raw_data' parameter to call process_raw_event(),
    but data.raw_data buffer not include data size. it can make perf
    tool crash.

    This bug was introduced by commit 180f95e29a ("perf: Make common
    SAMPLE_EVENT parser").

    Signed-off-by: Xiao Guangrong
    Cc: Pekka Enberg
    Cc: Eduard - Gabriel Munteanu
    Cc: Frederic Weisbecker
    Cc: Paul Mackerras
    Cc: OGAWA Hirofumi
    Cc: Peter Zijlstra
    Cc: Li Zefan
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Xiao Guangrong
     
  • If we use 'perf sched trace', it will call symbol__init() again,
    and can lead to a perf tool crash:

    [root@localhost perf]# ./perf sched trace
    *** glibc detected *** ./perf: free(): invalid next size (normal): 0x094c1898 ***
    ======= Backtrace: =========
    /lib/libc.so.6[0xb7602404]
    /lib/libc.so.6(cfree+0x96)[0xb76043b6]
    ./perf[0x80730fe]
    ./perf[0x8074c97]
    ./perf[0x805eb59]
    ./perf[0x80536fd]
    ./perf[0x804b618]
    ./perf[0x804bdc3]
    /lib/libc.so.6(__libc_start_main+0xe5)[0xb75a9735]
    ./perf[0x804af81]
    ======= Memory map: ========
    08048000-08158000 r-xp 00000000 fe:00 556831 /home/eric/....
    08158000-08168000 rw-p 0010f000 fe:00 556831 /home/eric/...
    08168000-085fe000 rw-p 00000000 00:00 0
    094ab000-094cc000 rw-p 00000000 00:00 0 [heap]

    Signed-off-by: Xiao Guangrong
    LKML-Reference:
    Cc: Peter Zijlstra
    Cc: Mike Galbraith
    Cc: Paul Mackerras
    Cc: Arnaldo Carvalho de Melo
    Cc: Frederic Weisbecker
    Signed-off-by: Ingo Molnar

    Xiao Guangrong
     
  • Signed-off-by: Arnaldo Carvalho de Melo
    Cc: Frédéric Weisbecker
    Cc: Mike Galbraith
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Arnaldo Carvalho de Melo
     
  • - util/header.c
    "len" is aligned to 64. So, it tries to write the out of
    long_name buffer.

    So, this use "zero_buf" to write aligned area.

    - util/trace-event-read.c
    "size" is not including nul byte. So, this allocates it, and set '\0'.

    - util/trace-event-parse.c
    It needs parens to calc correct size.

    Signed-off-by: OGAWA Hirofumi
    Cc: Peter Zijlstra
    Cc: Paul Mackerras
    Cc: Arnaldo Carvalho de Melo
    Cc: Frederic Weisbecker
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    OGAWA Hirofumi