Messages in this thread Patch in this message | | | Date | Fri, 28 Jan 2000 15:07:43 +0100 | From | Jakub Jelinek <> | Subject | [PATCH] __get_order() cleanup |
| |
Hi!
At the moment, there are 11 identical implementations of __get_order function. This patch moves __get_order implementation to asm/page.h (so that architectures can optimize it - i386 __get_order is done using bsrl instruction) and kills all the private copies of that function. Patch against 2.3.41-4.
--- linux/arch/i386/kernel/pci-dma.c.jj Wed Jan 26 17:45:04 2000 +++ linux/arch/i386/kernel/pci-dma.c Wed Jan 26 17:57:47 2000 @@ -13,20 +13,6 @@ #include <linux/pci.h> #include <asm/io.h> -/* 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; -} - void *pci_alloc_consistent(struct pci_dev *hwdev, size_t size, dma_addr_t *dma_handle) { --- linux/arch/mips/jazz/floppy-jazz.c.jj Wed Oct 13 07:44:28 1999 +++ linux/arch/mips/jazz/floppy-jazz.c Wed Jan 26 17:49:17 2000 @@ -94,26 +94,11 @@ static unsigned long jazz_fd_getfdaddr1( return JAZZ_FDC_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; -} - static unsigned long jazz_fd_dma_mem_alloc(unsigned long size) { - int order = __get_order(size); unsigned long mem; - mem = __get_dma_pages(GFP_KERNEL, order); + mem = __get_dma_pages(GFP_KERNEL, __get_order(size)); if(!mem) return 0; vdma_alloc(PHYSADDR(mem), size); /* XXX error checking */ --- linux/arch/mips/lib/floppy-std.c.jj Wed Oct 13 07:44:43 1999 +++ linux/arch/mips/lib/floppy-std.c Wed Jan 26 17:49:50 2000 @@ -102,26 +102,11 @@ static unsigned long std_fd_getfdaddr1(v return 0x3f0; } -/* Pure 2^n version of get_order */ -static int __get_order(unsigned long size) -{ - int order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - static unsigned long std_fd_dma_mem_alloc(unsigned long size) { - int order = __get_order(size); unsigned long mem; - mem = __get_dma_pages(GFP_KERNEL,order); + mem = __get_dma_pages(GFP_KERNEL,__get_order(size)); return mem; } --- linux/drivers/block/floppy.c.jj Fri Jan 21 10:52:51 2000 +++ linux/drivers/block/floppy.c Wed Jan 26 17:51:59 2000 @@ -196,7 +196,6 @@ static int use_virtual_dma=0; static unsigned short virtual_dma_port=0x3f0; void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs); static int set_dor(int fdc, char mask, char data); -static inline int __get_order(unsigned long size); #define K_64 0x10000 /* 64KB */ #include <asm/floppy.h> @@ -212,20 +211,6 @@ static inline int __get_order(unsigned l #endif /* Dma Memory related stuff */ - -/* 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; -} #ifndef fd_dma_mem_free #define fd_dma_mem_free(addr, size) free_pages(addr, __get_order(size)) --- linux/drivers/block/xd.c.jj Fri Jan 21 10:52:51 2000 +++ linux/drivers/block/xd.c Wed Jan 26 17:52:33 2000 @@ -87,19 +87,6 @@ XD_INFO xd_info[XD_MAXDRIVES]; should be able to detect your drive's geometry from this info. (eg: xd=0,5,0x320,3 is the "standard"). */ #include <asm/page.h> -/* coppied from floppy.c */ -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 xd_dma_mem_alloc(size) __get_dma_pages(GFP_KERNEL,__get_order(size)) #define xd_dma_mem_free(addr, size) free_pages(addr, __get_order(size)) static char *xd_dma_buffer = 0; --- linux/drivers/char/ftape/lowlevel/ftape-buffer.c.jj Wed Oct 13 07:51:29 1999 +++ linux/drivers/char/ftape/lowlevel/ftape-buffer.c Wed Jan 26 17:53:48 2000 @@ -39,20 +39,6 @@ /* DMA'able memory allocation stuff. */ -/* Pure 2^n version of get_order */ -static inline int __get_order(size_t size) -{ - unsigned long order; - - size = (size-1) >> (PAGE_SHIFT-1); - order = -1; - do { - size >>= 1; - order++; - } while (size); - return order; -} - static inline void *dmaalloc(size_t size) { unsigned long addr; --- linux/drivers/char/esp.c.jj Wed Oct 13 07:49:45 1999 +++ linux/drivers/char/esp.c Wed Jan 26 17:52:58 2000 @@ -203,20 +203,6 @@ static inline void serial_out(struct esp outb(value, info->port+offset); } -static inline int __get_order(unsigned long size) -{ - int order; - - size = (size + PAGE_SIZE -1) >> PAGE_SHIFT; - order = -1; - do { - size >>= 1; - order++; - } while (size); - - return order; -} - /* * ------------------------------------------------------------ * rs_stop() and rs_start() --- linux/drivers/char/tpqic02.c.jj Sat Jan 8 13:25:35 2000 +++ linux/drivers/char/tpqic02.c Wed Jan 26 17:53:22 2000 @@ -2780,23 +2780,6 @@ static struct file_operations qic02_tape }; -/* Why is this not is one place? */ -/* 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; -} - - static void qic02_release_resources(void) { free_irq(QIC02_TAPE_IRQ, NULL); --- linux/drivers/char/zr36120_mem.c.jj Mon Jan 3 08:14:03 2000 +++ linux/drivers/char/zr36120_mem.c Wed Jan 26 17:54:15 2000 @@ -35,17 +35,6 @@ /* Memory management functions */ /*******************************/ -inline int __get_order(unsigned long size) -{ - int order = 0; - size = (size+PAGE_SIZE-1)/PAGE_SIZE; - while (size) { - size /= 2; - order++; - } - return order; -} - void* bmalloc(unsigned long size) { void* mem; --- linux/drivers/net/ltpc.c.jj Wed Oct 13 07:57:20 1999 +++ linux/drivers/net/ltpc.c Wed Jan 26 17:55:20 2000 @@ -246,20 +246,6 @@ static int sendup_buffer (struct net_dev /* Dma Memory related stuff, cribbed directly from 3c505.c */ -/* 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; -} - static unsigned long dma_mem_alloc(int size) { int order = __get_order(size); --- linux/drivers/net/3c505.c.jj Wed Oct 13 07:54:51 1999 +++ linux/drivers/net/3c505.c Wed Jan 26 17:54:40 2000 @@ -183,20 +183,6 @@ static const int addr_list[] __initdata /* Dma Memory related stuff */ -/* 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; -} - static unsigned long dma_mem_alloc(int size) { int order = __get_order(size); --- linux/include/asm-alpha/page.h.jj Mon Dec 20 09:28:25 1999 +++ linux/include/asm-alpha/page.h Wed Jan 26 17:27:21 2000 @@ -109,6 +109,20 @@ typedef unsigned long pgprot_t; #define BUG() __asm__ __volatile__("call_pal 129 # bugchk") #define PAGE_BUG(page) BUG() +/* 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 */ /* to align the pointer to the (next) page boundary */ --- linux/include/asm-arm/page.h.jj Fri Jan 14 09:44:35 2000 +++ linux/include/asm-arm/page.h Wed Jan 26 17:27:01 2000 @@ -65,6 +65,20 @@ extern void __bug(const char *file, int #define BUG() __bug(__FILE__, __LINE__, NULL) #define PAGE_BUG(page) __bug(__FILE__, __LINE__, page) +/* 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__ */ #include <asm/arch/memory.h> --- linux/include/asm-i386/page.h.jj Tue Dec 21 11:17:56 1999 +++ linux/include/asm-i386/page.h Wed Jan 26 17:26:35 2000 @@ -92,6 +92,17 @@ extern int console_loglevel; BUG(); \ } while (0) +/* Pure 2^n version of get_order */ +extern __inline__ int __get_order(unsigned long size) +{ + int order; + + __asm__ ("bsrl %1,%0" : "=r" (order) : "r" (size - 1)); + order -= PAGE_SHIFT - 1; + if (order < 0) order = 0; + return order; +} + #endif /* __ASSEMBLY__ */ #define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET) --- linux/include/asm-m68k/page.h.jj Wed Oct 13 08:07:02 1999 +++ linux/include/asm-m68k/page.h Wed Jan 26 17:24:37 2000 @@ -174,6 +174,20 @@ static inline void *__va(unsigned long x #define MAP_NR(addr) (__pa(addr) >> PAGE_SHIFT) +/* 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__ */ #ifndef CONFIG_SUN3 --- linux/include/asm-mips/page.h.jj Wed Oct 13 08:07:26 1999 +++ linux/include/asm-mips/page.h Wed Jan 26 17:24:03 2000 @@ -65,6 +65,20 @@ typedef unsigned long pgprot_t; #endif /* !defined (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; +} + #endif /* _LANGUAGE_ASSEMBLY */ /* to align the pointer to the (next) page boundary */ --- linux/include/asm-ppc/page.h.jj Thu Dec 2 09:34:51 1999 +++ linux/include/asm-ppc/page.h Wed Jan 26 17:21:30 2000 @@ -113,6 +113,21 @@ static inline void* ___va(unsigned long #define MAP_PAGE_RESERVED (1<<15) extern unsigned long get_zero_page_fast(void); + +/* 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 /* __KERNEL__ */ #endif /* __ASSEMBLY__ */ #endif /* _PPC_PAGE_H */ --- linux/include/asm-sh/page.h.jj Thu Dec 9 12:02:17 1999 +++ linux/include/asm-sh/page.h Wed Jan 26 17:20:58 2000 @@ -76,6 +76,21 @@ extern int console_loglevel; #define PAGE_BUG(page) do { \ BUG(); \ } while (0) + +/* 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__ */ --- linux/include/asm-sparc/page.h.jj Sun Jan 9 20:45:10 2000 +++ linux/include/asm-sparc/page.h Wed Jan 26 17:19:55 2000 @@ -255,6 +255,20 @@ 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) --- linux/include/asm-sparc64/page.h.jj Thu Dec 9 12:03:21 1999 +++ linux/include/asm-sparc64/page.h Wed Jan 26 17:19:02 2000 @@ -126,6 +126,20 @@ struct sparc_phys_banks { extern struct sparc_phys_banks sp_banks[SPARC_PHYS_BANKS]; +/* 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__) */ #endif /* !(__KERNEL__) */
Cheers, Jakub ___________________________________________________________________ Jakub Jelinek | jakub@redhat.com | http://sunsite.mff.cuni.cz/~jj Linux version 2.3.41 on a sparc64 machine (1343.49 BogoMips) ___________________________________________________________________ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |