lkml.org 
[lkml]   [2014]   [Nov]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: frequent lockups in 3.18rc4
    From
    On Fri, Nov 21, 2014 at 3:03 PM, Andy Lutomirski <luto@amacapital.net> wrote:
    > On Fri, Nov 21, 2014 at 2:55 PM, Linus Torvalds
    > <torvalds@linux-foundation.org> wrote:
    >>
    >> Anyway, here's an actual patch. As usual, it has seen absolutely no
    >> actual testing,

    .. ok, it boots and works fine as far as I can tell on x86-64 with no
    paravirt anywhere.

    > At the risk of going deeper down the rabbit hole, I grepped for
    > pgd_list. I found:

    Ugh.

    > __set_pmd_pte in pageattr.c. It appears to be completely incorrect.
    > Unless I've misunderstood, other than the very first line, it will
    > either do nothing at all or crash when it falls off the end of the
    > page tables that it's pointlessly trying to update.

    I think you found a rats nest.

    I can't make heads nor tails of the logic. The !SHARED_KERNEL_PMD test
    doesn't seem very sensible, since that's also the conditional for
    adding anything to the list in the first place.

    So I agree that the code doesn't make much sense. Although maybe it's
    there just because that way the loop goes away at compile-time under
    most circumstances. So maybe even that part does make sense.

    And the "walk down to the pmd level" part actually looks ok. Remember:
    this is on x86-32 only, and you have two cases: non-PAE where the
    pmd/pud offset thing does nothing at all, and it just ends up
    converting a "pgd_t *" to a "pmd_t *". And for PAE, the top pud level
    always exists, and the pmd is folded, so despite what looks like
    walking two levels, it really just walks the one level - the
    force-allocated PGD entries.

    So it won't "fall off the end of the page tables" like you imply. It
    will just walk to the pmd level. And there it will populate all the
    page tables with the same pmd.

    So I think it works.

    Linus


    \
     
     \ /
      Last update: 2014-11-22 01:01    [W:3.409 / U:0.228 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site