lkml.org 
[lkml]   [2017]   [Apr]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH tip/core/rcu 07/13] rcu: Add smp_mb__after_atomic() to sync_exp_work_done()
    On Thu, Apr 20, 2017 at 08:03:21AM -0700, Paul E. McKenney wrote:
    > On Thu, Apr 20, 2017 at 01:17:43PM +0200, Peter Zijlstra wrote:

    > > > +/**
    > > > + * spin_is_locked - Conditionally interpose after prior critical sections
    > > > + * @lock: the spinlock whose critical sections are to be interposed.
    > > > + *
    > > > + * Semantically this is equivalent to a spin_trylock(), and, if
    > > > + * the spin_trylock() succeeds, immediately followed by a (mythical)
    > > > + * spin_unlock_relaxed(). The return value from spin_trylock() is returned
    > > > + * by spin_is_locked(). Note that all current architectures have extremely
    > > > + * efficient implementations in which the spin_is_locked() does not even
    > > > + * write to the lock variable.
    > > > + *
    > > > + * A successful spin_is_locked() primitive in some sense "takes its place"
    > > > + * after some critical section for the lock in question. Any accesses
    > > > + * following a successful spin_is_locked() call will therefore happen
    > > > + * after any accesses by any of the preceding critical section for that
    > > > + * same lock. Note however, that spin_is_locked() provides absolutely no
    > > > + * ordering guarantees for code preceding the call to that spin_is_locked().
    > > > + */
    > > > static __always_inline int spin_is_locked(spinlock_t *lock)
    > > > {
    > > > return raw_spin_is_locked(&lock->rlock);
    > >
    > > I'm current confused on this one. The case listed in the qspinlock code
    > > doesn't appear to exist in the kernel anymore (or at least, I'm having
    > > trouble finding it).
    > >
    > > That said, I'm also not sure spin_is_locked() provides an acquire, as
    > > that comment has an explicit smp_acquire__after_ctrl_dep();
    >
    > OK, I have dropped this portion of the patch for the moment.
    >
    > Going forward, exactly what semantics do you believe spin_is_locked()
    > provides?
    >
    > Do any of the current implementations need to change to provide the
    > semantics expected by the various use cases?

    I don't have anything other than the comment I wrote back then. I would
    have to go audit all spin_is_locked() implementations and users (again).

    \
     
     \ /
      Last update: 2017-04-20 17:09    [W:3.179 / U:0.688 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site