[lkml]   [2012]   [May]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: Oops with DCACHE_WORD_ACCESS and ocfs2, autofs4
    On Thu, May 3, 2012 at 11:28 AM, H. Peter Anvin <> wrote:
    > +               "lea" __WORDSUFFIX " %2,%1\n\t"
    > +               "and" __WORDSUFFIX " %4,%1\n\t"
    > +               "shl" __WORDSUFFIX " $3,%1\n\t"
    > +               "shr" __WORDSUFFIX " %b1,%0\n\t"
    > Also, for this sequence of instructions using %ecx unconditionally is
    > actually better (avoids REX prefixes on 64 bits.)

    Ok, agreed, except for the last shr, which does need to be done in the
    full word width. But yes, we could do the calculations of "how many
    bits do we need to shift" in just 32 bits.

    And yes, it does look like we can just rely on the register names, so
    we can avoid all the WORDSUFFIX games, and make it be

    static inline unsigned long load_unaligned_zeropad(const void *addr)
    unsigned long ret, dummy;

    "1:\tmov %2,%0\n"
    ".section .fixup,\"ax\"\n"
    "lea %2,%1\n\t"
    "and %3,%1\n\t"
    "mov (%1),%0\n\t"
    "leal %2,%%ecx\n\t"
    "andl %4,%%ecx\n\t"
    "shll $3,%%ecx\n\t"
    "shr %%cl,%0\n\t"
    "jmp 2b\n"
    _ASM_EXTABLE(1b, 3b)
    :"=&r" (ret),"=&c" (dummy)
    :"m" (*(unsigned long *)addr),
    "i" (-sizeof(unsigned long)),
    "i" (sizeof(unsigned long)-1));
    return ret;


    And I'm running that with DEBUG_PAGEALLOC, and haven't seen anything
    odd yet. Not that it's easy to trigger the page crosser, but I've
    tried to do things like look up 4095-byte pathnames with the final
    components being just one character each, so I've *tried*.

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2012-05-03 21:41    [W:0.024 / U:31.828 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site