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.135 / U:0.072 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site