lkml.org 
[lkml]   [2015]   [Jul]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.13.y-ckt 118/132] mm: fix potential infinite loop in dissolve_free_huge_pages()
    Date
    3.13.11-ckt24 -stable review patch.  If anyone has any objections, please let me know.

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

    From: Li Zhong <zhong@linux.vnet.ibm.com>

    commit d0177639310d23c7739500df3c6ce6fdfe34acec upstream.

    It is possible for some platforms, such as powerpc to set HPAGE_SHIFT to
    0 to indicate huge pages not supported.

    When this is the case, hugetlbfs could be disabled during boot time:
    hugetlbfs: disabling because there are no supported hugepage sizes

    Then in dissolve_free_huge_pages(), order is kept maximum (64 for
    64bits), and the for loop below won't end: for (pfn = start_pfn; pfn <
    end_pfn; pfn += 1 << order)

    As suggested by Naoya, below fix checks hugepages_supported() before
    calling dissolve_free_huge_pages().

    [rientjes@google.com: no legitimate reason to call dissolve_free_huge_pages() when !hugepages_supported()]
    Signed-off-by: Li Zhong <zhong@linux.vnet.ibm.com>
    Acked-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Acked-by: David Rientjes <rientjes@google.com>
    Signed-off-by: David Rientjes <rientjes@google.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    [ kamal: 3.13-stable prereq for
    641844f mm/hugetlb: introduce minimum hugepage order ]
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    mm/hugetlb.c | 3 +++
    1 file changed, 3 insertions(+)

    diff --git a/mm/hugetlb.c b/mm/hugetlb.c
    index 072b673..3b9d346 100644
    --- a/mm/hugetlb.c
    +++ b/mm/hugetlb.c
    @@ -920,6 +920,9 @@ void dissolve_free_huge_pages(unsigned long start_pfn, unsigned long end_pfn)
    unsigned long pfn;
    struct hstate *h;

    + if (!hugepages_supported())
    + return;
    +
    /* Set scan step to minimum hugepage size */
    for_each_hstate(h)
    if (order > huge_page_order(h))
    --
    1.9.1


    \
     
     \ /
      Last update: 2015-07-23 04:21    [W:2.500 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site