lkml.org 
[lkml]   [2013]   [Nov]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH 4/5] futex: Avoid taking hb lock if nothing to wakeup
    From
    On Fri, Nov 22, 2013 at 4:56 PM, Davidlohr Bueso <davidlohr@hp.com> wrote:
    > In futex_wake() there is clearly no point in taking the hb->lock if
    > we know beforehand that there are no tasks to be woken. This comes
    > at the smaller cost of doing some atomic operations to keep track of
    > the list's size.

    Hmm. Why? Afaik, you only care about "empty or not". And if you don't
    need the serialization from locking, then afaik you can just do a
    "plist_head_empty()" without holding the lock.

    NOTE!

    The "list_empty()" function is very much designed to work even without
    holding a lock (as long as the head itself exists reliably, of course)
    BUT you have to then guarantee yourself that your algorithm doesn't
    have any races wrt other CPU's adding an entry to the list at the same
    time. Not holding a lock obviously means that you are not serialized
    against that.. We've had problems with people doing

    if (!list_empty(waiters))
    wake_up_list(..)

    because they wouldn't wake people up who just got added.

    But considering that your atomic counter checking has the same lack of
    serialization, at least the plist_head_empty() check shouldn't be any
    worse than that counter thing.. And doesn't need any steenking atomic
    ops or a new counter field.

    Linus


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