14 Sep, 2011

1 commit

  • There are still some leftovers of commit f59ca058
    [locking, lib/atomic64: Annotate atomic64_lock::lock as raw]

    [ tglx: Seems I picked the wrong version of that patch :( ]

    Signed-off-by: Yong Zhang
    Cc: Peter Zijlstra
    Cc: Shan Hai
    Cc: Stephen Rothwell
    Link: http://lkml.kernel.org/r/20110914074924.GA16096@zhy
    Signed-off-by: Thomas Gleixner

    Yong Zhang
     

13 Sep, 2011

1 commit

  • The spinlock protected atomic64 operations must be irq safe as they
    are used in hard interrupt context and cannot be preempted on -rt:

    NIP [c068b218] rt_spin_lock_slowlock+0x78/0x3a8
    LR [c068b1e0] rt_spin_lock_slowlock+0x40/0x3a8
    Call Trace:
    [eb459b90] [c068b1e0] rt_spin_lock_slowlock+0x40/0x3a8 (unreliable)
    [eb459c20] [c068bdb0] rt_spin_lock+0x40/0x98
    [eb459c40] [c03d2a14] atomic64_read+0x48/0x84
    [eb459c60] [c001aaf4] perf_event_interrupt+0xec/0x28c
    [eb459d10] [c0010138] performance_monitor_exception+0x7c/0x150
    [eb459d30] [c0014170] ret_from_except_full+0x0/0x4c

    So annotate it.

    In mainline this change documents the low level nature of
    the lock - otherwise there's no functional difference. Lockdep
    and Sparse checking will work as usual.

    Signed-off-by: Shan Hai
    Reviewed-by: Yong Zhang
    Signed-off-by: Thomas Gleixner
    Signed-off-by: Ingo Molnar

    Shan Hai
     

27 Jul, 2011

1 commit

  • This allows us to move duplicated code in
    (atomic_inc_not_zero() for now) to

    Signed-off-by: Arun Sharma
    Reviewed-by: Eric Dumazet
    Cc: Ingo Molnar
    Cc: David Miller
    Cc: Eric Dumazet
    Acked-by: Mike Frysinger
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Arun Sharma
     

02 Mar, 2010

1 commit


30 Jul, 2009

1 commit

  • The generic atomic64_t implementation in lib/ did not export the functions
    it defined, which means that modules that use atomic64_t would not link on
    platforms (such as 32-bit powerpc). For example, trying to build a kernel
    with CONFIG_NET_RDS on such a platform would fail with:

    ERROR: "atomic64_read" [net/rds/rds.ko] undefined!
    ERROR: "atomic64_set" [net/rds/rds.ko] undefined!

    Fix this by exporting the atomic64_t functions to modules. (I export the
    entire API even if it's not all currently used by in-tree modules to avoid
    having to continue fixing this in dribs and drabs)

    Signed-off-by: Roland Dreier
    Acked-by: Paul Mackerras
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Roland Dreier
     

15 Jun, 2009

1 commit

  • Many processor architectures have no 64-bit atomic instructions, but
    we need atomic64_t in order to support the perf_counter subsystem.

    This adds an implementation of 64-bit atomic operations using hashed
    spinlocks to provide atomicity. For each atomic operation, the address
    of the atomic64_t variable is hashed to an index into an array of 16
    spinlocks. That spinlock is taken (with interrupts disabled) around the
    operation, which can then be coded non-atomically within the lock.

    On UP, all the spinlock manipulation goes away and we simply disable
    interrupts around each operation. In fact gcc eliminates the whole
    atomic64_lock variable as well.

    Signed-off-by: Paul Mackerras
    Signed-off-by: Benjamin Herrenschmidt

    Paul Mackerras