From: Mike Kravetz <mike.kravetz@oracle.com>
To: Muchun Song <songmuchun@bytedance.com>,
corbet@lwn.net, akpm@linux-foundation.org, mcgrof@kernel.org,
keescook@chromium.org, yzaikin@google.com, osalvador@suse.de,
david@redhat.com, masahiroy@kernel.org
Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, duanxiongchun@bytedance.com,
smuchun@gmail.com
Subject: Re: [PATCH v9 1/4] mm: hugetlb_vmemmap: disable hugetlb_optimize_vmemmap when struct page crosses page boundaries
Date: Tue, 3 May 2022 14:49:19 -0700 [thread overview]
Message-ID: <60998a62-eebc-7c95-2d48-943fe62d09b9@oracle.com> (raw)
In-Reply-To: <20220429121816.37541-2-songmuchun@bytedance.com>
On 4/29/22 05:18, Muchun Song wrote:
> If the size of "struct page" is not the power of two but with the feature
> of minimizing overhead of struct page associated with each HugeTLB is
> enabled, then the vmemmap pages of HugeTLB will be corrupted after
> remapping (panic is about to happen in theory). But this only exists when
> !CONFIG_MEMCG && !CONFIG_SLUB on x86_64. However, it is not a conventional
> configuration nowadays. So it is not a real word issue, just the result
> of a code review.
>
> But we cannot prevent anyone from configuring that combined configure.
> This hugetlb_optimize_vmemmap should be disable in this case to fix this
> issue.
>
> Signed-off-by: Muchun Song <songmuchun@bytedance.com>
> ---
> mm/hugetlb_vmemmap.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
Thanks,
I think the runtime power_of_two checks here and in later patches are
much simpler than trying to do config/build time checks.
Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
--
Mike Kravetz
>
> diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c
> index 29554c6ef2ae..6254bb2d4ae5 100644
> --- a/mm/hugetlb_vmemmap.c
> +++ b/mm/hugetlb_vmemmap.c
> @@ -28,12 +28,6 @@ EXPORT_SYMBOL(hugetlb_optimize_vmemmap_key);
>
> static int __init hugetlb_vmemmap_early_param(char *buf)
> {
> - /* We cannot optimize if a "struct page" crosses page boundaries. */
> - if (!is_power_of_2(sizeof(struct page))) {
> - pr_warn("cannot free vmemmap pages because \"struct page\" crosses page boundaries\n");
> - return 0;
> - }
> -
> if (!buf)
> return -EINVAL;
>
> @@ -119,6 +113,12 @@ void __init hugetlb_vmemmap_init(struct hstate *h)
> if (!hugetlb_optimize_vmemmap_enabled())
> return;
>
> + if (!is_power_of_2(sizeof(struct page))) {
> + pr_warn_once("cannot optimize vmemmap pages because \"struct page\" crosses page boundaries\n");
> + static_branch_disable(&hugetlb_optimize_vmemmap_key);
> + return;
> + }
> +
> vmemmap_pages = (nr_pages * sizeof(struct page)) >> PAGE_SHIFT;
> /*
> * The head page is not to be freed to buddy allocator, the other tail
next prev parent reply other threads:[~2022-05-03 21:52 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-29 12:18 [PATCH v9 0/4] add hugetlb_optimize_vmemmap sysctl Muchun Song
2022-04-29 12:18 ` [PATCH v9 1/4] mm: hugetlb_vmemmap: disable hugetlb_optimize_vmemmap when struct page crosses page boundaries Muchun Song
2022-05-03 21:49 ` Mike Kravetz [this message]
2022-04-29 12:18 ` [PATCH v9 2/4] mm: memory_hotplug: override memmap_on_memory when hugetlb_free_vmemmap=on Muchun Song
2022-05-04 0:23 ` Mike Kravetz
2022-05-04 3:37 ` Muchun Song
2022-05-07 21:05 ` Andrew Morton
2022-04-29 12:18 ` [PATCH v9 3/4] mm: hugetlb_vmemmap: use kstrtobool for hugetlb_vmemmap param parsing Muchun Song
2022-05-04 0:42 ` Mike Kravetz
2022-04-29 12:18 ` [PATCH v9 4/4] mm: hugetlb_vmemmap: add hugetlb_optimize_vmemmap sysctl Muchun Song
2022-05-04 22:12 ` Mike Kravetz
2022-05-05 2:35 ` Muchun Song
2022-05-05 3:36 ` Mike Kravetz
2022-05-05 8:02 ` Muchun Song
2022-05-05 16:48 ` Mike Kravetz
2022-05-06 2:49 ` Muchun Song
2022-05-06 16:50 ` Mike Kravetz
2022-05-07 13:10 ` Muchun Song
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=60998a62-eebc-7c95-2d48-943fe62d09b9@oracle.com \
--to=mike.kravetz@oracle.com \
--cc=akpm@linux-foundation.org \
--cc=corbet@lwn.net \
--cc=david@redhat.com \
--cc=duanxiongchun@bytedance.com \
--cc=keescook@chromium.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=masahiroy@kernel.org \
--cc=mcgrof@kernel.org \
--cc=osalvador@suse.de \
--cc=smuchun@gmail.com \
--cc=songmuchun@bytedance.com \
--cc=yzaikin@google.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.