• Frederic Weisbecker's avatar
    tracing/ring-buffer: fix non cpu hotplug case · 3bf832ce
    Frederic Weisbecker authored
    Impact: fix warning with irqsoff tracer
    
    The ring buffer allocates its buffers on pre-smp time (early_initcall).
    It means that, at first, only the boot cpu buffer is allocated and
    the ring-buffer cpumask only has the boot cpu set (cpu_online_mask).
    
    Later, the secondary cpu will show up and the ring-buffer will be notified
    about this event: the appropriate buffer will be allocated and the cpumask
    will be updated.
    
    Unfortunately, if !CONFIG_CPU_HOTPLUG, the ring-buffer will not be
    notified about the secondary cpus, meaning that the cpumask will have
    only the cpu boot set, and only one cpu buffer allocated.
    
    We fix that by using cpu_possible_mask if !CONFIG_CPU_HOTPLUG.
    
    This patch fixes the following warning with irqsoff tracer running:
    
    [  169.317794] WARNING: at kernel/trace/trace.c:466 update_max_tr_single+0xcc/0xf3()
    [  169.318002] Hardware name: AMILO Li 2727
    [  169.318002] Modules linked in:
    [  169.318002] Pid: 5624, comm: bash Not tainted 2.6.29-rc8-tip-02636-g6aafa6c #11
    [  169.318002] Call Trace:
    [  169.318002]  [<ffffffff81036182>] warn_slowpath+0xea/0x13d
    [  169.318002]  [<ffffffff8100b9d6>] ? ftrace_call+0x5/0x2b
    [  169.318002]  [<ffffffff8100b9d6>] ? ftrace_call+0x5/0x2b
    [  169.318002]  [<ffffffff8100b9d1>] ? ftrace_call+0x0/0x2b
    [  169.318002]  [<ffffffff8101ef10>] ? ftrace_modify_code+0xa9/0x108
    [  169.318002]  [<ffffffff8106e27f>] ? trace_hardirqs_off+0x25/0x27
    [  169.318002]  [<ffffffff8149afe7>] ? _spin_unlock_irqrestore+0x1f/0x2d
    [  169.318002]  [<ffffffff81064f52>] ? ring_buffer_reset_cpu+0xf6/0xfb
    [  169.318002]  [<ffffffff8106637c>] ? ring_buffer_reset+0x36/0x48
    [  169.318002]  [<ffffffff8106aeda>] update_max_tr_single+0xcc/0xf3
    [  169.318002]  [<ffffffff8100bc17>] ? sysret_check+0x22/0x5d
    [  169.318002]  [<ffffffff8106e3ea>] stop_critical_timing+0x142/0x204
    [  169.318002]  [<ffffffff8106e4cf>] trace_hardirqs_on_caller+0x23/0x25
    [  169.318002]  [<ffffffff8149ac28>] trace_hardirqs_on_thunk+0x3a/0x3c
    [  169.318002]  [<ffffffff8100bc17>] ? sysret_check+0x22/0x5d
    [  169.318002] ---[ end trace db76cbf775a750cf ]---
    
    Because this tracer may try to swap two cpu ring buffers for an
    unregistered cpu on the ring buffer.
    
    This patch might also fix a fair loss of traces due to unallocated buffers
    for secondary cpus.
    Reported-by: default avatarIngo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    Acked-b: Steven Rostedt <rostedt@goodmis.org>
    LKML-Reference: <1237470453-5427-1-git-send-email-fweisbec@gmail.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    3bf832ce
ring_buffer.c 68.9 KB