• Frederic Weisbecker's avatar
    tracing/ftrace: alloc the started cpumask for the trace file · b0dfa978
    Frederic Weisbecker authored
    Impact: fix a crash while cat trace file
    
    Currently we are using a cpumask to remind each cpu where a
    trace occured. It lets us notice the user that a cpu just had
    its first trace.
    
    But on latest -tip we have the following crash once we cat the trace
    file:
    
    IP: [<c0270c4a>] print_trace_fmt+0x45/0xe7
    *pde = 00000000
    Oops: 0000 [#1] PREEMPT SMP
    last sysfs file: /sys/class/net/eth0/carrier
    Pid: 3897, comm: cat Not tainted (2.6.29-tip-02825-g0f22972-dirty #81)
    EIP: 0060:[<c0270c4a>] EFLAGS: 00010297 CPU: 0
    EIP is at print_trace_fmt+0x45/0xe7
    EAX: 00000000 EBX: 00000000 ECX: c12d9e98 EDX: ccdb7010
    ESI: d31f4000 EDI: 00322401 EBP: d31f3f10 ESP: d31f3efc
    DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
    Process cat (pid: 3897, ti=d31f2000 task=d3b3cf20 task.ti=d31f2000)
    Stack:
    d31f4080 ccdb7010 d31f4000 d691fe70 ccdb7010 d31f3f24 c0270e5c d31f4000
    d691fe70 d31f4000 d31f3f34 c02718e8 c12d9e98 d691fe70 d31f3f70 c02bfc33
    00001000 09130000 d3b46e00 d691fe98 00000000 00000079 00000001 00000000
    Call Trace:
    [<c0270e5c>] ? print_trace_line+0x170/0x17c
    [<c02718e8>] ? s_show+0xa7/0xbd
    [<c02bfc33>] ? seq_read+0x24a/0x327
    [<c02bf9e9>] ? seq_read+0x0/0x327
    [<c02ab18b>] ? vfs_read+0x86/0xe1
    [<c02ab289>] ? sys_read+0x40/0x65
    [<c0202d8f>] ? sysenter_do_call+0x12/0x3c
    Code: 00 00 00 89 45 ec f7 c7 00 20 00 00 89 55 f0 74 4e f6 86 98 10 00 00 02 74 45 8b 86 8c 10 00 00 8b 9e a8 10 00 00 e8 52 f3 ff ff <0f> a3 03 19 c0 85 c0 75 2b 8b 86 8c 10 00 00 8b 9e a8 10 00 00
    EIP: [<c0270c4a>] print_trace_fmt+0x45/0xe7 SS:ESP 0068:d31f3efc
    CR2: 0000000000000000
    ---[ end trace aa9cf38e5ebed9dd ]---
    
    This is because we alloc the iter->started cpumask on tracing_pipe_open but
    not on tracing_open.
    
    It hadn't been noticed until now because we need to have ring buffer overruns
    to activate the starting of cpu buffer detection.
    
    Also, we need a check to not print the messagge for the first trace on the file.
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    LKML-Reference: <1238619188-6109-1-git-send-email-fweisbec@gmail.com>
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    b0dfa978
trace.c 94.9 KB