Messages in this thread | | | Date | Wed, 02 Feb 2011 14:50:23 -0800 (PST) | Subject | Re: [PATCH 1/2] tracing: Replace trace_event struct array with pointer array | From | David Miller <> |
| |
From: Steven Rostedt <rostedt@goodmis.org> Date: Wed, 02 Feb 2011 13:06:14 -0500
> From: Steven Rostedt <srostedt@redhat.com> > > Currently the trace_event structures are placed in the _ftrace_events > section, and at link time, the linker makes one large array of all > the trace_event structures. On boot up, this array is read (much like > the initcall sections) and the events are processed. > > The problem is that there is no guarantee that gcc will place complex > structures nicely together in an array format. Two structures in the > same file may be placed awkwardly, because gcc has no clue that they > are suppose to be in an array. > > A hack was used previous to force the alignment to 4, to pack the > structures together. But this caused alignment issues with other > architectures (sparc). > > Instead of packing the structures into an array, the structures' addresses > are now put into the _ftrace_event section. As pointers are always the > natural alignment, gcc should always pack them tightly together > (otherwise initcall, extable, etc would also fail). > > By having the pointers to the structures in the section, we can still > iterate the trace_events without causing unnecessary alignment problems > with other architectures, or depending on the current behaviour of > gcc that will likely change in the future just to tick us kernel developers > off a little more. > > The _ftrace_event section is also moved into the .init.data section > as it is now only needed at boot up. > > Suggested-by: David Miller <davem@davemloft.net> > Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> > Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Acked-by: David S. Miller <davem@davemloft.net>
| |