All of lore.kernel.org
 help / color / mirror / Atom feed
From: Muchun Song <songmuchun@bytedance.com>
To: Mike Kravetz <mike.kravetz@oracle.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Linux Memory Management List <linux-mm@kvack.org>,
	Michal Hocko <mhocko@kernel.org>,
	Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
	David Hildenbrand <david@redhat.com>,
	Oscar Salvador <osalvador@suse.de>,
	Matthew Wilcox <willy@infradead.org>,
	Miaohe Lin <linmiaohe@huawei.com>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [External] [PATCH v3 4/5] hugetlb: convert PageHugeTemporary() to HPageTemporary flag
Date: Sat, 23 Jan 2021 11:15:46 +0800	[thread overview]
Message-ID: <CAMZfGtU03FqXL0dEJtG+4jxf3QyAtJxOC8s5yLfhAToXb0OHAw@mail.gmail.com> (raw)
In-Reply-To: <20210122195231.324857-5-mike.kravetz@oracle.com>

On Sat, Jan 23, 2021 at 3:55 AM Mike Kravetz <mike.kravetz@oracle.com> wrote:
>
> X-Gm-Spam: 0
> X-Gm-Phishy: 0
>
> Use new hugetlb specific HPageTemporary flag to replace the
> PageHugeTemporary() interfaces.  PageHugeTemporary does contain
> a PageHuge() check.  However, this interface is only used within
> hugetlb code where we know we are dealing with a hugetlb page.
> Therefore, the check can be eliminated.
>
> Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
> Reviewed-by: Oscar Salvador <osalvador@suse.de>

Reviewed-by: Muchun Song <songmuchun@bytedance.com>

