From: David Hildenbrand <david@redhat.com>
To: Kefeng Wang <wangkefeng.wang@huawei.com>,
Andrew Morton <akpm@linux-foundation.org>
Cc: Matthew Wilcox <willy@infradead.org>,
Muchun Song <muchun.song@linux.dev>,
"Huang, Ying" <ying.huang@intel.com>,
linux-mm@kvack.org
Subject: Re: [PATCH v2 1/2] mm: use aligned address in clear_gigantic_page()
Date: Mon, 28 Oct 2024 11:00:50 +0100 [thread overview]
Message-ID: <e343f77f-1cf7-463f-96a3-4a1ecfc045ea@redhat.com> (raw)
In-Reply-To: <20241026054307.3896926-1-wangkefeng.wang@huawei.com>
On 26.10.24 07:43, Kefeng Wang wrote:
> When clearing gigantic page, it zeros page from the first page to the
> last page, if directly passing addr_hint which maybe not the address
> of the first page of folio, then some archs could flush the wrong cache
> if it does use the addr_hint as a hint. For non-gigantic page, it
> calculates the base address inside, even passed the wrong addr_hint, it
> only has performance impact as the process_huge_page() wants to process
> target page last to keep its cache lines hot), no functional impact.
>
> Let's pass the real accessed address to folio_zero_user() and use the
> aligned address in clear_gigantic_page() to fix it.
>
> Fixes: 78fefd04c123 ("mm: memory: convert clear_huge_page() to folio_zero_user()")
> Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
> ---
> v2:
> - update changelog to clarify the impact, per Andrew
>
> fs/hugetlbfs/inode.c | 2 +-
> mm/memory.c | 1 +
> 2 files changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
> index a4441fb77f7c..a5ea006f403e 100644
> --- a/fs/hugetlbfs/inode.c
> +++ b/fs/hugetlbfs/inode.c
> @@ -825,7 +825,7 @@ static long hugetlbfs_fallocate(struct file *file, int mode, loff_t offset,
> error = PTR_ERR(folio);
> goto out;
> }
> - folio_zero_user(folio, ALIGN_DOWN(addr, hpage_size));
> + folio_zero_user(folio, addr);
> __folio_mark_uptodate(folio);
> error = hugetlb_add_to_page_cache(folio, mapping, index);
> if (unlikely(error)) {
> diff --git a/mm/memory.c b/mm/memory.c
> index 75c2dfd04f72..ef47b7ea5ddd 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -6821,6 +6821,7 @@ static void clear_gigantic_page(struct folio *folio, unsigned long addr,
> int i;
>
> might_sleep();
> + addr = ALIGN_DOWN(addr, folio_size(folio));
Right, that's what's effectively done in a very bad way in
process_huge_page()
unsigned long addr = addr_hint &
~(((unsigned long)nr_pages << PAGE_SHIFT) - 1);
That should all be cleaned up ... process_huge_page() likely shouldn't
be even consuming "nr_pages".
In clear_gigantic_page(), can you please rename the "unsigned long addr"
parameter to unsigned long "addr_hint" and use an additional "unsigned
long addr" ?
--
Cheers,
David / dhildenb
next prev parent reply other threads:[~2024-10-28 10:01 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-26 5:43 [PATCH v2 1/2] mm: use aligned address in clear_gigantic_page() Kefeng Wang
2024-10-26 5:43 ` [PATCH v2 2/2] mm: use aligned address in copy_user_gigantic_page() Kefeng Wang
2024-10-28 10:01 ` David Hildenbrand
2024-10-28 6:17 ` [PATCH v2 1/2] mm: use aligned address in clear_gigantic_page() Huang, Ying
2024-10-28 6:35 ` Kefeng Wang
2024-10-28 7:03 ` Huang, Ying
2024-10-28 8:35 ` Kefeng Wang
2024-10-28 10:00 ` David Hildenbrand [this message]
2024-10-28 12:52 ` Kefeng Wang
2024-10-28 13:14 ` David Hildenbrand
2024-10-28 13:33 ` Kefeng Wang
2024-10-28 13:46 ` David Hildenbrand
2024-10-28 14:22 ` Kefeng Wang
2024-10-28 14:24 ` David Hildenbrand
2024-10-29 13:04 ` Kefeng Wang
2024-10-29 14:04 ` David Hildenbrand
2024-10-30 1:04 ` Huang, Ying
2024-10-30 3:04 ` Kefeng Wang
2024-10-30 3:21 ` Huang, Ying
2024-10-30 5:05 ` Kefeng Wang
2024-10-31 8:39 ` Huang, Ying
2024-11-01 7:43 ` Kefeng Wang
2024-11-01 8:16 ` Huang, Ying
2024-11-01 9:45 ` Kefeng Wang
2024-11-04 2:35 ` Huang, Ying
2024-11-05 2:06 ` Kefeng Wang
2024-12-01 2:15 ` Andrew Morton
2024-12-01 5:37 ` Huang, Ying
2024-12-02 1:03 ` Kefeng Wang
2024-12-06 1:47 ` Andrew Morton
2024-12-06 2:08 ` Kefeng Wang
2024-11-01 6:18 ` Huang, Ying
2024-11-01 7:51 ` Kefeng Wang
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=e343f77f-1cf7-463f-96a3-4a1ecfc045ea@redhat.com \
--to=david@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=linux-mm@kvack.org \
--cc=muchun.song@linux.dev \
--cc=wangkefeng.wang@huawei.com \
--cc=willy@infradead.org \
--cc=ying.huang@intel.com \
/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.