mm/migrate: de-duplicate migrate_reason strings
authorJohn Hubbard <jhubbard@nvidia.com>
Fri, 5 Nov 2021 20:43:32 +0000 (13:43 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 6 Nov 2021 20:30:41 +0000 (13:30 -0700)
In order to remove the need to manually keep three different files in
synch, provide a common definition of the mapping between enum
migrate_reason, and the associated strings for each enum item.

1. Use the tracing system's mapping of enums to strings, by redefining
   and reusing the MIGRATE_REASON and supporting macros, and using that
   to populate the string array in mm/debug.c.

2. Move enum migrate_reason to migrate_mode.h. This is not strictly
   necessary for this patch, but migrate mode and migrate reason go
   together, so this will slightly clarify things.

Link: https://lkml.kernel.org/r/20210922041755.141817-2-jhubbard@nvidia.com
Signed-off-by: John Hubbard <jhubbard@nvidia.com>
Reviewed-by: Weizhao Ouyang <o451686892@gmail.com>
Cc: "Huang, Ying" <ying.huang@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/linux/migrate.h
include/linux/migrate_mode.h
mm/debug.c

index c8077e9..3d154fe 100644 (file)
@@ -19,24 +19,7 @@ struct migration_target_control;
  */
 #define MIGRATEPAGE_SUCCESS            0
 
-/*
- * Keep sync with:
- * - macro MIGRATE_REASON in include/trace/events/migrate.h
- * - migrate_reason_names[MR_TYPES] in mm/debug.c
- */
-enum migrate_reason {
-       MR_COMPACTION,
-       MR_MEMORY_FAILURE,
-       MR_MEMORY_HOTPLUG,
-       MR_SYSCALL,             /* also applies to cpusets */
-       MR_MEMPOLICY_MBIND,
-       MR_NUMA_MISPLACED,
-       MR_CONTIG_RANGE,
-       MR_LONGTERM_PIN,
-       MR_DEMOTION,
-       MR_TYPES
-};
-
+/* Defined in mm/debug.c: */
 extern const char *migrate_reason_names[MR_TYPES];
 
 #ifdef CONFIG_MIGRATION
index 883c992..f37cc03 100644 (file)
@@ -19,4 +19,17 @@ enum migrate_mode {
        MIGRATE_SYNC_NO_COPY,
 };
 
+enum migrate_reason {
+       MR_COMPACTION,
+       MR_MEMORY_FAILURE,
+       MR_MEMORY_HOTPLUG,
+       MR_SYSCALL,             /* also applies to cpusets */
+       MR_MEMPOLICY_MBIND,
+       MR_NUMA_MISPLACED,
+       MR_CONTIG_RANGE,
+       MR_LONGTERM_PIN,
+       MR_DEMOTION,
+       MR_TYPES
+};
+
 #endif         /* MIGRATE_MODE_H_INCLUDED */
index fae0f81..4333b67 100644 (file)
 #include <linux/ctype.h>
 
 #include "internal.h"
+#include <trace/events/migrate.h>
+
+/*
+ * Define EM() and EMe() so that MIGRATE_REASON from trace/events/migrate.h can
+ * be used to populate migrate_reason_names[].
+ */
+#undef EM
+#undef EMe
+#define EM(a, b)       b,
+#define EMe(a, b)      b
 
 const char *migrate_reason_names[MR_TYPES] = {
-       "compaction",
-       "memory_failure",
-       "memory_hotplug",
-       "syscall_or_cpuset",
-       "mempolicy_mbind",
-       "numa_misplaced",
-       "contig_range",
-       "longterm_pin",
-       "demotion",
+       MIGRATE_REASON
 };
 
 const struct trace_print_flags pageflag_names[] = {