lkml.org 
[lkml]   [2008]   [Apr]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 29/37] Markers - define non optimized marker
    To support the forthcoming "immediate values" marker optimization, we must have
    a way to declare markers in few code paths that does not use instruction
    modification based enable. This will be the case of printk(), some traps and
    eventually lockdep instrumentation.

    Changelog :
    - Fix reversed boolean logic of "generic".

    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
    ---
    include/linux/marker.h | 29 ++++++++++++++++++++++++-----
    1 file changed, 24 insertions(+), 5 deletions(-)

    Index: linux-2.6-lttng/include/linux/marker.h
    ===================================================================
    --- linux-2.6-lttng.orig/include/linux/marker.h 2008-03-27 20:47:44.000000000 -0400
    +++ linux-2.6-lttng/include/linux/marker.h 2008-03-27 20:49:04.000000000 -0400
    @@ -58,8 +58,12 @@ struct marker {
    * Make sure the alignment of the structure in the __markers section will
    * not add unwanted padding between the beginning of the section and the
    * structure. Force alignment to the same alignment as the section start.
    + *
    + * The "generic" argument controls which marker enabling mechanism must be used.
    + * If generic is true, a variable read is used.
    + * If generic is false, immediate values are used.
    */
    -#define __trace_mark(name, call_private, format, args...) \
    +#define __trace_mark(generic, name, call_private, format, args...) \
    do { \
    static const char __mstrtab_##name[] \
    __attribute__((section("__markers_strings"))) \
    @@ -79,7 +83,7 @@ struct marker {
    extern void marker_update_probe_range(struct marker *begin,
    struct marker *end);
    #else /* !CONFIG_MARKERS */
    -#define __trace_mark(name, call_private, format, args...) \
    +#define __trace_mark(generic, name, call_private, format, args...) \
    __mark_check_format(format, ## args)
    static inline void marker_update_probe_range(struct marker *begin,
    struct marker *end)
    @@ -87,15 +91,30 @@ static inline void marker_update_probe_r
    #endif /* CONFIG_MARKERS */

    /**
    - * trace_mark - Marker
    + * trace_mark - Marker using code patching
    * @name: marker name, not quoted.
    * @format: format string
    * @args...: variable argument list
    *
    - * Places a marker.
    + * Places a marker using optimized code patching technique (imv_read())
    + * to be enabled when immediate values are present.
    */
    #define trace_mark(name, format, args...) \
    - __trace_mark(name, NULL, format, ## args)
    + __trace_mark(0, name, NULL, format, ## args)
    +
    +/**
    + * _trace_mark - Marker using variable read
    + * @name: marker name, not quoted.
    + * @format: format string
    + * @args...: variable argument list
    + *
    + * Places a marker using a standard memory read (_imv_read()) to be
    + * enabled. Should be used for markers in code paths where instruction
    + * modification based enabling is not welcome. (__init and __exit functions,
    + * lockdep, some traps, printk).
    + */
    +#define _trace_mark(name, format, args...) \
    + __trace_mark(1, name, NULL, format, ## args)

    /**
    * MARK_NOARGS - Format string for a marker with no argument.
    --
    Mathieu Desnoyers
    Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
    OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68


    \
     
     \ /
      Last update: 2008-04-24 17:19    [W:0.033 / U:0.060 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site