lkml.org 
[lkml]   [2010]   [Feb]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[GIT PULL] tracing fixes
    Linus,

    Please pull the latest tracing-fixes-for-linus git tree from:

    git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git tracing-fixes-for-linus

    Thanks,

    Ingo

    ------------------>
    Heiko Carstens (1):
    tracing/kprobes: Fix probe parsing

    Lai Jiangshan (1):
    tracing: Fix circular dead lock in stack trace


    kernel/trace/trace_kprobe.c | 2 +-
    kernel/trace/trace_stack.c | 24 ++++++++++++++++++++++++
    2 files changed, 25 insertions(+), 1 deletions(-)

    diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
    index 6ea90c0..50b1b82 100644
    --- a/kernel/trace/trace_kprobe.c
    +++ b/kernel/trace/trace_kprobe.c
    @@ -689,7 +689,7 @@ static int create_trace_probe(int argc, char **argv)
    return -EINVAL;
    }
    /* an address specified */
    - ret = strict_strtoul(&argv[0][2], 0, (unsigned long *)&addr);
    + ret = strict_strtoul(&argv[1][0], 0, (unsigned long *)&addr);
    if (ret) {
    pr_info("Failed to parse address.\n");
    return ret;
    diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
    index 678a512..f4bc9b2 100644
    --- a/kernel/trace/trace_stack.c
    +++ b/kernel/trace/trace_stack.c
    @@ -157,6 +157,7 @@ stack_max_size_write(struct file *filp, const char __user *ubuf,
    unsigned long val, flags;
    char buf[64];
    int ret;
    + int cpu;

    if (count >= sizeof(buf))
    return -EINVAL;
    @@ -171,9 +172,20 @@ stack_max_size_write(struct file *filp, const char __user *ubuf,
    return ret;

    local_irq_save(flags);
    +
    + /*
    + * In case we trace inside arch_spin_lock() or after (NMI),
    + * we will cause circular lock, so we also need to increase
    + * the percpu trace_active here.
    + */
    + cpu = smp_processor_id();
    + per_cpu(trace_active, cpu)++;
    +
    arch_spin_lock(&max_stack_lock);
    *ptr = val;
    arch_spin_unlock(&max_stack_lock);
    +
    + per_cpu(trace_active, cpu)--;
    local_irq_restore(flags);

    return count;
    @@ -206,7 +218,13 @@ t_next(struct seq_file *m, void *v, loff_t *pos)

    static void *t_start(struct seq_file *m, loff_t *pos)
    {
    + int cpu;
    +
    local_irq_disable();
    +
    + cpu = smp_processor_id();
    + per_cpu(trace_active, cpu)++;
    +
    arch_spin_lock(&max_stack_lock);

    if (*pos == 0)
    @@ -217,7 +235,13 @@ static void *t_start(struct seq_file *m, loff_t *pos)

    static void t_stop(struct seq_file *m, void *p)
    {
    + int cpu;
    +
    arch_spin_unlock(&max_stack_lock);
    +
    + cpu = smp_processor_id();
    + per_cpu(trace_active, cpu)--;
    +
    local_irq_enable();
    }


    \
     
     \ /
      Last update: 2010-02-14 10:11    [W:0.025 / U:0.096 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site