This patch add PG_movable to mark a page as movable.
And when system call migrate function, it will call the interfaces isolate,
put and migrate to control it.
There is a patch for page migrate interface in LKML. But for zsmalloc,
it is too deep inside the file system. So I add another one.
Signed-off-by: Hui Zhu <zhuhui@xxxxxxxxxx>
---
include/linux/mm_types.h | 6 ++++++
include/linux/page-flags.h | 3 +++
mm/compaction.c | 6 ++++++
mm/debug.c | 1 +
mm/migrate.c | 17 +++++++++++++----
mm/vmscan.c | 2 +-
6 files changed, 30 insertions(+), 5 deletions(-)
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 3d6baa7..132afb0 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -12,6 +12,7 @@
#include <linux/cpumask.h>
#include <linux/uprobes.h>
#include <linux/page-flags-layout.h>
+#include <linux/migrate_mode.h>
#include <asm/page.h>
#include <asm/mmu.h>
@@ -196,6 +197,11 @@ struct page {
#ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS
int _last_cpupid;
#endif
+
+ int (*isolate)(struct page *page);
+ void (*put)(struct page *page);
+ int (*migrate)(struct page *page, struct page *newpage, int force,
+ enum migrate_mode mode);
}
/*
* The struct page can be forced to be double word aligned so that atomic ops
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h
index 416509e..d91e98a 100644
--- a/include/linux/page-flags.h
+++ b/include/linux/page-flags.h
@@ -113,6 +113,7 @@ enum pageflags {
PG_young,
PG_idle,
#endif
+ PG_movable, /* MOVABLE */