• Frederic Weisbecker's avatar
    perf: Correctly align perf event tracing buffer · eb1e7961
    Frederic Weisbecker authored
    The trace event buffer used by perf to record raw sample events
    is typed as an array of char and may then not be aligned to 8
    by alloc_percpu().
    
    But we need it to be aligned to 8 in sparc64 because we cast
    this buffer into a random structure type built by the TRACE_EVENT()
    macro to store the traces. So if a random 64 bits field is accessed
    inside, it may be not under an expected good alignment.
    
    Use an array of long instead to force the appropriate alignment, and
    perform a compile time check to ensure the size in byte of the buffer
    is a multiple of sizeof(long) so that its actual size doesn't get
    shrinked under us.
    
    This fixes unaligned accesses reported while using perf lock
    in sparc 64.
    Suggested-by: default avatarDavid Miller <davem@davemloft.net>
    Suggested-by: default avatarTejun Heo <htejun@gmail.com>
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: David Miller <davem@davemloft.net>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    eb1e7961
trace_event_perf.c 3.68 KB