lkml.org 
[lkml]   [2007]   [Oct]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH] synchronize_irq needs a barrier
    Date
    Nick Piggin <nickpiggin@yahoo.com.au> wrote:
    >
    >> First of all let's agree on some basic assumptions:
    >>
    >> * A pair of spin lock/unlock subsumes the effect of a full mb.
    >
    > Not unless you mean a pair of spin lock/unlock as in
    > 2 spin lock/unlock pairs (4 operations).
    >
    > *X = 10;
    > spin_lock(&lock);
    > /* *Y speculatively loaded here */
    > /* store to *X leaves CPU store queue here */
    > spin_unlock(&lock);
    > y = *Y;

    Good point.

    Although in this case we're still safe because in the worst
    cases:

    CPU0 CPU1
    irq_sync = 1
    synchronize_irq
    spin lock
    load IRQ_INPROGRESS
    irq_sync sync is visible
    spin unlock
    spin lock
    load irq_sync
    while (IRQ_INPROGRESS)
    wait
    return
    set IRQ_INPROGRESS
    spin unlock
    tg3_msi
    ack IRQ
    if (irq_sync)
    return
    spin lock
    clear IRQ_INPROGRESS
    spin unlock

    ------------------------------------------------------------

    CPU0 CPU1
    spin lock
    load irq_sync
    irq_sync = 1
    synchronize_irq
    set IRQ_INPROGRESS
    spin unlock
    spin lock
    load IRQ_INPROGRESS
    irq_sync sync is visible
    spin unlock
    while (IRQ_INPROGRESS)
    wait
    tg3_msi
    ack IRQ
    if (irq_sync)
    return
    do work
    spin lock
    clear IRQ_INPROGRESS
    spin unlock
    return

    So because we're using the same lock on both sides, it does
    do the right thing even without the memory barrier.

    Cheers,
    --
    Visit Openswan at http://www.openswan.org/
    Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
    Home Page: http://gondor.apana.org.au/~herbert/
    PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
    -
    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-10-19 05:31    [W:2.884 / U:0.472 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site