Messages in this thread | | | Date | Thu, 2 Oct 2008 09:06:11 -0400 (EDT) | From | Steven Rostedt <> | Subject | Re: [PATCH] ring_buffer: allocate buffer page pointer |
| |
On Thu, 2 Oct 2008, Andrew Morton wrote: > > > > This patch adds a macro to assign all entries of ftrace using the type > > of the variable and checking the entry id. The typecasts are now done > > in the macro for only those types that it knows about, which should > > be all the types that are allowed to be read from the tracer. > > > > I'm somewhat at a loss here because I'm unable to find any version of > kernel/trace/trace.c which looks anything like the one which is being > patched, but...
As Ingo mentioned, you don't have this yet. And be happy that you don't ;-)
This patch is to fix the patch that did this.
> > > --- a/kernel/trace/trace.c > > +++ b/kernel/trace/trace.c > > @@ -1350,7 +1350,9 @@ print_lat_fmt(struct trace_iterator *iter, unsigned int trace_idx, int cpu) > > } > > switch (entry->type) { > > case TRACE_FN: { > > - struct ftrace_entry *field = (struct ftrace_entry *)entry; > > Why was this code using a cast in the first place? It should be using > entry->some_field_i_dont_have_here? That was the whole point in using > the anonymous union in struct trace_entry?
Because the ring_buffer now allows for variable length entries, having a one size fits all entry is not optimal.
But because C is not the best for typecasting, we have this macro to help solve the issue. Instead of registering everything into a single union and causing small fields to be large, we have a macro you can register your type with instead.
-- Steve
| |