• David Ahern's avatar
    perf events: initialize fd array to -1 instead of 0 · 4af4c955
    David Ahern authored
    perf_evsel__alloc_fd allocates an array of file descriptors with the
    memory initialized to 0. The array has dimensions for cpus and threads.
    
    Later, __perf_evsel__open calls sys_perf_event_open for each cpu and thread
    dimensions. If the open fails for any of the cpus or threads then the fd's
    for this event are closed and the fd entry in the array is set to -1. Now,
    if the first attempt fails for the event (e.g., the event is not supported)
    the remaining dimensions (cpu > 0 and thread > 0) are not touched and left
    at the initialized value of 0.
    
    builtin-stat catches ENOENT and ENOSYS failures and allows the command to
    continue. The end result is that stat attempts to read from an fd of 0 which
    of course is stdin and so the command hangs until you type ctrl-D.
    
    Resolve by initializing the array to -1 since an fd < 0 is already
    handled.
    
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/1306511914-8016-1-git-send-email-dsahern@gmail.comSigned-off-by: default avatarDavid Ahern <dsahern@gmail.com>
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    4af4c955
evsel.c 8.59 KB