lkml.org 
[lkml]   [2009]   [Aug]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 6/3] perfcounter: Substract the buffer size field from the event record size
    On Mon, Aug 10, 2009 at 03:06:25PM +0200, Peter Zijlstra wrote:
    > > I'll do the alignment right in the end, just before inserting the entry
    > > in the output. That will be more easy. I'll zeroe the rest in the same time.
    >
    > OK.


    Actually I shouldn't, the alignment should be computed early, taking the
    field size into account.

    That's not a problem though, I've just substracted the u32 field once
    I found the final aligned size.

    See below:

    ---
    From: Frederic Weisbecker <fweisbec@gmail.com>
    Date: Mon, 10 Aug 2009 15:56:46 +0200
    Subject: [PATCH 6/3] perfcounter: Substract the buffer size field from the event record size

    We compute the perf raw sample size by aligning the raw ftrace event
    size plus the buffer size field itself. We do that instead of aligning
    only the perf raw sample size, so that we might economize some in some
    cases.

    But this buffer size field is not stored in the perf raw sample, we
    must then substract its size from the buffer once we computed the
    alignment unless we may get a useless u32 field in the buffer.

    Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
    ---
    include/trace/ftrace.h | 8 +++++++-
    1 file changed, 7 insertions(+), 1 deletions(-)

    diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h
    index 4dc1a60..f98ff56 100644
    --- a/include/trace/ftrace.h
    +++ b/include/trace/ftrace.h
    @@ -639,7 +639,12 @@ __attribute__((section("_ftrace_events"))) event_##call = { \
    * pc = preempt_count();
    *
    * __data_size = ftrace_get_offsets_<call>(&__data_offsets, args);
    - * __entry_size = __data_size + sizeof(*entry);
    + *
    + * // Below we want to get the aligned size by taking into account
    + * // the u32 field that will later store the buffer size
    + * __entry_size = ALIGN(__data_size + sizeof(*entry) + sizeof(u32),
    + * sizeof(u64));
    + * __entry_size -= sizeof(u32);
    *
    * do {
    * char raw_data[__entry_size]; <- allocate our sample in the stack
    @@ -689,6 +694,7 @@ static void ftrace_profile_##call(proto) \
    __data_size = ftrace_get_offsets_##call(&__data_offsets, args); \
    __entry_size = ALIGN(__data_size + sizeof(*entry) + sizeof(u32),\
    sizeof(u64)); \
    + __entry_size -= sizeof(u32); \
    \
    do { \
    char raw_data[__entry_size]; \
    --
    1.6.2.3



    \
     
     \ /
      Last update: 2009-08-10 16:13    [W:0.038 / U:29.896 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site