linux/include/asm-generic/bitops
Alexander van Heukelum 64970b68d2 x86, generic: optimize find_next_(zero_)bit for small constant-size bitmaps
This moves an optimization for searching constant-sized small
bitmaps form x86_64-specific to generic code.

On an i386 defconfig (the x86#testing one), the size of vmlinux hardly
changes with this applied. I have observed only four places where this
optimization avoids a call into find_next_bit:

In the functions return_unused_surplus_pages, alloc_fresh_huge_page,
and adjust_pool_surplus, this patch avoids a call for a 1-bit bitmap.
In __next_cpu a call is avoided for a 32-bit bitmap. That's it.

On x86_64, 52 locations are optimized with a minimal increase in
code size:

Current #testing defconfig:
	146 x bsf, 27 x find_next_*bit
   text    data     bss     dec     hex filename
   5392637  846592  724424 6963653  6a41c5 vmlinux

After removing the x86_64 specific optimization for find_next_*bit:
	94 x bsf, 79 x find_next_*bit
   text    data     bss     dec     hex filename
   5392358  846592  724424 6963374  6a40ae vmlinux

After this patch (making the optimization generic):
	146 x bsf, 27 x find_next_*bit
   text    data     bss     dec     hex filename
   5392396  846592  724424 6963412  6a40d4 vmlinux

[ tglx@linutronix.de: build fixes ]

Signed-off-by: Ingo Molnar <mingo@elte.hu>
2008-04-26 19:21:16 +02:00
..
__ffs.h [PATCH] bitops: generic __ffs() 2006-03-26 08:57:10 -08:00
atomic.h define first set of BIT* macros 2007-10-19 11:53:42 -07:00
ext2-atomic.h [PATCH] bitops: generic ext2_{set,clear}_bit_atomic() 2006-03-26 08:57:11 -08:00
ext2-non-atomic.h ext4: Add ext4_find_next_bit() 2008-01-28 23:58:27 -05:00
ffs.h [PATCH] bitops: generic ffs() 2006-03-26 08:57:11 -08:00
ffz.h [PATCH] bitops: generic ffz() 2006-03-26 08:57:10 -08:00
find.h x86, generic: optimize find_next_(zero_)bit for small constant-size bitmaps 2008-04-26 19:21:16 +02:00
fls64.h [PATCH] fix error: __u32 undeclared 2006-03-26 08:57:11 -08:00
fls.h [PATCH] bitops: generic fls() 2006-03-26 08:57:10 -08:00
hweight.h [PATCH] fix error: __u32 undeclared 2006-03-26 08:57:11 -08:00
le.h ext4: Add ext4_find_next_bit() 2008-01-28 23:58:27 -05:00
lock.h bitops: introduce lock ops 2007-10-18 14:37:29 -07:00
minix-le.h [PATCH] bitops: generic minix_{test,set,test_and_clear,test,find_first_zero}_bit() 2006-03-26 08:57:11 -08:00
minix.h [PATCH] bitops: generic minix_{test,set,test_and_clear,test,find_first_zero}_bit() 2006-03-26 08:57:11 -08:00
non-atomic.h define first set of BIT* macros 2007-10-19 11:53:42 -07:00
sched.h sched: simplify sched_find_first_bit() 2007-07-09 18:52:00 +02:00