* [PATCH] drm/pagemap: Guard HPAGE_PMD_ORDER use with CONFIG_ARCH_ENABLE_THP_MIGRATION [not found] <202607201914.LpAGsbXs-lkp@intel.com> @ 2026-07-21 10:40 ` Jan Stancek 2026-07-21 19:12 ` Matthew Brost 0 siblings, 1 reply; 4+ messages in thread From: Jan Stancek @ 2026-07-21 10:40 UTC (permalink / raw) To: dri-devel Cc: linux-kernel, maarten.lankhorst, mripard, tzimmermann, airlied, simona, matthew.brost, jstancek HPAGE_PMD_SHIFT expands to BUILD_BUG() when CONFIG_PGTABLE_HAS_HUGE_LEAVES is not set, causing a compile error when both CONFIG_TRANSPARENT_HUGEPAGE and CONFIG_HUGETLB_PAGE are disabled: drivers/gpu/drm/drm_pagemap.c:480:12: error: call to '__compiletime_assert_458' declared with 'error' attribute: BUILD_BUG failed 480 | order = HPAGE_PMD_ORDER; | ^ include/linux/huge_mm.h:117:26: note: expanded from macro 'HPAGE_PMD_ORDER' 117 | #define HPAGE_PMD_ORDER (HPAGE_PMD_SHIFT-PAGE_SHIFT) | ^ include/linux/huge_mm.h:113:28: note: expanded from macro 'HPAGE_PMD_SHIFT' 113 | #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; }) Guard the two HPAGE_PMD_ORDER uses with CONFIG_ARCH_ENABLE_THP_MIGRATION, matching the pattern used in migrate_device.c. Fixes: 139ab31aea8a ("drm/pagemap: Correct cpages calculation for migrate_vma_setup") Reported-by: kernel test robot <lkp@intel.com> Closes: https://lore.kernel.org/r/202607201914.LpAGsbXs-lkp@intel.com/ Signed-off-by: Jan Stancek <jstancek@redhat.com> --- drivers/gpu/drm/drm_pagemap.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_pagemap.c b/drivers/gpu/drm/drm_pagemap.c index 15c78eca180b..53a78752c8be 100644 --- a/drivers/gpu/drm/drm_pagemap.c +++ b/drivers/gpu/drm/drm_pagemap.c @@ -578,10 +578,13 @@ static int drm_pagemap_cpages(unsigned long *migrate_pfn, unsigned long npages) folio = page_folio(page); order = folio_order(folio); cpages += NR_PAGES(order); - } else if (migrate_pfn[i] & MIGRATE_PFN_COMPOUND) { + } +#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION + else if (migrate_pfn[i] & MIGRATE_PFN_COMPOUND) { order = HPAGE_PMD_ORDER; cpages += NR_PAGES(order); } +#endif i += NR_PAGES(order); } @@ -733,7 +736,6 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, own_pages = 0; for (i = 0; i < npages;) { - unsigned long j; struct page *page = pfn_to_page(migrate.dst[i]); struct page *src_page = migrate_pfn_to_page(migrate.src[i]); unsigned int order = 0; @@ -763,7 +765,10 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, } migrate.dst[i] = migrate_pfn(migrate.dst[i]); +#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION if (migrate.src[i] & MIGRATE_PFN_COMPOUND) { + unsigned long j; + drm_WARN_ONCE(dpagemap->drm, src_page && folio_order(page_folio(src_page)) != HPAGE_PMD_ORDER, "Unexpected folio order\n"); @@ -774,6 +779,7 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, for (j = 1; j < NR_PAGES(order) && i + j < npages; j++) migrate.dst[i + j] = 0; } +#endif drm_pagemap_get_devmem_page(page, order, zdd); -- 2.52.0 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] drm/pagemap: Guard HPAGE_PMD_ORDER use with CONFIG_ARCH_ENABLE_THP_MIGRATION 2026-07-21 10:40 ` [PATCH] drm/pagemap: Guard HPAGE_PMD_ORDER use with CONFIG_ARCH_ENABLE_THP_MIGRATION Jan Stancek @ 2026-07-21 19:12 ` Matthew Brost 2026-07-21 19:15 ` Matthew Brost 0 siblings, 1 reply; 4+ messages in thread From: Matthew Brost @ 2026-07-21 19:12 UTC (permalink / raw) To: Jan Stancek Cc: dri-devel, linux-kernel, maarten.lankhorst, mripard, tzimmermann, airlied, simona On Tue, Jul 21, 2026 at 12:40:38PM +0200, Jan Stancek wrote: > HPAGE_PMD_SHIFT expands to BUILD_BUG() when CONFIG_PGTABLE_HAS_HUGE_LEAVES > is not set, causing a compile error when both CONFIG_TRANSPARENT_HUGEPAGE > and CONFIG_HUGETLB_PAGE are disabled: > > drivers/gpu/drm/drm_pagemap.c:480:12: error: call to '__compiletime_assert_458' > declared with 'error' attribute: BUILD_BUG failed > 480 | order = HPAGE_PMD_ORDER; > | ^ > include/linux/huge_mm.h:117:26: note: expanded from macro 'HPAGE_PMD_ORDER' > 117 | #define HPAGE_PMD_ORDER (HPAGE_PMD_SHIFT-PAGE_SHIFT) > | ^ > include/linux/huge_mm.h:113:28: note: expanded from macro 'HPAGE_PMD_SHIFT' > 113 | #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; }) > > Guard the two HPAGE_PMD_ORDER uses with CONFIG_ARCH_ENABLE_THP_MIGRATION, > matching the pattern used in migrate_device.c. > > Fixes: 139ab31aea8a ("drm/pagemap: Correct cpages calculation for migrate_vma_setup") > Reported-by: kernel test robot <lkp@intel.com> > Closes: https://lore.kernel.org/r/202607201914.LpAGsbXs-lkp@intel.com/ > Signed-off-by: Jan Stancek <jstancek@redhat.com> > --- > drivers/gpu/drm/drm_pagemap.c | 10 ++++++++-- > 1 file changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/drm_pagemap.c b/drivers/gpu/drm/drm_pagemap.c > index 15c78eca180b..53a78752c8be 100644 > --- a/drivers/gpu/drm/drm_pagemap.c > +++ b/drivers/gpu/drm/drm_pagemap.c > @@ -578,10 +578,13 @@ static int drm_pagemap_cpages(unsigned long *migrate_pfn, unsigned long npages) > folio = page_folio(page); > order = folio_order(folio); > cpages += NR_PAGES(order); > - } else if (migrate_pfn[i] & MIGRATE_PFN_COMPOUND) { > + } > +#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION > + else if (migrate_pfn[i] & MIGRATE_PFN_COMPOUND) { > order = HPAGE_PMD_ORDER; Would it be do something like this at the top of the file... #ifdef HPAGE_PMD_ORDER #define DRM_PAGEMAP_PMD_ORDER HPAGE_PMD_ORDER #else #define DRM_PAGEMAP_PMD_ORDER (-1) #endif Then in common code s/HPAGE_PMD_ORDER/DRM_PAGEMAP_PMD_ORDER/ I think this works as we can never get to the MIGRATE_PFN_COMPOUND code paths without CONFIG_ARCH_ENABLE_THP_MIGRATION enabled (see mm/migrate_device.c). Also btw fixing the unrelated bug Sashiko flagged in this patch. Matt > cpages += NR_PAGES(order); > } > +#endif > > i += NR_PAGES(order); > } > @@ -733,7 +736,6 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, > own_pages = 0; > > for (i = 0; i < npages;) { > - unsigned long j; > struct page *page = pfn_to_page(migrate.dst[i]); > struct page *src_page = migrate_pfn_to_page(migrate.src[i]); > unsigned int order = 0; > @@ -763,7 +765,10 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, > } > migrate.dst[i] = migrate_pfn(migrate.dst[i]); > > +#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION > if (migrate.src[i] & MIGRATE_PFN_COMPOUND) { > + unsigned long j; > + > drm_WARN_ONCE(dpagemap->drm, src_page && > folio_order(page_folio(src_page)) != HPAGE_PMD_ORDER, > "Unexpected folio order\n"); > @@ -774,6 +779,7 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, > for (j = 1; j < NR_PAGES(order) && i + j < npages; j++) > migrate.dst[i + j] = 0; > } > +#endif > > drm_pagemap_get_devmem_page(page, order, zdd); > > -- > 2.52.0 > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] drm/pagemap: Guard HPAGE_PMD_ORDER use with CONFIG_ARCH_ENABLE_THP_MIGRATION 2026-07-21 19:12 ` Matthew Brost @ 2026-07-21 19:15 ` Matthew Brost 2026-07-21 19:35 ` Jan Stancek 0 siblings, 1 reply; 4+ messages in thread From: Matthew Brost @ 2026-07-21 19:15 UTC (permalink / raw) To: Jan Stancek Cc: dri-devel, linux-kernel, maarten.lankhorst, mripard, tzimmermann, airlied, simona On Tue, Jul 21, 2026 at 12:12:01PM -0700, Matthew Brost wrote: > On Tue, Jul 21, 2026 at 12:40:38PM +0200, Jan Stancek wrote: > > HPAGE_PMD_SHIFT expands to BUILD_BUG() when CONFIG_PGTABLE_HAS_HUGE_LEAVES > > is not set, causing a compile error when both CONFIG_TRANSPARENT_HUGEPAGE > > and CONFIG_HUGETLB_PAGE are disabled: > > > > drivers/gpu/drm/drm_pagemap.c:480:12: error: call to '__compiletime_assert_458' > > declared with 'error' attribute: BUILD_BUG failed > > 480 | order = HPAGE_PMD_ORDER; > > | ^ > > include/linux/huge_mm.h:117:26: note: expanded from macro 'HPAGE_PMD_ORDER' > > 117 | #define HPAGE_PMD_ORDER (HPAGE_PMD_SHIFT-PAGE_SHIFT) > > | ^ > > include/linux/huge_mm.h:113:28: note: expanded from macro 'HPAGE_PMD_SHIFT' > > 113 | #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; }) > > > > Guard the two HPAGE_PMD_ORDER uses with CONFIG_ARCH_ENABLE_THP_MIGRATION, > > matching the pattern used in migrate_device.c. > > > > Fixes: 139ab31aea8a ("drm/pagemap: Correct cpages calculation for migrate_vma_setup") > > Reported-by: kernel test robot <lkp@intel.com> > > Closes: https://lore.kernel.org/r/202607201914.LpAGsbXs-lkp@intel.com/ > > Signed-off-by: Jan Stancek <jstancek@redhat.com> > > --- > > drivers/gpu/drm/drm_pagemap.c | 10 ++++++++-- > > 1 file changed, 8 insertions(+), 2 deletions(-) > > > > diff --git a/drivers/gpu/drm/drm_pagemap.c b/drivers/gpu/drm/drm_pagemap.c > > index 15c78eca180b..53a78752c8be 100644 > > --- a/drivers/gpu/drm/drm_pagemap.c > > +++ b/drivers/gpu/drm/drm_pagemap.c > > @@ -578,10 +578,13 @@ static int drm_pagemap_cpages(unsigned long *migrate_pfn, unsigned long npages) > > folio = page_folio(page); > > order = folio_order(folio); > > cpages += NR_PAGES(order); > > - } else if (migrate_pfn[i] & MIGRATE_PFN_COMPOUND) { > > + } > > +#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION > > + else if (migrate_pfn[i] & MIGRATE_PFN_COMPOUND) { > > order = HPAGE_PMD_ORDER; > > Would it be do something like this at the top of the file... > > #ifdef HPAGE_PMD_ORDER > #define DRM_PAGEMAP_PMD_ORDER HPAGE_PMD_ORDER > #else > #define DRM_PAGEMAP_PMD_ORDER (-1) > #endif > Opps screwed my snippet up - HPAGE_PMD_ORDER seems to be always defined... So actually... #if IS_ENABLED(CONFIG_ARCH_ENABLE_THP_MIGRATION) #define DRM_PAGEMAP_PMD_ORDER HPAGE_PMD_ORDER #else define DRM_PAGEMAP_PMD_ORDER (-1) #endif Matt > Then in common code s/HPAGE_PMD_ORDER/DRM_PAGEMAP_PMD_ORDER/ > > I think this works as we can never get to the MIGRATE_PFN_COMPOUND code > paths without CONFIG_ARCH_ENABLE_THP_MIGRATION enabled (see > mm/migrate_device.c). > > Also btw fixing the unrelated bug Sashiko flagged in this patch. > > Matt > > > cpages += NR_PAGES(order); > > } > > +#endif > > > > i += NR_PAGES(order); > > } > > @@ -733,7 +736,6 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, > > own_pages = 0; > > > > for (i = 0; i < npages;) { > > - unsigned long j; > > struct page *page = pfn_to_page(migrate.dst[i]); > > struct page *src_page = migrate_pfn_to_page(migrate.src[i]); > > unsigned int order = 0; > > @@ -763,7 +765,10 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, > > } > > migrate.dst[i] = migrate_pfn(migrate.dst[i]); > > > > +#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION > > if (migrate.src[i] & MIGRATE_PFN_COMPOUND) { > > + unsigned long j; > > + > > drm_WARN_ONCE(dpagemap->drm, src_page && > > folio_order(page_folio(src_page)) != HPAGE_PMD_ORDER, > > "Unexpected folio order\n"); > > @@ -774,6 +779,7 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, > > for (j = 1; j < NR_PAGES(order) && i + j < npages; j++) > > migrate.dst[i + j] = 0; > > } > > +#endif > > > > drm_pagemap_get_devmem_page(page, order, zdd); > > > > -- > > 2.52.0 > > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] drm/pagemap: Guard HPAGE_PMD_ORDER use with CONFIG_ARCH_ENABLE_THP_MIGRATION 2026-07-21 19:15 ` Matthew Brost @ 2026-07-21 19:35 ` Jan Stancek 0 siblings, 0 replies; 4+ messages in thread From: Jan Stancek @ 2026-07-21 19:35 UTC (permalink / raw) To: Matthew Brost Cc: dri-devel, linux-kernel, maarten.lankhorst, mripard, tzimmermann, airlied, simona On Tue, Jul 21, 2026 at 9:15 PM Matthew Brost <matthew.brost@intel.com> wrote: > > On Tue, Jul 21, 2026 at 12:12:01PM -0700, Matthew Brost wrote: > > On Tue, Jul 21, 2026 at 12:40:38PM +0200, Jan Stancek wrote: > > > HPAGE_PMD_SHIFT expands to BUILD_BUG() when CONFIG_PGTABLE_HAS_HUGE_LEAVES > > > is not set, causing a compile error when both CONFIG_TRANSPARENT_HUGEPAGE > > > and CONFIG_HUGETLB_PAGE are disabled: > > > > > > drivers/gpu/drm/drm_pagemap.c:480:12: error: call to '__compiletime_assert_458' > > > declared with 'error' attribute: BUILD_BUG failed > > > 480 | order = HPAGE_PMD_ORDER; > > > | ^ > > > include/linux/huge_mm.h:117:26: note: expanded from macro 'HPAGE_PMD_ORDER' > > > 117 | #define HPAGE_PMD_ORDER (HPAGE_PMD_SHIFT-PAGE_SHIFT) > > > | ^ > > > include/linux/huge_mm.h:113:28: note: expanded from macro 'HPAGE_PMD_SHIFT' > > > 113 | #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; }) > > > > > > Guard the two HPAGE_PMD_ORDER uses with CONFIG_ARCH_ENABLE_THP_MIGRATION, > > > matching the pattern used in migrate_device.c. > > > > > > Fixes: 139ab31aea8a ("drm/pagemap: Correct cpages calculation for migrate_vma_setup") > > > Reported-by: kernel test robot <lkp@intel.com> > > > Closes: https://lore.kernel.org/r/202607201914.LpAGsbXs-lkp@intel.com/ > > > Signed-off-by: Jan Stancek <jstancek@redhat.com> > > > --- > > > drivers/gpu/drm/drm_pagemap.c | 10 ++++++++-- > > > 1 file changed, 8 insertions(+), 2 deletions(-) > > > > > > diff --git a/drivers/gpu/drm/drm_pagemap.c b/drivers/gpu/drm/drm_pagemap.c > > > index 15c78eca180b..53a78752c8be 100644 > > > --- a/drivers/gpu/drm/drm_pagemap.c > > > +++ b/drivers/gpu/drm/drm_pagemap.c > > > @@ -578,10 +578,13 @@ static int drm_pagemap_cpages(unsigned long *migrate_pfn, unsigned long npages) > > > folio = page_folio(page); > > > order = folio_order(folio); > > > cpages += NR_PAGES(order); > > > - } else if (migrate_pfn[i] & MIGRATE_PFN_COMPOUND) { > > > + } > > > +#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION > > > + else if (migrate_pfn[i] & MIGRATE_PFN_COMPOUND) { > > > order = HPAGE_PMD_ORDER; > > > > Would it be do something like this at the top of the file... > > > > #ifdef HPAGE_PMD_ORDER > > #define DRM_PAGEMAP_PMD_ORDER HPAGE_PMD_ORDER > > #else > > #define DRM_PAGEMAP_PMD_ORDER (-1) > > #endif > > > > Opps screwed my snippet up - HPAGE_PMD_ORDER seems to be always defined... > > So actually... > > #if IS_ENABLED(CONFIG_ARCH_ENABLE_THP_MIGRATION) > #define DRM_PAGEMAP_PMD_ORDER HPAGE_PMD_ORDER > #else > define DRM_PAGEMAP_PMD_ORDER (-1) > #endif Works for me. Feel free to add: Tested-by: Jan Stancek <jstancek@redhat.com> if you'll be posting your version. Thanks, Jan > > Matt > > > Then in common code s/HPAGE_PMD_ORDER/DRM_PAGEMAP_PMD_ORDER/ > > > > I think this works as we can never get to the MIGRATE_PFN_COMPOUND code > > paths without CONFIG_ARCH_ENABLE_THP_MIGRATION enabled (see > > mm/migrate_device.c). > > > > Also btw fixing the unrelated bug Sashiko flagged in this patch. > > > > Matt > > > > > cpages += NR_PAGES(order); > > > } > > > +#endif > > > > > > i += NR_PAGES(order); > > > } > > > @@ -733,7 +736,6 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, > > > own_pages = 0; > > > > > > for (i = 0; i < npages;) { > > > - unsigned long j; > > > struct page *page = pfn_to_page(migrate.dst[i]); > > > struct page *src_page = migrate_pfn_to_page(migrate.src[i]); > > > unsigned int order = 0; > > > @@ -763,7 +765,10 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, > > > } > > > migrate.dst[i] = migrate_pfn(migrate.dst[i]); > > > > > > +#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION > > > if (migrate.src[i] & MIGRATE_PFN_COMPOUND) { > > > + unsigned long j; > > > + > > > drm_WARN_ONCE(dpagemap->drm, src_page && > > > folio_order(page_folio(src_page)) != HPAGE_PMD_ORDER, > > > "Unexpected folio order\n"); > > > @@ -774,6 +779,7 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation, > > > for (j = 1; j < NR_PAGES(order) && i + j < npages; j++) > > > migrate.dst[i + j] = 0; > > > } > > > +#endif > > > > > > drm_pagemap_get_devmem_page(page, order, zdd); > > > > > > -- > > > 2.52.0 > > > > ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-07-21 19:36 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <202607201914.LpAGsbXs-lkp@intel.com>
2026-07-21 10:40 ` [PATCH] drm/pagemap: Guard HPAGE_PMD_ORDER use with CONFIG_ARCH_ENABLE_THP_MIGRATION Jan Stancek
2026-07-21 19:12 ` Matthew Brost
2026-07-21 19:15 ` Matthew Brost
2026-07-21 19:35 ` Jan Stancek
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®