lkml.org 
[lkml]   [2006]   [Dec]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] WorkStruct: Implement generic UP cmpxchg() where an arch doesn't support it
    On Wed, Dec 06, 2006 at 11:05:22AM -0800, Linus Torvalds wrote:
    > On Wed, 6 Dec 2006, Christoph Lameter wrote:
    > >
    > > I'd really appreciate a cmpxchg that is generically available for
    > > all arches. It will allow lockless implementation for various performance
    > > criticial portions of the kernel.
    >
    > I suspect ARM may have been the last one without one, no?

    It's just been pointed out to me that the parisc one isn't safe.

    <dhowells> imagine variable X is set to 3
    <dhowells> CPU A issues cmpxchg(&X, 3, 5)
    <dhowells> you'd expect that to change X to 5
    <dhowells> but what if CPU B assigns 6 to X between cmpxchg reading X
    and it setting X?

    Given parisc's paucity of atomic operations (load-and-zero-32bit and
    load-and-zero-64bit), cmpxchg() is impossible to implement safely.
    There has to be something we can hook to exclude another processor
    modifying the variable. I'm OK with using atomic_cmpxchg(); we have
    atomic_set locked against it.

    Of course, using cmpxchg() isn't really lockless. It's just hidden
    locking.
    -
    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/

    \
     
     \ /
      Last update: 2006-12-06 20:29    [W:0.036 / U:150.592 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site