lkml.org 
[lkml]   [2009]   [May]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perfcounters/core] perf_counter: fix warning & lockup
    Commit-ID:  0127c3ea082ee9f1034789b978dfc7fd83254617
    Gitweb: http://git.kernel.org/tip/0127c3ea082ee9f1034789b978dfc7fd83254617
    Author: Ingo Molnar <mingo@elte.hu>
    AuthorDate: Mon, 25 May 2009 22:03:26 +0200
    Committer: Ingo Molnar <mingo@elte.hu>
    CommitDate: Mon, 25 May 2009 22:02:23 +0200

    perf_counter: fix warning & lockup

    - remove bogus warning
    - fix wakeup from NMI path lockup
    - also fix up whitespace noise in perf_counter.h

    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: John Kacur <jkacur@redhat.com>
    LKML-Reference: <20090525153931.703093461@chello.nl>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>


    ---
    include/linux/perf_counter.h | 78 +++++++++++++++++++++---------------------
    kernel/perf_counter.c | 4 +--
    2 files changed, 40 insertions(+), 42 deletions(-)

    diff --git a/include/linux/perf_counter.h b/include/linux/perf_counter.h
    index e3a7585..2b16ed3 100644
    --- a/include/linux/perf_counter.h
    +++ b/include/linux/perf_counter.h
    @@ -73,7 +73,7 @@ enum sw_event_ids {
    PERF_SW_EVENTS_MAX = 7,
    };

    -#define __PERF_COUNTER_MASK(name) \
    +#define __PERF_COUNTER_MASK(name) \
    (((1ULL << PERF_COUNTER_##name##_BITS) - 1) << \
    PERF_COUNTER_##name##_SHIFT)

    @@ -98,14 +98,14 @@ enum sw_event_ids {
    * in the overflow packets.
    */
    enum perf_counter_record_format {
    - PERF_RECORD_IP = 1U << 0,
    - PERF_RECORD_TID = 1U << 1,
    - PERF_RECORD_TIME = 1U << 2,
    - PERF_RECORD_ADDR = 1U << 3,
    - PERF_RECORD_GROUP = 1U << 4,
    - PERF_RECORD_CALLCHAIN = 1U << 5,
    - PERF_RECORD_CONFIG = 1U << 6,
    - PERF_RECORD_CPU = 1U << 7,
    + PERF_RECORD_IP = 1U << 0,
    + PERF_RECORD_TID = 1U << 1,
    + PERF_RECORD_TIME = 1U << 2,
    + PERF_RECORD_ADDR = 1U << 3,
    + PERF_RECORD_GROUP = 1U << 4,
    + PERF_RECORD_CALLCHAIN = 1U << 5,
    + PERF_RECORD_CONFIG = 1U << 6,
    + PERF_RECORD_CPU = 1U << 7,
    };

    /*
    @@ -235,13 +235,13 @@ enum perf_event_type {
    * correlate userspace IPs to code. They have the following structure:
    *
    * struct {
    - * struct perf_event_header header;
    + * struct perf_event_header header;
    *
    - * u32 pid, tid;
    - * u64 addr;
    - * u64 len;
    - * u64 pgoff;
    - * char filename[];
    + * u32 pid, tid;
    + * u64 addr;
    + * u64 len;
    + * u64 pgoff;
    + * char filename[];
    * };
    */
    PERF_EVENT_MMAP = 1,
    @@ -249,27 +249,27 @@ enum perf_event_type {

    /*
    * struct {
    - * struct perf_event_header header;
    + * struct perf_event_header header;
    *
    - * u32 pid, tid;
    - * char comm[];
    + * u32 pid, tid;
    + * char comm[];
    * };
    */
    PERF_EVENT_COMM = 3,

    /*
    * struct {
    - * struct perf_event_header header;
    - * u64 time;
    - * u64 irq_period;
    + * struct perf_event_header header;
    + * u64 time;
    + * u64 irq_period;
    * };
    */
    PERF_EVENT_PERIOD = 4,

    /*
    * struct {
    - * struct perf_event_header header;
    - * u64 time;
    + * struct perf_event_header header;
    + * u64 time;
    * };
    */
    PERF_EVENT_THROTTLE = 5,
    @@ -280,23 +280,23 @@ enum perf_event_type {
    * will be PERF_RECORD_*
    *
    * struct {
    - * struct perf_event_header header;
    + * struct perf_event_header header;
    *
    - * { u64 ip; } && PERF_RECORD_IP
    - * { u32 pid, tid; } && PERF_RECORD_TID
    - * { u64 time; } && PERF_RECORD_TIME
    - * { u64 addr; } && PERF_RECORD_ADDR
    - * { u64 config; } && PERF_RECORD_CONFIG
    - * { u32 cpu, res; } && PERF_RECORD_CPU
    + * { u64 ip; } && PERF_RECORD_IP
    + * { u32 pid, tid; } && PERF_RECORD_TID
    + * { u64 time; } && PERF_RECORD_TIME
    + * { u64 addr; } && PERF_RECORD_ADDR
    + * { u64 config; } && PERF_RECORD_CONFIG
    + * { u32 cpu, res; } && PERF_RECORD_CPU
    *
    - * { u64 nr;
    - * { u64 event, val; } cnt[nr]; } && PERF_RECORD_GROUP
    + * { u64 nr;
    + * { u64 event, val; } cnt[nr]; } && PERF_RECORD_GROUP
    *
    - * { u16 nr,
    - * hv,
    - * kernel,
    - * user;
    - * u64 ips[nr]; } && PERF_RECORD_CALLCHAIN
    + * { u16 nr,
    + * hv,
    + * kernel,
    + * user;
    + * u64 ips[nr]; } && PERF_RECORD_CALLCHAIN
    * };
    */
    };
    @@ -406,7 +406,7 @@ struct perf_mmap_data {
    atomic_t wakeup; /* needs a wakeup */

    struct perf_counter_mmap_page *user_page;
    - void *data_pages[0];
    + void *data_pages[0];
    };

    struct perf_pending_entry {
    @@ -422,7 +422,7 @@ struct perf_counter {
    struct list_head list_entry;
    struct list_head event_entry;
    struct list_head sibling_list;
    - int nr_siblings;
    + int nr_siblings;
    struct perf_counter *group_leader;
    const struct pmu *pmu;

    diff --git a/kernel/perf_counter.c b/kernel/perf_counter.c
    index ec9c400..070f92d 100644
    --- a/kernel/perf_counter.c
    +++ b/kernel/perf_counter.c
    @@ -2576,7 +2576,7 @@ static void perf_log_throttle(struct perf_counter *counter, int enable)
    .time = sched_clock(),
    };

    - ret = perf_output_begin(&handle, counter, sizeof(throttle_event), 0, 0);
    + ret = perf_output_begin(&handle, counter, sizeof(throttle_event), 1, 0);
    if (ret)
    return;

    @@ -3449,8 +3449,6 @@ void perf_counter_exit_task(struct task_struct *child)
    struct perf_counter_context *child_ctx;
    unsigned long flags;

    - WARN_ON_ONCE(child != current);
    -
    child_ctx = child->perf_counter_ctxp;

    if (likely(!child_ctx))

    \
     
     \ /
      Last update: 2009-05-25 22:11    [W:0.033 / U:124.496 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site