On Thu, 27 Aug 2015 17:24:03 +0200 Vlastimil Babka <vbabka@xxxxxxx> wrote: > Some compaction tracepoints use zone->name to print which zone is being > compacted. This works for in-kernel printing, but not userspace trace printing > of raw captured trace such as via trace-cmd report. > > This patch uses zone_idx() instead of zone->name as the raw value, and when > printing, converts the zone_type to string using the appropriate EM() macros > and some ugly tricks to overcome the problem that half the values depend on > CONFIG_ options and one does not simply use #ifdef inside of #define. > > trace-cmd output before: > transhuge-stres-4235 [000] 453.149280: mm_compaction_finished: node=0 > zone=ffffffff81815d7a order=9 ret=partial > > after: > transhuge-stres-4235 [000] 453.149280: mm_compaction_finished: node=0 > zone=Normal order=9 ret=partial > > Signed-off-by: Vlastimil Babka <vbabka@xxxxxxx> > Cc: Joonsoo Kim <iamjoonsoo.kim@xxxxxxx> > Cc: Steven Rostedt <rostedt@xxxxxxxxxxx> > Cc: Ingo Molnar <mingo@xxxxxxxxxx> > Cc: Mel Gorman <mgorman@xxxxxxx> > Cc: David Rientjes <rientjes@xxxxxxxxxx> > --- > include/trace/events/compaction.h | 38 ++++++++++++++++++++++++++++++++------ > 1 file changed, 32 insertions(+), 6 deletions(-) > > diff --git a/include/trace/events/compaction.h b/include/trace/events/compaction.h > index 1275a55..8daa8fa 100644 > --- a/include/trace/events/compaction.h > +++ b/include/trace/events/compaction.h > @@ -18,6 +18,31 @@ > EM( COMPACT_NO_SUITABLE_PAGE, "no_suitable_page") \ > EMe(COMPACT_NOT_SUITABLE_ZONE, "not_suitable_zone") > > +#ifdef CONFIG_ZONE_DMA > +#define IFDEF_ZONE_DMA(X) X > +#else > +#define IFDEF_ZONE_DMA(X) > +#endif > + > +#ifdef CONFIG_ZONE_DMA32 > +#define IFDEF_ZONE_DMA32(X) X > +#else > +#define IFDEF_ZONE_DMA32(X) > +#endif > + > +#ifdef CONFIG_ZONE_HIGHMEM_ > +#define IFDEF_ZONE_HIGHMEM(X) X > +#else > +#define IFDEF_ZONE_HIGHMEM(X) > +#endif > + > +#define ZONE_TYPE \ > + IFDEF_ZONE_DMA( EM (ZONE_DMA, "DMA")) \ > + IFDEF_ZONE_DMA32( EM (ZONE_DMA32, "DMA32")) \ > + EM (ZONE_NORMAL, "Normal") \ > + IFDEF_ZONE_HIGHMEM( EM (ZONE_HIGHMEM,"HighMem")) \ > + EMe(ZONE_MOVABLE,"Movable") > + Hmm, have you tried to compile this with CONFIG_ZONE_HIGHMEM disabled, and CONFIG_ZONE_DMA and/or CONFIG_ZONE_DMA32 enabled? The EMe() macro must come last, as it doesn't have the ending comma and the __print_symbolic() can fail to compile due to it. -- Steve > /* > * First define the enums in the above macros to be exported to userspace > * via TRACE_DEFINE_ENUM(). > @@ -28,6 +53,7 @@ -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>