lkml.org 
[lkml]   [2012]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] mm: fix kernel BUG at huge_memory.c:1474!
    Andrea's autonuma-benchmark numa01 hits kernel BUG at huge_memory.c:1474!
    in change_huge_pmd called from change_protection from change_prot_numa
    from task_numa_work.

    That BUG, introduced in the huge zero page commit cad7f613c4d0 ("thp:
    change_huge_pmd(): make sure we don't try to make a page writable")
    was trying to verify that newprot never adds write permission to an
    anonymous huge page; but Automatic NUMA Balancing's 4b10e7d562c9 ("mm:
    mempolicy: Implement change_prot_numa() in terms of change_protection()")
    adds a new prot_numa path into change_huge_pmd(), which makes no use of
    the newprot provided, and may retain the write bit in the pmd.

    Just move the BUG_ON(pmd_write(entry)) up into the !prot_numa block.

    Signed-off-by: Hugh Dickins <hughd@google.com>
    ---

    mm/huge_memory.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    --- 2a74dbb9/mm/huge_memory.c 2012-12-16 16:35:08.752441527 -0800
    +++ linux/mm/huge_memory.c 2012-12-16 18:21:24.308156970 -0800
    @@ -1460,9 +1460,10 @@ int change_huge_pmd(struct vm_area_struc
    if (__pmd_trans_huge_lock(pmd, vma) == 1) {
    pmd_t entry;
    entry = pmdp_get_and_clear(mm, addr, pmd);
    - if (!prot_numa)
    + if (!prot_numa) {
    entry = pmd_modify(entry, newprot);
    - else {
    + BUG_ON(pmd_write(entry));
    + } else {
    struct page *page = pmd_page(*pmd);

    /* only check non-shared pages */
    @@ -1471,7 +1472,6 @@ int change_huge_pmd(struct vm_area_struc
    entry = pmd_mknuma(entry);
    }
    }
    - BUG_ON(pmd_write(entry));
    set_pmd_at(mm, addr, pmd, entry);
    spin_unlock(&vma->vm_mm->page_table_lock);
    ret = 1;

    \
     
     \ /
      Last update: 2012-12-17 04:21    [W:2.949 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site