On Fri, May 25, 2012 at 07:02:08PM +0200, Andrea Arcangeli wrote: > We will set these bitflags only when the pmd and pte is non present. > > They work like PROT_NONE but they identify a request for the numa > hinting page fault to trigger. > > Because we want to be able to set these bitflag in any established pte > or pmd (while clearing the present bit at the same time) without > losing information, these bitflags must never be set when the pte and > pmd are present. > > For _PAGE_NUMA_PTE the pte bitflag used is _PAGE_PSE, which cannot be > set on ptes and it also fits in between _PAGE_FILE and _PAGE_PROTNONE > which avoids having to alter the swp entries format. > > For _PAGE_NUMA_PMD, we use a reserved bitflag. pmds never contain > swap_entries but if in the future we'll swap transparent hugepages, we > must keep in mind not to use the _PAGE_UNUSED2 bitflag in the swap > entry format and to start the swap entry offset above it. > > PAGE_UNUSED2 is used by Xen but only on ptes established by ioremap, > but it's never used on pmds so there's no risk of collision with Xen. Thank you for loking at this from the xen side. The interesting thing is that I believe the _PAGE_PAT (or _PAGE_PSE) is actually used on Xen on PTEs. It is used to mark the pages WC. <sigh> > > Signed-off-by: Andrea Arcangeli <aarcange@xxxxxxxxxx> > --- > arch/x86/include/asm/pgtable_types.h | 11 +++++++++++ > 1 files changed, 11 insertions(+), 0 deletions(-) > > diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h > index b74cac9..6e2d954 100644 > --- a/arch/x86/include/asm/pgtable_types.h > +++ b/arch/x86/include/asm/pgtable_types.h > @@ -71,6 +71,17 @@ > #define _PAGE_FILE (_AT(pteval_t, 1) << _PAGE_BIT_FILE) > #define _PAGE_PROTNONE (_AT(pteval_t, 1) << _PAGE_BIT_PROTNONE) > > +/* > + * Cannot be set on pte. The fact it's in between _PAGE_FILE and > + * _PAGE_PROTNONE avoids having to alter the swp entries. > + */ > +#define _PAGE_NUMA_PTE _PAGE_PSE > +/* > + * Cannot be set on pmd, if transparent hugepages will be swapped out > + * the swap entry offset must start above it. > + */ > +#define _PAGE_NUMA_PMD _PAGE_UNUSED2 > + > #define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | \ > _PAGE_ACCESSED | _PAGE_DIRTY) > #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | \ > > -- > 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/ . > Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ > Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a> > -- 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/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>