> ---
>  include/linux/hugetlb.h |  6 ++++++
>  mm/hugetlb.c            | 36 +++++++-----------------------------
>  2 files changed, 13 insertions(+), 29 deletions(-)
>
> diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
> index cd1960541f2a..3c86c3a0e144 100644
> --- a/include/linux/hugetlb.h
> +++ b/include/linux/hugetlb.h
> @@ -483,10 +483,15 @@ unsigned long hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
>   * HPG_migratable  - Set after a newly allocated page is added to the page
>   *     cache and/or page tables.  Indicates the page is a candidate for
>   *     migration.
> + * HPG_temporary - - Set on a page that is temporarily allocated from the buddy
> + *     allocator.  Typically used for migration target pages when no pages
> + *     are available in the pool.  The hugetlb free page path will
> + *     immediately free pages with this flag set to the buddy allocator.
>   */
>  enum hugetlb_page_flags {
>         HPG_restore_reserve = 0,
>         HPG_migratable,
> +       HPG_temporary,
>         __NR_HPAGEFLAGS,
>  };
>
> @@ -530,6 +535,7 @@ static inline void ClearHPage##uname(struct page *page)             \
>   */
>  HPAGEFLAG(RestoreReserve, restore_reserve)
>  HPAGEFLAG(Migratable, migratable)
> +HPAGEFLAG(Temporary, temporary)
>
>  #ifdef CONFIG_HUGETLB_PAGE
>
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 4da1a29ac5e2..70ffa1027988 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -1353,28 +1353,6 @@ struct hstate *size_to_hstate(unsigned long size)
>         return NULL;
>  }
>
> -/*
> - * Internal hugetlb specific page flag. Do not use outside of the hugetlb
> - * code
> - */
> -static inline bool PageHugeTemporary(struct page *page)
> -{
> -       if (!PageHuge(page))
> -               return false;
> -
> -       return (unsigned long)page[2].mapping == -1U;
> -}
> -
> -static inline void SetPageHugeTemporary(struct page *page)
> -{
> -       page[2].mapping = (void *)-1U;
> -}
> -
> -static inline void ClearPageHugeTemporary(struct page *page)
> -{
> -       page[2].mapping = NULL;
> -}
> -
>  static void __free_huge_page(struct page *page)
>  {
>         /*
> @@ -1422,9 +1400,9 @@ static void __free_huge_page(struct page *page)
>         if (restore_reserve)
>                 h->resv_huge_pages++;
>
> -       if (PageHugeTemporary(page)) {
> +       if (HPageTemporary(page)) {
>                 list_del(&page->lru);
> -               ClearPageHugeTemporary(page);
> +               ClearHPageTemporary(page);
>                 update_and_free_page(h, page);
>         } else if (h->surplus_huge_pages_node[nid]) {
>                 /* remove the page from active list */
> @@ -1860,7 +1838,7 @@ static struct page *alloc_surplus_huge_page(struct hstate *h, gfp_t gfp_mask,
>          * codeflow
>          */
>         if (h->surplus_huge_pages >= h->nr_overcommit_huge_pages) {
> -               SetPageHugeTemporary(page);
> +               SetHPageTemporary(page);
>                 spin_unlock(&hugetlb_lock);
>                 put_page(page);
>                 return NULL;
> @@ -1891,7 +1869,7 @@ static struct page *alloc_migrate_huge_page(struct hstate *h, gfp_t gfp_mask,
>          * We do not account these pages as surplus because they are only
>          * temporary and will be released properly on the last reference
>          */
> -       SetPageHugeTemporary(page);
> +       SetHPageTemporary(page);
>
>         return page;
>  }
> @@ -5612,12 +5590,12 @@ void move_hugetlb_state(struct page *oldpage, struct page *newpage, int reason)
>          * here as well otherwise the global surplus count will not match
>          * the per-node's.
>          */
> -       if (PageHugeTemporary(newpage)) {
> +       if (HPageTemporary(newpage)) {
>                 int old_nid = page_to_nid(oldpage);
>                 int new_nid = page_to_nid(newpage);
>
> -               SetPageHugeTemporary(oldpage);
> -               ClearPageHugeTemporary(newpage);
> +               SetHPageTemporary(oldpage);
> +               ClearHPageTemporary(newpage);
>
>                 spin_lock(&hugetlb_lock);
>                 if (h->surplus_huge_pages_node[old_nid]) {
> --
> 2.29.2
>

  reply	other threads:[~2021-01-23  3:17 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-22 19:52 [PATCH v3 0/5] create hugetlb flags to consolidate state Mike Kravetz
2021-01-22 19:52 ` [PATCH v3 1/5] hugetlb: use page.private for hugetlb specific page flags Mike Kravetz
2021-01-26  8:17   ` Oscar Salvador
2021-01-27 10:20   ` Michal Hocko
2021-01-27 23:01     ` Mike Kravetz
2021-01-27 10:26   ` Michal Hocko
2021-01-22 19:52 ` [PATCH v3 2/5] hugetlb: convert page_huge_active() HPageMigratable flag Mike Kravetz
2021-01-27 10:25   ` Michal Hocko
2021-01-27 23:27     ` Mike Kravetz
2021-01-22 19:52 ` [PATCH v3 3/5] hugetlb: only set HPageMigratable for migratable hstates Mike Kravetz
2021-01-26  8:20   ` Oscar Salvador
2021-01-27 10:35   ` Michal Hocko
2021-01-27 23:36     ` Mike Kravetz
2021-01-28  5:52       ` Oscar Salvador
2021-01-28 21:37         ` Andrew Morton
2021-01-28 22:00           ` Mike Kravetz
2021-01-28 22:15             ` Andrew Morton
2021-01-29  9:09               ` Michal Hocko
2021-01-29 18:46               ` Mike Kravetz
2021-02-01 11:49                 ` Michal Hocko
2021-02-04  1:11                   ` Mike Kravetz
2021-01-22 19:52 ` [PATCH v3 4/5] hugetlb: convert PageHugeTemporary() to HPageTemporary flag Mike Kravetz
2021-01-23  3:15   ` Muchun Song [this message]
2021-01-23  3:15     ` [External] " Muchun Song
2021-01-27 10:39   ` Michal Hocko
2021-01-22 19:52 ` [PATCH v3 5/5] hugetlb: convert PageHugeFreed to HPageFreed flag Mike Kravetz
2021-01-27 10:41   ` Michal Hocko
2021-01-27 23:37     ` Mike Kravetz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAMZfGtU03FqXL0dEJtG+4jxf3QyAtJxOC8s5yLfhAToXb0OHAw@mail.gmail.com \
    --to=songmuchun@bytedance.com \
    --cc=akpm@linux-foundation.org \
    --cc=david@redhat.com \
    --cc=linmiaohe@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --cc=mike.kravetz@oracle.com \
    --cc=n-horiguchi@ah.jp.nec.com \
    --cc=osalvador@suse.de \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.