[lkml]   [2008]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH] atomic: fix a typo in atomic_long_xchg()
    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

    struct percpu_lcounter {
    atomic_long_t count;
    #ifdef CONFIG_SMP
    struct list_head list; /* All percpu_counters are on a list */
    atomic_long_t *counters;

    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);

    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 <>
    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-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2008-12-07 23:27    [W:0.023 / U:8.316 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site