lkml.org 
[lkml]   [2005]   [Jan]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    Date
    From
    SubjectRe: page table lock patch V15 [0/7]: overview
    On Thu, Jan 13, 2005 at 09:11:29AM -0800, Christoph Lameter wrote:
    > On Wed, 13 Jan 2005, Andi Kleen wrote:
    >
    > > Alternatively you can use a lazy load, checking for changes.
    > > (untested)
    > >
    > > pte_t read_pte(volatile pte_t *pte)
    > > {
    > > pte_t n;
    > > do {
    > > n.pte_low = pte->pte_low;
    > > rmb();
    > > n.pte_high = pte->pte_high;
    > > rmb();
    > > } while (n.pte_low != pte->pte_low);
    > > return pte;

    It should be return n; here of course.

    > > }
    > >
    > > No atomic operations, I bet it's actually faster than the cmpxchg8.
    > > There is a small risk for livelock, but not much worse than with an
    > > ordinary spinlock.
    >
    > Hmm.... This may replace the get of a 64 bit value. But here could still
    > be another process that is setting the pte in a non-atomic way.

    The rule in i386/x86-64 is that you cannot set the PTE in a non atomic way
    when its present bit is set (because the hardware could asynchronously
    change bits in the PTE that would get lost). Atomic way means clearing
    first and then replacing in an atomic operation.

    This helps you because you shouldn't be looking at the pte anyways
    when pte_present is false. When it is not false it is always updated
    atomically.

    -Andi
    -
    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: 2005-03-22 14:09    [W:0.020 / U:155.432 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site