lkml.org 
[lkml]   [2014]   [Jan]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6/8] mm, hugetlb: remove vma_has_reserves
    Date
    From: Joonsoo Kim <iamjoonsoo.kim@lge.com>

    vma_has_reserves() can be substituted by using return value of
    vma_needs_reservation(). If chg returned by vma_needs_reservation()
    is 0, it means that vma has reserves. Otherwise, it means that vma don't
    have reserves and need a hugepage outside of reserve pool. This definition
    is perfectly same as vma_has_reserves(), so remove vma_has_reserves().

    Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Signed-off-by: Davidlohr Bueso <davidlohr@hp.com>
    ---
    mm/hugetlb.c | 46 +++++++++-------------------------------------
    1 file changed, 9 insertions(+), 37 deletions(-)

    diff --git a/mm/hugetlb.c b/mm/hugetlb.c
    index 541cceb..83bc161 100644
    --- a/mm/hugetlb.c
    +++ b/mm/hugetlb.c
    @@ -469,39 +469,6 @@ void reset_vma_resv_huge_pages(struct vm_area_struct *vma)
    vma->vm_private_data = (void *)0;
    }

    -/* Returns true if the VMA has associated reserve pages */
    -static int vma_has_reserves(struct vm_area_struct *vma, long chg)
    -{
    - if (vma->vm_flags & VM_NORESERVE) {
    - /*
    - * This address is already reserved by other process(chg == 0),
    - * so, we should decrement reserved count. Without decrementing,
    - * reserve count remains after releasing inode, because this
    - * allocated page will go into page cache and is regarded as
    - * coming from reserved pool in releasing step. Currently, we
    - * don't have any other solution to deal with this situation
    - * properly, so add work-around here.
    - */
    - if (vma->vm_flags & VM_MAYSHARE && chg == 0)
    - return 1;
    - else
    - return 0;
    - }
    -
    - /* Shared mappings always use reserves */
    - if (vma->vm_flags & VM_MAYSHARE)
    - return 1;
    -
    - /*
    - * Only the process that called mmap() has reserves for
    - * private mappings.
    - */
    - if (is_vma_resv_set(vma, HPAGE_RESV_OWNER))
    - return 1;
    -
    - return 0;
    -}
    -
    static void enqueue_huge_page(struct hstate *h, struct page *page)
    {
    int nid = page_to_nid(page);
    @@ -555,10 +522,11 @@ static struct page *dequeue_huge_page_vma(struct hstate *h,
    /*
    * A child process with MAP_PRIVATE mappings created by their parent
    * have no page reserves. This check ensures that reservations are
    - * not "stolen". The child may still get SIGKILLed
    + * not "stolen". The child may still get SIGKILLed.
    + * chg represents whether current user has a reserved hugepages or not,
    + * so that we can use it to ensure that reservations are not "stolen".
    */
    - if (!vma_has_reserves(vma, chg) &&
    - h->free_huge_pages - h->resv_huge_pages == 0)
    + if (chg && h->free_huge_pages - h->resv_huge_pages == 0)
    goto err;

    /* If reserves cannot be used, ensure enough pages are in the pool */
    @@ -577,7 +545,11 @@ retry_cpuset:
    if (page) {
    if (avoid_reserve)
    break;
    - if (!vma_has_reserves(vma, chg))
    + /*
    + * chg means whether current user allocates
    + * a hugepage on the reserved pool or not
    + */
    + if (chg)
    break;

    SetPagePrivate(page);
    --
    1.8.1.4


    \
     
     \ /
      Last update: 2014-01-27 05:21    [W:3.872 / U:0.248 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site