lkml.org 
[lkml]   [2011]   [Sep]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH 00/13] [PATCH RFC] Paravirtualized ticketlocks
    On Thu, Sep 1, 2011 at 5:54 PM, Jeremy Fitzhardinge <jeremy@goop.org> wrote:
    >
    > The inner part of ticket lock code becomes:
    >        inc = xadd(&lock->tickets, inc);
    >        inc.tail &= ~TICKET_SLOWPATH_FLAG;
    >
    >        for (;;) {
    >                unsigned count = SPIN_THRESHOLD;
    >
    >                do {
    >                        if (inc.head == inc.tail)
    >                                goto out;
    >                        cpu_relax();
    >                        inc.head = ACCESS_ONCE(lock->tickets.head);
    >                } while (--count);
    >                __ticket_lock_spinning(lock, inc.tail);
    >        }

    Hmm. It strikes me that I don't think you should touch the
    TICKET_SLOWPATH_FLAG in the fastpath at all.

    Can't you just do this:

    inc = xadd(&lock->tickets, inc);
    if (likely(inc.head == inc.tail))
    goto out;

    ### SLOWPATH ###
    inc.tail &= ~TICKET_SLOWPATH_FLAG;
    for (;;) {
    .. as before ..

    which might alleviate the problem with the fastpath being polluted by
    all those silly slowpath things. Hmm?

    (This assumes that TICKET_SLOWPATH_FLAG is never set in inc.head, so
    if it's set that equality check will fail. I didn't actually check if
    that assumption was correct)

    Linus
    --
    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: 2011-09-02 17:41    [W:0.026 / U:0.024 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site