From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: LKML <linux-kernel@vger.kernel.org>,
David Miller <davem@davemloft.net>,
Steven Rostedt <rostedt@goodmis.org>,
Frederic Weisbecker <fweisbec@gmail.com>,
Ingo Molnar <mingo@elte.hu>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Subject: [patch 3/3] tracepoints: use __u64_packed_aligned() as type and variable attribute
Date: Wed, 19 Jan 2011 22:17:32 -0500 [thread overview]
Message-ID: <20110120032557.188899549@efficios.com> (raw)
In-Reply-To: 20110120031729.055590217@efficios.com
[-- Attachment #1: tracepoints-use-u64-packed-aligned-as-type-and-variable-attribute.patch --]
[-- Type: text/plain, Size: 3350 bytes --]
commit 7e066fb870fcd1025ec3ba7bbde5d541094f4ce1 added the aligned(32) type and
variable attribute to the tracepoint structures to deal with gcc happily
aligning statically defined structures on 32-byte multiples.
Working on issues within Ftrace, we came up with __64_packed_aligned, which
deals with this issue more elegantly by forcing an 8-byte alignment to both the
type declaration and variable definition.
This therefore saves space, bringing down the size of struct tracepoint from 64
bytes to 38 on 64-bit architectures.
Updating:
- The type attribute (for iteration over the struct tracepoint array)
- Added the variable attribute to the extern definition (needed to force gcc to
consider this alignment for the following definition)
- The definition variable attribute (to force gcc to this specific alignment for
the static definitions)
- The linker script (8-byte alignment can now replace the previous 32-byte
alignment for the custom tracepoint section)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
CC: David Miller <davem@davemloft.net>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Frederic Weisbecker <fweisbec@gmail.com>
CC: Ingo Molnar <mingo@elte.hu>
---
include/asm-generic/vmlinux.lds.h | 2 +-
include/linux/tracepoint.h | 12 ++++--------
2 files changed, 5 insertions(+), 9 deletions(-)
Index: linux-2.6-lttng/include/asm-generic/vmlinux.lds.h
===================================================================
--- linux-2.6-lttng.orig/include/asm-generic/vmlinux.lds.h
+++ linux-2.6-lttng/include/asm-generic/vmlinux.lds.h
@@ -168,7 +168,7 @@
CPU_KEEP(exit.data) \
MEM_KEEP(init.data) \
MEM_KEEP(exit.data) \
- . = ALIGN(32); \
+ U64_ALIGN(); \
VMLINUX_SYMBOL(__start___tracepoints) = .; \
*(__tracepoints) \
VMLINUX_SYMBOL(__stop___tracepoints) = .; \
Index: linux-2.6-lttng/include/linux/tracepoint.h
===================================================================
--- linux-2.6-lttng.orig/include/linux/tracepoint.h
+++ linux-2.6-lttng/include/linux/tracepoint.h
@@ -33,12 +33,7 @@ struct tracepoint {
void (*regfunc)(void);
void (*unregfunc)(void);
struct tracepoint_func *funcs;
-} __attribute__((aligned(32))); /*
- * Aligned on 32 bytes because it is
- * globally visible and gcc happily
- * align these on the structure size.
- * Keep in sync with vmlinux.lds.h.
- */
+} __u64_packed_aligned;
/*
* Connect a probe to a tracepoint.
@@ -143,7 +138,7 @@ static inline void tracepoint_update_pro
* structure. Force alignment to the same alignment as the section start.
*/
#define __DECLARE_TRACE(name, proto, args, data_proto, data_args) \
- extern struct tracepoint __tracepoint_##name; \
+ extern struct tracepoint __u64_aligned __tracepoint_##name; \
static inline void trace_##name(proto) \
{ \
JUMP_LABEL(&__tracepoint_##name.state, do_trace); \
@@ -174,7 +169,8 @@ do_trace: \
static const char __tpstrtab_##name[] \
__attribute__((section("__tracepoints_strings"))) = #name; \
struct tracepoint __tracepoint_##name \
- __attribute__((section("__tracepoints"), aligned(32))) = \
+ __u64_aligned \
+ __attribute__((section("__tracepoints"))) = \
{ __tpstrtab_##name, 0, reg, unreg, NULL };
#define DEFINE_TRACE(name) \
prev parent reply other threads:[~2011-01-20 3:26 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-20 3:17 [patch 0/3] Fix alignment of custom sections made from structures Mathieu Desnoyers
2011-01-20 3:17 ` [patch 1/3] introduce __u64_packed_aligned, __u64_aligned and U64_ALIGN() for structure alignment in custom sections Mathieu Desnoyers
2011-01-20 3:29 ` Mathieu Desnoyers
2011-01-20 3:17 ` [patch 2/3] tracing: use __u64_packed_aligned as type and variable attribute Mathieu Desnoyers
2011-01-20 3:17 ` Mathieu Desnoyers [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20110120032557.188899549@efficios.com \
--to=mathieu.desnoyers@efficios.com \
--cc=davem@davemloft.net \
--cc=fweisbec@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=rostedt@goodmis.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.