Message ID | 20220404165325.1883267-1-zi.yan@sent.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mm: migrate: use thp_order instead of HPAGE_PMD_ORDER for new page allocation. | expand |
On Mon, 4 Apr 2022 12:53:25 -0400 Zi Yan <zi.yan@sent.com> wrote: > From: Zi Yan <ziy@nvidia.com> > > With folios support, it is possible to have other than HPAGE_PMD_ORDER > THPs, in the form of folios, in the system. Use thp_order() to correctly > determine the source page order during migration. Changelog doesn't describe the end user visible effects of the bug. And it really should, because > Link: https://lore.kernel.org/linux-mm/20220404132908.GA785673@u2004/ it fixes a kernel crash!
On 4 Apr 2022, at 14:28, Andrew Morton wrote: > On Mon, 4 Apr 2022 12:53:25 -0400 Zi Yan <zi.yan@sent.com> wrote: > >> From: Zi Yan <ziy@nvidia.com> >> >> With folios support, it is possible to have other than HPAGE_PMD_ORDER >> THPs, in the form of folios, in the system. Use thp_order() to correctly >> determine the source page order during migration. > > Changelog doesn't describe the end user visible effects of the bug. > And it really should, because > >> Link: https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore.kernel.org%2Flinux-mm%2F20220404132908.GA785673%40u2004%2F&data=04%7C01%7Cziy%40nvidia.com%7Cbf27ebf19d8a49a9b4b008da1668dc09%7C43083d15727340c1b7db39efd9ccc17a%7C0%7C0%7C637846936880192108%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=pgvzV3wv6icqkMaWY2koB9X4VqlPMaSHeB8r7%2Fv1938%3D&reserved=0 > > it fixes a kernel crash! Thank you for adding the information. -- Best Regards, Yan, Zi
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 6b34c5d5e65a..88a74bc4cba5 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -1209,7 +1209,7 @@ static struct page *new_page(struct page *page, unsigned long start) struct page *thp; thp = alloc_hugepage_vma(GFP_TRANSHUGE, vma, address, - HPAGE_PMD_ORDER); + thp_order(page)); if (!thp) return NULL; prep_transhuge_page(thp); diff --git a/mm/migrate.c b/mm/migrate.c index 4639dfc2b7ee..b58b96fdb174 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -1553,7 +1553,7 @@ struct page *alloc_migration_target(struct page *page, unsigned long private) */ gfp_mask &= ~__GFP_RECLAIM; gfp_mask |= GFP_TRANSHUGE; - order = HPAGE_PMD_ORDER; + order = thp_order(page); } zidx = zone_idx(page_zone(page)); if (is_highmem_idx(zidx) || zidx == ZONE_MOVABLE)