On Wed, Nov 03, 2010 at 04:27:51PM +0100, Andrea Arcangeli wrote: > From: Andrea Arcangeli <aarcange@xxxxxxxxxx> > > These returns 0 at compile time when the config option is disabled, to allow > gcc to eliminate the transparent hugepage function calls at compile time > without additional #ifdefs (only the export of those functions have to be > visible to gcc but they won't be required at link time and huge_memory.o can be > not built at all). > > _PAGE_BIT_UNUSED1 is never used for pmd, only on pte. > > Signed-off-by: Andrea Arcangeli <aarcange@xxxxxxxxxx> > Acked-by: Rik van Riel <riel@xxxxxxxxxx> > --- > > diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h > --- a/arch/x86/include/asm/pgtable_64.h > +++ b/arch/x86/include/asm/pgtable_64.h > @@ -168,6 +168,19 @@ extern void cleanup_highmap(void); > #define kc_offset_to_vaddr(o) ((o) | ~__VIRTUAL_MASK) > > #define __HAVE_ARCH_PTE_SAME > + > +#ifdef CONFIG_TRANSPARENT_HUGEPAGE > +static inline int pmd_trans_splitting(pmd_t pmd) > +{ > + return pmd_val(pmd) & _PAGE_SPLITTING; > +} > + > +static inline int pmd_trans_huge(pmd_t pmd) > +{ > + return pmd_val(pmd) & _PAGE_PSE; > +} > +#endif /* CONFIG_TRANSPARENT_HUGEPAGE */ > + > #endif /* !__ASSEMBLY__ */ > > #endif /* _ASM_X86_PGTABLE_64_H */ > diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h > --- a/arch/x86/include/asm/pgtable_types.h > +++ b/arch/x86/include/asm/pgtable_types.h > @@ -22,6 +22,7 @@ > #define _PAGE_BIT_PAT_LARGE 12 /* On 2MB or 1GB pages */ > #define _PAGE_BIT_SPECIAL _PAGE_BIT_UNUSED1 > #define _PAGE_BIT_CPA_TEST _PAGE_BIT_UNUSED1 > +#define _PAGE_BIT_SPLITTING _PAGE_BIT_UNUSED1 /* only valid on a PSE pmd */ > #define _PAGE_BIT_NX 63 /* No execute: only valid after cpuid check */ > > /* If _PAGE_BIT_PRESENT is clear, we use these: */ > @@ -45,6 +46,7 @@ > #define _PAGE_PAT_LARGE (_AT(pteval_t, 1) << _PAGE_BIT_PAT_LARGE) > #define _PAGE_SPECIAL (_AT(pteval_t, 1) << _PAGE_BIT_SPECIAL) > #define _PAGE_CPA_TEST (_AT(pteval_t, 1) << _PAGE_BIT_CPA_TEST) > +#define _PAGE_SPLITTING (_AT(pteval_t, 1) << _PAGE_BIT_SPLITTING) > #define __HAVE_ARCH_PTE_SPECIAL > > #ifdef CONFIG_KMEMCHECK > diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h > --- a/include/asm-generic/pgtable.h > +++ b/include/asm-generic/pgtable.h > @@ -348,6 +348,11 @@ extern void untrack_pfn_vma(struct vm_ar > unsigned long size); > #endif > > +#ifndef CONFIG_TRANSPARENT_HUGEPAGE > +#define pmd_trans_huge(pmd) 0 > +#define pmd_trans_splitting(pmd) 0 > +#endif > + Usually it is insisted upon that this looks like static inline int pmd_trans_huge(pmd) { return 0; } I understand it's to avoid any possibility of side-effets though to have type checking and I am 99% certain the compiler still does the right thing. Still, with no obvious side-effects here; Acked-by: Mel Gorman <mel@xxxxxxxxx> > #endif /* !__ASSEMBLY__ */ > > #endif /* _ASM_GENERIC_PGTABLE_H */ > -- Mel Gorman Part-time Phd Student Linux Technology Center University of Limerick IBM Dublin Software Lab -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom policy in Canada: sign http://dissolvethecrtc.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>