mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-09 06:33:34 +00:00
mm, compaction: export tracepoints status strings to userspace
Some compaction tracepoints convert the integer return values to strings using the compaction_status_string array. This works for in-kernel printing, but not userspace trace printing of raw captured trace such as via trace-cmd report. This patch converts the private array to appropriate tracepoint macros that result in proper userspace support. trace-cmd output before: transhuge-stres-4235 [000] 453.149280: mm_compaction_finished: node=0 zone=ffffffff81815d7a order=9 ret= after: transhuge-stres-4235 [000] 453.149280: mm_compaction_finished: node=0 zone=ffffffff81815d7a order=9 ret=partial Signed-off-by: Vlastimil Babka <vbabka@suse.cz> Reviewed-by: Steven Rostedt <rostedt@goodmis.org> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: Ingo Molnar <mingo@redhat.com> Cc: Mel Gorman <mgorman@suse.de> Cc: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
840807a8f4
commit
fa6c7b46aa
@ -15,7 +15,7 @@
|
||||
/* For more detailed tracepoint output */
|
||||
#define COMPACT_NO_SUITABLE_PAGE 5
|
||||
#define COMPACT_NOT_SUITABLE_ZONE 6
|
||||
/* When adding new state, please change compaction_status_string, too */
|
||||
/* When adding new states, please adjust include/trace/events/compaction.h */
|
||||
|
||||
/* Used to signal whether compaction detected need_sched() or lock contention */
|
||||
/* No contention detected */
|
||||
|
@ -9,6 +9,35 @@
|
||||
#include <linux/tracepoint.h>
|
||||
#include <trace/events/gfpflags.h>
|
||||
|
||||
#define COMPACTION_STATUS \
|
||||
EM( COMPACT_DEFERRED, "deferred") \
|
||||
EM( COMPACT_SKIPPED, "skipped") \
|
||||
EM( COMPACT_CONTINUE, "continue") \
|
||||
EM( COMPACT_PARTIAL, "partial") \
|
||||
EM( COMPACT_COMPLETE, "complete") \
|
||||
EM( COMPACT_NO_SUITABLE_PAGE, "no_suitable_page") \
|
||||
EMe(COMPACT_NOT_SUITABLE_ZONE, "not_suitable_zone")
|
||||
|
||||
/*
|
||||
* First define the enums in the above macros to be exported to userspace
|
||||
* via TRACE_DEFINE_ENUM().
|
||||
*/
|
||||
#undef EM
|
||||
#undef EMe
|
||||
#define EM(a, b) TRACE_DEFINE_ENUM(a);
|
||||
#define EMe(a, b) TRACE_DEFINE_ENUM(a);
|
||||
|
||||
COMPACTION_STATUS
|
||||
|
||||
/*
|
||||
* Now redefine the EM() and EMe() macros to map the enums to the strings
|
||||
* that will be printed in the output.
|
||||
*/
|
||||
#undef EM
|
||||
#undef EMe
|
||||
#define EM(a, b) {a, b},
|
||||
#define EMe(a, b) {a, b}
|
||||
|
||||
DECLARE_EVENT_CLASS(mm_compaction_isolate_template,
|
||||
|
||||
TP_PROTO(
|
||||
@ -161,7 +190,7 @@ TRACE_EVENT(mm_compaction_end,
|
||||
__entry->free_pfn,
|
||||
__entry->zone_end,
|
||||
__entry->sync ? "sync" : "async",
|
||||
compaction_status_string[__entry->status])
|
||||
__print_symbolic(__entry->status, COMPACTION_STATUS))
|
||||
);
|
||||
|
||||
TRACE_EVENT(mm_compaction_try_to_compact_pages,
|
||||
@ -217,7 +246,7 @@ DECLARE_EVENT_CLASS(mm_compaction_suitable_template,
|
||||
__entry->nid,
|
||||
__entry->name,
|
||||
__entry->order,
|
||||
compaction_status_string[__entry->ret])
|
||||
__print_symbolic(__entry->ret, COMPACTION_STATUS))
|
||||
);
|
||||
|
||||
DEFINE_EVENT(mm_compaction_suitable_template, mm_compaction_finished,
|
||||
|
@ -35,17 +35,6 @@ static inline void count_compact_events(enum vm_event_item item, long delta)
|
||||
#endif
|
||||
|
||||
#if defined CONFIG_COMPACTION || defined CONFIG_CMA
|
||||
#ifdef CONFIG_TRACEPOINTS
|
||||
static const char *const compaction_status_string[] = {
|
||||
"deferred",
|
||||
"skipped",
|
||||
"continue",
|
||||
"partial",
|
||||
"complete",
|
||||
"no_suitable_page",
|
||||
"not_suitable_zone",
|
||||
};
|
||||
#endif
|
||||
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/compaction.h>
|
||||
|
Loading…
Reference in New Issue
Block a user