Andrew Morton a écrit : > We can do lots of things in 2.6.29. Including just making ->counters > an array of atomic_t. I was playing with this idea this week (but using atomic_long_t), and this is why I bother you with all this stuff : cleanup patches before work for 2.6.29 My idea was using atomic_long_t so that 64bit arches dont need a spinlock any more, and new percpu_lcounter would be ok for counters that dont need s64 but a plain long (nr_files, network counters...) struct percpu_lcounter { atomic_long_t count; #ifdef CONFIG_SMP #ifdef CONFIG_HOTPLUG_CPU struct list_head list; /* All percpu_counters are on a list */ #endif atomic_long_t *counters; #endif }; void __percpu_lcounter_add(struct percpu_lcounter *fbc, long amount, s32 batch) { long count; atomic_long_t *pcount; pcount = per_cpu_ptr(fbc->counters, get_cpu()); count = atomic_long_add_return(amount, pcount); if (unlikely(count >= batch || count <= -batch)) { atomic_long_add(count, &fbc->count); atomic_long_sub(count, pcount); } put_cpu(); } long percpu_lcounter_sum(struct percpu_lcounter *fbc) { long accumulator = 0, val; int cpu; for_each_online_cpu(cpu) { atomic_long_t *pcount = per_cpu_ptr(fbc->counters, cpu); val = atomic_long_xchg(pcount, 0); accumulator += val; } return atomic_long_add_return(accumulator, &fbc->count); } Then I found the following typo : [PATCH] atomic: fix a typo in atomic_long_xchg() atomic_long_xchg() not correctly defined for 32bit arches. Signed-off-by: Eric Dumazet <dada1@xxxxxxxxxxxxx> --- diff --git a/include/asm-generic/atomic.h b/include/asm-generic/atomic.h index 4ec0a29..7abdaa9 100644 --- a/include/asm-generic/atomic.h +++ b/include/asm-generic/atomic.h @@ -251,7 +251,7 @@ static inline long atomic_long_add_unless(atomic_long_t *l, long a, long u) #define atomic_long_cmpxchg(l, old, new) \ (atomic_cmpxchg((atomic_t *)(l), (old), (new))) #define atomic_long_xchg(v, new) \ - (atomic_xchg((atomic_t *)(l), (new))) + (atomic_xchg((atomic_t *)(v), (new))) #endif /* BITS_PER_LONG == 64 */ -- To unsubscribe from this list: send the line "unsubscribe linux-ext4" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html