lkml.org 
[lkml]   [2013]   [Jun]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH RFC ticketlock] Auto-queued ticketlock
    On Mon, Jun 10, 2013 at 05:08:25PM -0400, Steven Rostedt wrote:
    > On Sun, 2013-06-09 at 12:36 -0700, Paul E. McKenney wrote:
    > >
    > > +#else /* #ifndef CONFIG_TICKET_LOCK_QUEUED */
    > > +
    > > +bool tkt_spin_pass(arch_spinlock_t *ap, struct __raw_tickets inc);
    > > +
    > > +static __always_inline void __ticket_spin_lock(arch_spinlock_t *lock)
    > > +{
    > > + register struct __raw_tickets inc = { .tail = 2 };
    > > +
    > > + inc = xadd(&lock->tickets, inc);
    > > + for (;;) {
    > > + if (inc.head == inc.tail || tkt_spin_pass(lock, inc))
    > > + break;
    > > + inc.head = ACCESS_ONCE(lock->tickets.head);
    > > + }
    > > + barrier(); /* smp_mb() on Power or ARM. */
    > > +}
    > > +
    > > +#endif /* #else #ifndef CONFIG_TICKET_LOCK_QUEUED */
    > > +
    >
    > To avoid the above code duplication, I would have this instead:

    Nice! I have updated accordingly.

    Thanx, Paul

    > #ifdef CONFIG_TICKET_LOCK_QUEUED
    >
    > bool tkt_spin_pass(arch_spinlock_t *ap, struct __raw_tickets inc);
    > #define __TKT_SPIN_INC 2
    >
    > #else
    >
    > static inline bool tkt_spin_pass(arch_spinlock_t *ap, struct
    > __raw_tickets inc)
    > {
    > return false;
    > }
    >
    > #define __TKT_SPIN_INC 1
    >
    > #endif
    >
    > static __always_inline void __ticket_spin_lock(arch_spinlock_t *lock)
    > {
    > register struct __raw_tickets inc = { .tail = __TKT_SPIN_INC };
    >
    > inc = xadd(&lock->tickets, inc);
    >
    > for (;;) {
    > if (inc.head == inc.tail || tkt_spin_pass(lock, inc))
    > break;
    > cpu_relax();
    > inc.head = ACCESS_ONCE(lock->tickets.head);
    > }
    > barrier; /* make sure nothing creeps before the lock is taken */
    > }
    >
    > -- Steve
    >
    >



    \
     
     \ /
      Last update: 2013-06-10 23:41    [W:4.083 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site