Messages in this thread Patch in this message | | | Date | Tue, 27 Apr 2004 18:57:03 -0700 | From | William Lee Irwin III <> | Subject | Re: [PATCH] Fix cpu iterator on empty bitmask |
| |
Rusty wrote: >> Agreed, I'm pretty sure Paul's work doesn't make this mistake, but this >> is a trivial patch for a real big which is causing oopses today. >> Linus, please apply...
On Tue, Apr 27, 2004 at 06:31:35PM -0700, Paul Jackson wrote: > agreed
Eh? Why are you now suddenly changing your tune from when I wrote a fix for this and others just 10 days ago? The remainder of the missing fixes below.
-- wli
Index: wli-2.6.5-mm6/include/asm-generic/cpumask_arith.h =================================================================== --- wli-2.6.5-mm6.orig/include/asm-generic/cpumask_arith.h 2004-04-03 19:37:37.000000000 -0800 +++ wli-2.6.5-mm6/include/asm-generic/cpumask_arith.h 2004-04-17 19:11:53.000000000 -0700 @@ -15,17 +15,17 @@ #define cpus_or(dst,src1,src2) do { dst = (src1) | (src2); } while (0) #define cpus_clear(map) do { map = 0; } while (0) #define cpus_complement(map) do { map = ~(map); } while (0) -#define cpus_equal(map1, map2) ((map1) == (map2)) -#define cpus_empty(map) ((map) == 0) +#define cpus_equal(map1, map2) (!(((map1) ^ (map2)) & CPU_MASK_ALL)) +#define cpus_empty(map) (!((map) & CPU_MASK_ALL)) #define cpus_addr(map) (&(map)) #if BITS_PER_LONG == 32 -#define cpus_weight(map) hweight32(map) +#define cpus_weight(map) hweight32((map) & CPU_MASK_ALL) #elif BITS_PER_LONG == 64 -#define cpus_weight(map) hweight64(map) +#define cpus_weight(map) hweight64((map) & CPU_MASK_ALL) #endif -#define cpus_shift_right(dst, src, n) do { dst = (src) >> (n); } while (0) +#define cpus_shift_right(dst, src, n) do { dst = ((src) >> (n)) & CPU_MASK_ALL; } while (0) #define cpus_shift_left(dst, src, n) do { dst = (src) << (n); } while (0) #define any_online_cpu(map) \ @@ -39,11 +39,15 @@ #define CPU_MASK_NONE ((cpumask_t)0) /* only ever use this for things that are _never_ used on large boxen */ -#define cpus_coerce(map) ((unsigned long)(map)) +#define cpus_coerce(map) ((unsigned long)(map) & CPU_MASK_ALL) #define cpus_promote(map) ({ map; }) #define cpumask_of_cpu(cpu) ({ ((cpumask_t)1) << (cpu); }) -#define first_cpu(map) __ffs(map) #define next_cpu(cpu, map) find_next_bit(&(map), NR_CPUS, cpu + 1) +#define first_cpu(map) \ +({ \ + cpumask_t __first_cpu_map__ = (map) & CPU_MASK_ALL; \ + __first_cpu_map__ ? __ffs(__first_cpu_map__) : NR_CPUS; \ +}) #endif /* __ASM_GENERIC_CPUMASK_ARITH_H */ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |