Re: [patch for 2.6.26 0/7] Architecture Independent Markers

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Mathieu Desnoyers <mathieu.desnoyers@...>
Cc: <akpm@...>, <linux-kernel@...>
Date: Thursday, March 27, 2008 - 8:01 pm

On Thursday 27 March 2008 14:20, Mathieu Desnoyers wrote:

Not in this patch, but I noticed:

#define __trace_mark(name, call_private, format, args...)               \
        do {                                                            \
                static const char __mstrtab_##name[]                    \
                __attribute__((section("__markers_strings")))           \
                = #name "\0" format;                                    \
                static struct marker __mark_##name                      \
                __attribute__((section("__markers"), aligned(8))) =     \
                { __mstrtab_##name, &__mstrtab_##name[sizeof(#name)],   \
                0, 0, marker_probe_cb,                                  \
                { __mark_empty_function, NULL}, NULL };                 \
                __mark_check_format(format, ## args);                   \
                if (unlikely(__mark_##name.state)) {                    \
                        (*__mark_##name.call)                           \
                                (&__mark_##name, call_private,          \
                                format, ## args);                       \
                }                                                       \
        } while (0)

In this call:

                        (*__mark_##name.call)                           \
                                (&__mark_##name, call_private,          \
                                format, ## args);                       \

you make gcc allocate duplicate format string. You can use
&__mstrtab_##name[sizeof(#name)] instead since it holds the same string,
or drop ", format," above and "const char *fmt" from here:

        void (*call)(const struct marker *mdata,        /* Probe wrapper */
                void *call_private, const char *fmt, ...);

since mdata->format is the same and all callees which need it can take it there.
--
vda
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[patch for 2.6.26 0/7] Architecture Independent Markers, Mathieu Desnoyers, (Thu Mar 27, 9:20 am)
Re: [patch for 2.6.26 0/7] Architecture Independent Markers, Denys Vlasenko, (Thu Mar 27, 8:01 pm)
Re: [patch for 2.6.26 1/7] Markers - define non optimized ma..., Mathieu Desnoyers, (Thu Mar 27, 9:04 pm)
[PATCH] Markers - remove extra format argument, Mathieu Desnoyers, (Thu Mar 27, 9:02 pm)
Re: [PATCH] Markers - remove extra format argument, Masami Hiramatsu, (Fri Mar 28, 1:35 am)
Re: [patch for 2.6.26 0/7] Architecture Independent Markers, Frank Ch. Eigler, (Thu Mar 27, 5:49 pm)
Re: [patch for 2.6.26 0/7] Architecture Independent Markers, Mathieu Desnoyers, (Thu Mar 27, 4:39 pm)
Re: [patch for 2.6.26 0/7] Architecture Independent Markers, Mathieu Desnoyers, (Sat Mar 29, 1:16 pm)
Re: [patch for 2.6.26 0/7] Architecture Independent Markers, Mathieu Desnoyers, (Fri Mar 28, 7:38 am)
Re: [patch for 2.6.26 0/7] Architecture Independent Markers, KOSAKI Motohiro, (Thu Mar 27, 1:08 pm)
Re: [patch for 2.6.26 0/7] Architecture Independent Markers, Frank Ch. Eigler, (Fri Mar 28, 9:40 am)
Re: [patch for 2.6.26 0/7] Architecture Independent Markers, Frank Ch. Eigler, (Fri Mar 28, 11:31 am)