On Tue, Jul 21, 2026 at 9:15 PM Matthew Brost <[email protected]> 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 <[email protected]> > > > Closes: https://lore.kernel.org/r/[email protected]/ > > > Signed-off-by: Jan Stancek <[email protected]> > > > --- > > > 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 <[email protected]> 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 > > > >
