lkml.org 
[lkml]   [2014]   [Apr]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v2] rwsem: Support optimistic spinning
    From
    On Wed, Apr 30, 2014 at 2:04 AM, Peter Zijlstra <peterz@infradead.org> wrote:
    > On Mon, Apr 28, 2014 at 03:09:01PM -0700, Davidlohr Bueso wrote:
    >> +static inline bool rwsem_can_spin_on_owner(struct rw_semaphore *sem)
    >> +{
    >> + int retval;
    >
    > And yet the return value is bool.
    >
    >> + struct task_struct *owner;
    >> +
    >> + rcu_read_lock();
    >> + owner = ACCESS_ONCE(sem->owner);
    >> +
    >> + /* Spin only if active writer running */
    >> + if (owner)
    >> + retval = owner->on_cpu;
    >> + else {
    >> + /*
    >> + * When the owner is not set, the sem owner may have just
    >> + * acquired it and not set the owner yet, or the sem has
    >> + * been released, or reader active.
    >> + */
    >> + retval = false;
    >> + }
    >
    > And if you init the retval to false, you can leave this entire branch
    > out.
    >
    >> + rcu_read_unlock();
    >> +
    >> + return retval;
    >> +}
    >
    >
    > Which yields the much shorter:
    >
    > static inline bool rwsem_can_spin_on_owner(struct rw_semaphore *sem)
    > {
    > struct task_struct *owner;
    > bool on_cpu = false;

    Wouldn't we want to initialize on_cpu = true. For the !owner case, I
    would expect that we want to spin for the lock.

    > rcu_read_lock();
    > owner = ACCESS_ONCE(sem->owner);
    > if (owner)
    > on_cpu = owner->on_cpu;
    > rcu_read_unlock();
    >
    > return on_cpu;
    > }


    \
     
     \ /
      Last update: 2014-05-01 01:41    [W:8.939 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site