lkml.org 
[lkml]   [2009]   [Jan]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH v2 3/3] mmiotrace: count events lost due to not recording
    From 7b1371189e38609f74c68a7b83c0a7a038a9b712 Mon Sep 17 00:00:00 2001
    From: Pekka Paalanen <pq@iki.fi>
    Date: Tue, 6 Jan 2009 13:57:11 +0200
    Subject: [PATCH] mmiotrace: count events lost due to not recording

    Impact: enhances lost events counting in mmiotrace

    The tracing framework, or the ring buffer facility it uses, has a switch
    to stop recording data. When recording is off, the trace events will be
    lost. The framework does not count these, so mmiotrace has to count them
    itself.

    Signed-off-by: Pekka Paalanen <pq@iki.fi>
    ---
    kernel/trace/trace_mmiotrace.c | 14 ++++++++++----
    1 files changed, 10 insertions(+), 4 deletions(-)

    diff --git a/kernel/trace/trace_mmiotrace.c b/kernel/trace/trace_mmiotrace.c
    index fcec59f..621c8c3 100644
    --- a/kernel/trace/trace_mmiotrace.c
    +++ b/kernel/trace/trace_mmiotrace.c
    @@ -9,6 +9,7 @@
    #include <linux/kernel.h>
    #include <linux/mmiotrace.h>
    #include <linux/pci.h>
    +#include <asm/atomic.h>

    #include "trace.h"
    #include "trace_output.h"
    @@ -20,6 +21,7 @@ struct header_iter {
    static struct trace_array *mmio_trace_array;
    static bool overrun_detected;
    static unsigned long prev_overruns;
    +static atomic_t dropped_count;

    static void mmio_reset_data(struct trace_array *tr)
    {
    @@ -122,11 +124,11 @@ static void mmio_close(struct trace_iterator *iter)

    static unsigned long count_overruns(struct trace_iterator *iter)
    {
    - unsigned long cnt = 0;
    + unsigned long cnt = atomic_xchg(&dropped_count, 0);
    unsigned long over = ring_buffer_overruns(iter->tr->buffer);

    if (over > prev_overruns)
    - cnt = over - prev_overruns;
    + cnt += over - prev_overruns;
    prev_overruns = over;
    return cnt;
    }
    @@ -308,8 +310,10 @@ static void __trace_mmiotrace_rw(struct trace_array *tr,

    event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry),
    &irq_flags);
    - if (!event)
    + if (!event) {
    + atomic_inc(&dropped_count);
    return;
    + }
    entry = ring_buffer_event_data(event);
    tracing_generic_entry_update(&entry->ent, 0, preempt_count());
    entry->ent.type = TRACE_MMIO_RW;
    @@ -336,8 +340,10 @@ static void __trace_mmiotrace_map(struct trace_array *tr,

    event = ring_buffer_lock_reserve(tr->buffer, sizeof(*entry),
    &irq_flags);
    - if (!event)
    + if (!event) {
    + atomic_inc(&dropped_count);
    return;
    + }
    entry = ring_buffer_event_data(event);
    tracing_generic_entry_update(&entry->ent, 0, preempt_count());
    entry->ent.type = TRACE_MMIO_MAP;
    --
    1.6.0.6


    \
     
     \ /
      Last update: 2009-01-08 23:19    [W:0.026 / U:0.776 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site