lkml.org 
[lkml]   [2007]   [Jun]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    Subjectsynchronize_qrcu_timeout()
    On 06/25, Paul E. McKenney wrote:
    >
    > On Mon, Jun 25, 2007 at 02:43:32PM +0400, Oleg Nesterov wrote:
    > >
    > > Sadly, you can't use srcu/qrcu because it doesn't handle timeouts.
    >
    > Interesting... So the thought is to have a synchronize_srcu_timeout()
    > or something similar that waited for a grace period to elapse or for
    > a timeout to expire, whichever comes first? It should not be too hard
    > to arrange something, if needed.

    Yes. As for qrcu (see http://marc.info/?t=116484476500001), I think it is easy.
    First, we add "int interrupted" into struct qrcu_struct, then something like this

    long synchronize_qrcu_timeout(struct qrcu_struct *qp, long tout)
    {
    int idx;

    smp_mb();
    mutex_lock(&qp->mutex);

    again:
    idx = qp->completed & 0x1;

    if (unlikely(qp->interrupted)) {
    idx ^= 0x1;
    goto restart;
    }


    if (atomic_read(qp->ctr + idx) == 1)
    goto out;

    atomic_inc(qp->ctr + (idx ^ 0x1));
    qp->completed++;

    atomic_dec(qp->ctr + idx);
    restart:
    __wait_event_timeout(qp->wq, !atomic_read(qp->ctr + idx), tout);
    if (unlikely(!tout)) {
    qp->interrupted = 1;
    goto out;
    }

    if (unlikely(qp->interrupted)) {
    qp->interrupted = 0;
    goto again;
    }

    out:
    mutex_unlock(&qp->mutex);
    smp_mb();

    return tout;
    }

    Of course, this needs some other changes to implement synchronize_qrcu() on top
    of synchronize_qrcu_timeout(). I also think that this doesn't break

    [RFC PATCH] QRCU fastpath optimization
    http://marc.info/?l=linux-kernel&m=117125577710947

    Looks like we can do something similar for srcu.

    Oleg.

    -
    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: 2007-06-25 17:23    [W:2.366 / U:0.316 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site