|
@@ -64,6 +64,26 @@
|
|
|
#define _PAGE_FILE (_AT(pteval_t, 1) << _PAGE_BIT_FILE)
|
|
|
#define _PAGE_PROTNONE (_AT(pteval_t, 1) << _PAGE_BIT_PROTNONE)
|
|
|
|
|
|
+/*
|
|
|
+ * _PAGE_NUMA indicates that this page will trigger a numa hinting
|
|
|
+ * minor page fault to gather numa placement statistics (see
|
|
|
+ * pte_numa()). The bit picked (8) is within the range between
|
|
|
+ * _PAGE_FILE (6) and _PAGE_PROTNONE (8) bits. Therefore, it doesn't
|
|
|
+ * require changes to the swp entry format because that bit is always
|
|
|
+ * zero when the pte is not present.
|
|
|
+ *
|
|
|
+ * The bit picked must be always zero when the pmd is present and not
|
|
|
+ * present, so that we don't lose information when we set it while
|
|
|
+ * atomically clearing the present bit.
|
|
|
+ *
|
|
|
+ * Because we shared the same bit (8) with _PAGE_PROTNONE this can be
|
|
|
+ * interpreted as _PAGE_NUMA only in places that _PAGE_PROTNONE
|
|
|
+ * couldn't reach, like handle_mm_fault() (see access_error in
|
|
|
+ * arch/x86/mm/fault.c, the vma protection must not be PROT_NONE for
|
|
|
+ * handle_mm_fault() to be invoked).
|
|
|
+ */
|
|
|
+#define _PAGE_NUMA _PAGE_PROTNONE
|
|
|
+
|
|
|
#define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | \
|
|
|
_PAGE_ACCESSED | _PAGE_DIRTY)
|
|
|
#define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | \
|