lkml.org 
[lkml]   [2020]   [Dec]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4/6] mm cma: rename PF_MEMALLOC_NOCMA to PF_MEMALLOC_NOMOVABLE
    Date
    PF_MEMALLOC_NOCMA is used for longterm pinning and has an effect of
    clearing _GFP_MOVABLE or prohibiting allocations from ZONE_MOVABLE.

    We will prohibit allocating any pages that are getting
    longterm pinned from ZONE_MOVABLE, and we would want to unify and re-use
    this flag. So, rename it to generic PF_MEMALLOC_NOMOVABLE.
    Also re-name:
    memalloc_nocma_save()/memalloc_nocma_restore
    to
    memalloc_nomovable_save()/memalloc_nomovable_restore()
    and make the new functions common.

    Signed-off-by: Pavel Tatashin <pasha.tatashin@soleen.com>
    ---
    include/linux/sched.h | 2 +-
    include/linux/sched/mm.h | 21 +++++----------------
    mm/gup.c | 4 ++--
    mm/hugetlb.c | 4 ++--
    mm/page_alloc.c | 4 ++--
    5 files changed, 12 insertions(+), 23 deletions(-)

    diff --git a/include/linux/sched.h b/include/linux/sched.h
    index 76cd21fa5501..f1bf05f5f5fa 100644
    --- a/include/linux/sched.h
    +++ b/include/linux/sched.h
    @@ -1548,7 +1548,7 @@ extern struct pid *cad_pid;
    #define PF_SWAPWRITE 0x00800000 /* Allowed to write to swap */
    #define PF_NO_SETAFFINITY 0x04000000 /* Userland is not allowed to meddle with cpus_mask */
    #define PF_MCE_EARLY 0x08000000 /* Early kill for mce process policy */
    -#define PF_MEMALLOC_NOCMA 0x10000000 /* All allocation request will have _GFP_MOVABLE cleared */
    +#define PF_MEMALLOC_NOMOVABLE 0x10000000 /* All allocation request will have _GFP_MOVABLE cleared */
    #define PF_FREEZER_SKIP 0x40000000 /* Freezer should not count it as freezable */
    #define PF_SUSPEND_TASK 0x80000000 /* This thread called freeze_processes() and should not be frozen */

    diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h
    index d5ece7a9a403..5bb9a6b69479 100644
    --- a/include/linux/sched/mm.h
    +++ b/include/linux/sched/mm.h
    @@ -254,29 +254,18 @@ static inline void memalloc_noreclaim_restore(unsigned int flags)
    current->flags = (current->flags & ~PF_MEMALLOC) | flags;
    }

    -#ifdef CONFIG_CMA
    -static inline unsigned int memalloc_nocma_save(void)
    +static inline unsigned int memalloc_nomovable_save(void)
    {
    - unsigned int flags = current->flags & PF_MEMALLOC_NOCMA;
    + unsigned int flags = current->flags & PF_MEMALLOC_NOMOVABLE;

    - current->flags |= PF_MEMALLOC_NOCMA;
    + current->flags |= PF_MEMALLOC_NOMOVABLE;
    return flags;
    }

    -static inline void memalloc_nocma_restore(unsigned int flags)
    +static inline void memalloc_nomovable_restore(unsigned int flags)
    {
    - current->flags = (current->flags & ~PF_MEMALLOC_NOCMA) | flags;
    + current->flags = (current->flags & ~PF_MEMALLOC_NOMOVABLE) | flags;
    }
    -#else
    -static inline unsigned int memalloc_nocma_save(void)
    -{
    - return 0;
    -}
    -
    -static inline void memalloc_nocma_restore(unsigned int flags)
    -{
    -}
    -#endif

    #ifdef CONFIG_MEMCG
    DECLARE_PER_CPU(struct mem_cgroup *, int_active_memcg);
    diff --git a/mm/gup.c b/mm/gup.c
    index 0e2de888a8b0..724d8a65e1df 100644
    --- a/mm/gup.c
    +++ b/mm/gup.c
    @@ -1726,7 +1726,7 @@ static long __gup_longterm_locked(struct mm_struct *mm,
    if (!vmas_tmp)
    return -ENOMEM;
    }
    - flags = memalloc_nocma_save();
    + flags = memalloc_nomovable_save();
    }

    rc = __get_user_pages_locked(mm, start, nr_pages, pages,
    @@ -1749,7 +1749,7 @@ static long __gup_longterm_locked(struct mm_struct *mm,
    rc = check_and_migrate_cma_pages(mm, start, rc, pages,
    vmas_tmp, gup_flags);
    out:
    - memalloc_nocma_restore(flags);
    + memalloc_nomovable_restore(flags);
    }

    if (vmas_tmp != vmas)
    diff --git a/mm/hugetlb.c b/mm/hugetlb.c
    index 37f15c3c24dc..02213c74ed6b 100644
    --- a/mm/hugetlb.c
    +++ b/mm/hugetlb.c
    @@ -1033,10 +1033,10 @@ static void enqueue_huge_page(struct hstate *h, struct page *page)
    static struct page *dequeue_huge_page_node_exact(struct hstate *h, int nid)
    {
    struct page *page;
    - bool nocma = !!(current->flags & PF_MEMALLOC_NOCMA);
    + bool nomovable = !!(current->flags & PF_MEMALLOC_NOMOVABLE);

    list_for_each_entry(page, &h->hugepage_freelists[nid], lru) {
    - if (nocma && is_migrate_cma_page(page))
    + if (nomovable && is_migrate_cma_page(page))
    continue;

    if (PageHWPoison(page))
    diff --git a/mm/page_alloc.c b/mm/page_alloc.c
    index eaa227a479e4..611799c72da5 100644
    --- a/mm/page_alloc.c
    +++ b/mm/page_alloc.c
    @@ -3772,8 +3772,8 @@ static inline unsigned int current_alloc_flags(gfp_t gfp_mask,
    #ifdef CONFIG_CMA
    unsigned int pflags = current->flags;

    - if (!(pflags & PF_MEMALLOC_NOCMA) &&
    - gfp_migratetype(gfp_mask) == MIGRATE_MOVABLE)
    + if (!(pflags & PF_MEMALLOC_NOMOVABLE) &&
    + gfp_migratetype(gfp_mask) == MIGRATE_MOVABLE)
    alloc_flags |= ALLOC_CMA;

    #endif
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-12-02 06:24    [W:2.194 / U:0.108 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site