From: Stephen Rothwell Someone mentioned that almost all the architectures used basically the same implementation of get_order. This patch consolidates them into asm-generic/page.h and includes that in the appropriate places. The exceptions are ia64 and ppc which have their own (presumably optimised) versions. Signed-off-by: Stephen Rothwell Signed-off-by: Andrew Morton --- include/asm-alpha/page.h | 16 ++-------------- include/asm-arm/page.h | 16 ++-------------- include/asm-arm26/page.h | 16 ++-------------- include/asm-cris/page.h | 15 ++------------- include/asm-frv/page.h | 17 ++--------------- include/asm-generic/page.h | 26 ++++++++++++++++++++++++++ include/asm-h8300/page.h | 16 ++-------------- include/asm-i386/page.h | 16 ++-------------- include/asm-m32r/page.h | 21 ++------------------- include/asm-m68k/page.h | 16 ++-------------- include/asm-m68knommu/page.h | 16 ++-------------- include/asm-mips/page.h | 16 ++-------------- include/asm-parisc/page.h | 16 ++-------------- include/asm-ppc64/page.h | 17 +++-------------- include/asm-s390/page.h | 16 ++-------------- include/asm-sh/page.h | 20 ++------------------ include/asm-sh64/page.h | 20 ++------------------ include/asm-sparc/page.h | 16 ++-------------- include/asm-sparc64/page.h | 16 ++-------------- include/asm-um/page.h | 16 ++-------------- include/asm-v850/page.h | 21 ++------------------- include/asm-x86_64/page.h | 16 ++-------------- 22 files changed, 69 insertions(+), 312 deletions(-) diff -puN include/asm-alpha/page.h~mm-consolidate-get_order include/asm-alpha/page.h --- devel/include/asm-alpha/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-alpha/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -63,20 +63,6 @@ typedef unsigned long pgprot_t; #endif /* STRICT_MM_TYPECHECKS */ -/* Pure 2^n version of get_order */ -extern __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - #ifdef USE_48_BIT_KSEG #define PAGE_OFFSET 0xffff800000000000UL #else @@ -112,4 +98,6 @@ extern __inline__ int get_order(unsigned #endif /* __KERNEL__ */ +#include + #endif /* _ALPHA_PAGE_H */ diff -puN include/asm-arm26/page.h~mm-consolidate-get_order include/asm-arm26/page.h --- devel/include/asm-arm26/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-arm26/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -89,20 +89,6 @@ typedef unsigned long pgprot_t; #ifdef __KERNEL__ #ifndef __ASSEMBLY__ -/* Pure 2^n version of get_order */ -static inline int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - #include #endif /* !__ASSEMBLY__ */ @@ -112,4 +98,6 @@ static inline int get_order(unsigned lon #endif /* __KERNEL__ */ +#include + #endif diff -puN include/asm-arm/page.h~mm-consolidate-get_order include/asm-arm/page.h --- devel/include/asm-arm/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-arm/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -163,20 +163,6 @@ typedef unsigned long pgprot_t; /* the upper-most page table pointer */ extern pmd_t *top_pmd; -/* Pure 2^n version of get_order */ -static inline int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - #include #endif /* !__ASSEMBLY__ */ @@ -186,4 +172,6 @@ static inline int get_order(unsigned lon #endif /* __KERNEL__ */ +#include + #endif diff -puN include/asm-cris/page.h~mm-consolidate-get_order include/asm-cris/page.h --- devel/include/asm-cris/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-cris/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -70,19 +70,6 @@ typedef struct { unsigned long pgprot; } #ifndef __ASSEMBLY__ -/* Pure 2^n version of get_order */ -static inline int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} #endif /* __ASSEMBLY__ */ #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ @@ -90,5 +77,7 @@ static inline int get_order(unsigned lon #endif /* __KERNEL__ */ +#include + #endif /* _CRIS_PAGE_H */ diff -puN include/asm-frv/page.h~mm-consolidate-get_order include/asm-frv/page.h --- devel/include/asm-frv/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-frv/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -45,21 +45,6 @@ typedef struct { unsigned long pgprot; } /* to align the pointer to the (next) page boundary */ #define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK) -/* Pure 2^n version of get_order */ -static inline int get_order(unsigned long size) __attribute_const__; -static inline int get_order(unsigned long size) -{ - int order; - - size = (size - 1) >> (PAGE_SHIFT - 1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - #define devmem_is_allowed(pfn) 1 #define __pa(vaddr) virt_to_phys((void *) vaddr) @@ -102,4 +87,6 @@ extern unsigned long max_pfn; #define WANT_PAGE_VIRTUAL 1 #endif +#include + #endif /* _ASM_PAGE_H */ diff -puN /dev/null include/asm-generic/page.h --- /dev/null 2003-09-15 06:40:47.000000000 -0700 +++ devel-akpm/include/asm-generic/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -0,0 +1,26 @@ +#ifndef _ASM_GENERIC_PAGE_H +#define _ASM_GENERIC_PAGE_H + +#ifdef __KERNEL__ +#ifndef __ASSEMBLY__ + +#include + +/* Pure 2^n version of get_order */ +static __inline__ __attribute_const__ int get_order(unsigned long size) +{ + int order; + + size = (size - 1) >> (PAGE_SHIFT - 1); + order = -1; + do { + size >>= 1; + order++; + } while (size); + return order; +} + +#endif /* __ASSEMBLY__ */ +#endif /* __KERNEL__ */ + +#endif /* _ASM_GENERIC_PAGE_H */ diff -puN include/asm-h8300/page.h~mm-consolidate-get_order include/asm-h8300/page.h --- devel/include/asm-h8300/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-h8300/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -54,20 +54,6 @@ typedef struct { unsigned long pgprot; } /* to align the pointer to the (next) page boundary */ #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) -/* Pure 2^n version of get_order */ -extern __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - extern unsigned long memory_start; extern unsigned long memory_end; @@ -101,4 +87,6 @@ extern unsigned long memory_end; #endif /* __KERNEL__ */ +#include + #endif /* _H8300_PAGE_H */ diff -puN include/asm-i386/page.h~mm-consolidate-get_order include/asm-i386/page.h --- devel/include/asm-i386/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-i386/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -104,20 +104,6 @@ typedef struct { unsigned long pgprot; } */ extern unsigned int __VMALLOC_RESERVE; -/* Pure 2^n version of get_order */ -static __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - extern int sysctl_legacy_va_layout; extern int page_is_ram(unsigned long pagenr); @@ -156,4 +142,6 @@ extern int page_is_ram(unsigned long pag #endif /* __KERNEL__ */ +#include + #endif /* _I386_PAGE_H */ diff -puN include/asm-m32r/page.h~mm-consolidate-get_order include/asm-m32r/page.h --- devel/include/asm-m32r/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-m32r/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -61,25 +61,6 @@ typedef struct { unsigned long pgprot; } /* This handles the memory map.. */ -#ifndef __ASSEMBLY__ - -/* Pure 2^n version of get_order */ -static __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size - 1) >> (PAGE_SHIFT - 1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - - return order; -} - -#endif /* __ASSEMBLY__ */ - #define __MEMORY_START CONFIG_MEMORY_START #define __MEMORY_SIZE CONFIG_MEMORY_SIZE @@ -111,5 +92,7 @@ static __inline__ int get_order(unsigned #endif /* __KERNEL__ */ +#include + #endif /* _ASM_M32R_PAGE_H */ diff -puN include/asm-m68knommu/page.h~mm-consolidate-get_order include/asm-m68knommu/page.h --- devel/include/asm-m68knommu/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-m68knommu/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -48,20 +48,6 @@ typedef struct { unsigned long pgprot; } /* to align the pointer to the (next) page boundary */ #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) -/* Pure 2^n version of get_order */ -extern __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - extern unsigned long memory_start; extern unsigned long memory_end; @@ -92,4 +78,6 @@ extern unsigned long memory_end; #endif /* __KERNEL__ */ +#include + #endif /* _M68KNOMMU_PAGE_H */ diff -puN include/asm-m68k/page.h~mm-consolidate-get_order include/asm-m68k/page.h --- devel/include/asm-m68k/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-m68k/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -107,20 +107,6 @@ typedef struct { unsigned long pgprot; } /* to align the pointer to the (next) page boundary */ #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) -/* Pure 2^n version of get_order */ -static inline int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - #endif /* !__ASSEMBLY__ */ #include @@ -192,4 +178,6 @@ static inline void *__va(unsigned long x #endif /* __KERNEL__ */ +#include + #endif /* _M68K_PAGE_H */ diff -puN include/asm-mips/page.h~mm-consolidate-get_order include/asm-mips/page.h --- devel/include/asm-mips/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-mips/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -103,20 +103,6 @@ typedef struct { unsigned long pgprot; } #define __pgd(x) ((pgd_t) { (x) } ) #define __pgprot(x) ((pgprot_t) { (x) } ) -/* Pure 2^n version of get_order */ -static __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - #endif /* !__ASSEMBLY__ */ /* to align the pointer to the (next) page boundary */ @@ -148,4 +134,6 @@ static __inline__ int get_order(unsigned #define WANT_PAGE_VIRTUAL #endif +#include + #endif /* _ASM_PAGE_H */ diff -puN include/asm-parisc/page.h~mm-consolidate-get_order include/asm-parisc/page.h --- devel/include/asm-parisc/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-parisc/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -74,20 +74,6 @@ typedef struct { unsigned long pgprot; } #define __pgd(x) ((pgd_t) { (x) } ) #define __pgprot(x) ((pgprot_t) { (x) } ) -/* Pure 2^n version of get_order */ -extern __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - typedef struct __physmem_range { unsigned long start_pfn; unsigned long pages; /* PAGE_SIZE pages */ @@ -159,4 +145,6 @@ extern int npmem_ranges; #endif /* __KERNEL__ */ +#include + #endif /* _PARISC_PAGE_H */ diff -puN include/asm-ppc64/page.h~mm-consolidate-get_order include/asm-ppc64/page.h --- devel/include/asm-ppc64/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-ppc64/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -160,20 +160,6 @@ typedef unsigned long pgprot_t; #endif -/* Pure 2^n version of get_order */ -static inline int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - #define __pa(x) ((unsigned long)(x)-PAGE_OFFSET) extern int page_is_ram(unsigned long pfn); @@ -261,4 +247,7 @@ extern u64 ppc64_pft_size; /* Log 2 of VM_STACK_DEFAULT_FLAGS32 : VM_STACK_DEFAULT_FLAGS64) #endif /* __KERNEL__ */ + +#include + #endif /* _PPC64_PAGE_H */ diff -puN include/asm-s390/page.h~mm-consolidate-get_order include/asm-s390/page.h --- devel/include/asm-s390/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-s390/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -111,20 +111,6 @@ static inline void copy_page(void *to, v #define alloc_zeroed_user_highpage(vma, vaddr) alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO, vma, vaddr) #define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE -/* Pure 2^n version of get_order */ -extern __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - /* * These are used to make use of C type-checking.. */ @@ -207,4 +193,6 @@ page_get_storage_key(unsigned long addr) #endif /* __KERNEL__ */ +#include + #endif /* _S390_PAGE_H */ diff -puN include/asm-sh64/page.h~mm-consolidate-get_order include/asm-sh64/page.h --- devel/include/asm-sh64/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-sh64/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -115,24 +115,8 @@ typedef struct { unsigned long pgprot; } #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) -#ifndef __ASSEMBLY__ - -/* Pure 2^n version of get_order */ -extern __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - -#endif - #endif /* __KERNEL__ */ +#include + #endif /* __ASM_SH64_PAGE_H */ diff -puN include/asm-sh/page.h~mm-consolidate-get_order include/asm-sh/page.h --- devel/include/asm-sh/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-sh/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -122,24 +122,8 @@ typedef struct { unsigned long pgprot; } #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) -#ifndef __ASSEMBLY__ - -/* Pure 2^n version of get_order */ -static __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - -#endif - #endif /* __KERNEL__ */ +#include + #endif /* __ASM_SH_PAGE_H */ diff -puN include/asm-sparc64/page.h~mm-consolidate-get_order include/asm-sparc64/page.h --- devel/include/asm-sparc64/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-sparc64/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -150,20 +150,6 @@ struct sparc_phys_banks { extern struct sparc_phys_banks sp_banks[SPARC_PHYS_BANKS]; -/* Pure 2^n version of get_order */ -static __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - #endif /* !(__ASSEMBLY__) */ #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ @@ -171,4 +157,6 @@ static __inline__ int get_order(unsigned #endif /* !(__KERNEL__) */ +#include + #endif /* !(_SPARC64_PAGE_H) */ diff -puN include/asm-sparc/page.h~mm-consolidate-get_order include/asm-sparc/page.h --- devel/include/asm-sparc/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-sparc/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -132,20 +132,6 @@ BTFIXUPDEF_SETHI(sparc_unmapped_base) #define TASK_UNMAPPED_BASE BTFIXUP_SETHI(sparc_unmapped_base) -/* Pure 2^n version of get_order */ -extern __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - #else /* !(__ASSEMBLY__) */ #define __pgprot(x) (x) @@ -178,4 +164,6 @@ extern unsigned long pfn_base; #endif /* __KERNEL__ */ +#include + #endif /* _SPARC_PAGE_H */ diff -puN include/asm-um/page.h~mm-consolidate-get_order include/asm-um/page.h --- devel/include/asm-um/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-um/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -116,24 +116,12 @@ extern void *to_virt(unsigned long phys) #define pfn_valid(pfn) ((pfn) < max_mapnr) #define virt_addr_valid(v) pfn_valid(phys_to_pfn(__pa(v))) -/* Pure 2^n version of get_order */ -static __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - extern struct page *arch_validate(struct page *page, int mask, int order); #define HAVE_ARCH_VALIDATE extern void arch_free_page(struct page *page, int order); #define HAVE_ARCH_FREE_PAGE +#include + #endif diff -puN include/asm-v850/page.h~mm-consolidate-get_order include/asm-v850/page.h --- devel/include/asm-v850/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-v850/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -98,25 +98,6 @@ typedef unsigned long pgprot_t; #define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK) -#ifndef __ASSEMBLY__ - -/* Pure 2^n version of get_order */ -extern __inline__ int get_order (unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - -#endif /* !__ASSEMBLY__ */ - - /* No current v850 processor has virtual memory. */ #define __virt_to_phys(addr) (addr) #define __phys_to_virt(addr) (addr) @@ -144,4 +125,6 @@ extern __inline__ int get_order (unsigne #endif /* KERNEL */ +#include + #endif /* __V850_PAGE_H__ */ diff -puN include/asm-x86_64/page.h~mm-consolidate-get_order include/asm-x86_64/page.h --- devel/include/asm-x86_64/page.h~mm-consolidate-get_order 2005-07-30 00:43:50.000000000 -0700 +++ devel-akpm/include/asm-x86_64/page.h 2005-07-30 00:43:50.000000000 -0700 @@ -92,20 +92,6 @@ typedef struct { unsigned long pgprot; } #include -/* Pure 2^n version of get_order */ -extern __inline__ int get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - #endif /* __ASSEMBLY__ */ #define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET) @@ -141,4 +127,6 @@ extern __inline__ int get_order(unsigned #endif /* __KERNEL__ */ +#include + #endif /* _X86_64_PAGE_H */ _