From: Paul Jackson With the following changes, I was able to compile the "sparc" (32 bit) arch, using defconfig and crosstool. There were still plenty of warnings, but nothing else relating to bitops or cpumasks that I noticed. This is working with 2.6.7-mm5. I have no way to boot test this, but these changes seem obvious enough that I'd recommend including them. Signed-off-by: Paul Jackson Signed-off-by: Andrew Morton --- 25-akpm/include/asm-sparc/bitops.h | 15 +++++++++++++-- 25-akpm/include/asm-sparc/system.h | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff -puN include/asm-sparc/bitops.h~sparc-32-cpumask-bitop-build-fix include/asm-sparc/bitops.h --- 25/include/asm-sparc/bitops.h~sparc-32-cpumask-bitop-build-fix 2004-07-03 22:36:03.352034808 -0700 +++ 25-akpm/include/asm-sparc/bitops.h 2004-07-03 22:36:03.357034048 -0700 @@ -366,9 +366,9 @@ found_middle: * * Scheduler induced bitop, do not use. */ -static inline int find_next_bit(unsigned long *addr, int size, int offset) +static inline int find_next_bit(const unsigned long *addr, int size, int offset) { - unsigned long *p = addr + (offset >> 5); + const unsigned long *p = addr + (offset >> 5); int num = offset & ~0x1f; unsigned long word; @@ -384,6 +384,17 @@ static inline int find_next_bit(unsigned return num; } +/** + * find_first_bit - find the first set bit in a memory region + * @addr: The address to start the search at + * @size: The maximum size to search + * + * Returns the bit-number of the first set bit, not the number of the byte + * containing a bit. + */ +#define find_first_bit(addr, size) \ + find_next_bit((addr), (size), 0) + /* */ static inline int test_le_bit(int nr, __const__ unsigned long * addr) diff -puN include/asm-sparc/system.h~sparc-32-cpumask-bitop-build-fix include/asm-sparc/system.h --- 25/include/asm-sparc/system.h~sparc-32-cpumask-bitop-build-fix 2004-07-03 22:36:03.353034656 -0700 +++ 25-akpm/include/asm-sparc/system.h 2004-07-03 22:36:03.358033896 -0700 @@ -126,7 +126,7 @@ extern void fpsave(unsigned long *fpregs #define switch_to(prev, next, last) do { \ SWITCH_ENTER(prev); \ SWITCH_DO_LAZY_FPU(next); \ - next->active_mm->cpu_vm_mask |= (1 << smp_processor_id()); \ + cpu_set(smp_processor_id(), next->active_mm->cpu_vm_mask); \ __asm__ __volatile__( \ "sethi %%hi(here - 0x8), %%o7\n\t" \ "mov %%g6, %%g3\n\t" \ _