[PATCH] drm/pagemap: avoid referencing HPAGE_PMD_ORDER for non-hugepage builds
From: Arnd Bergmann
Date: Wed Mar 18 2026 - 06:47:36 EST
From: Arnd Bergmann <arnd@xxxxxxxx>
HPAGE_PMD_SHIFT/HPAGE_PMD_ORDER can only be used in configurations
that allow hugepages, but forces a build error otherwise:
drivers/gpu/drm/drm_pagemap.c:671:48: error: call to '__compiletime_assert_608' declared with 'error' attribute: BUILD_BUG failed
671 | folio_order(page_folio(src_page)) != 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; })
| ^
include/linux/build_bug.h:60:21: note: expanded from macro 'BUILD_BUG'
60 | #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed")
| ^
note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:697:2: note: expanded from macro '_compiletime_assert'
697 | __compiletime_assert(condition, msg, prefix, suffix)
| ^
Hide this inside of a check for CONFIG_PGTABLE_HAS_HUGE_LEAVES.
Fixes: 192cb1f5cb16 ("drm/pagemap: Enable THP support for GPU memory migration")
Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx>
---
Not sure if this is the best approach, as the BUILD_BUG_ON() and
drm_WARN_ONCE() check for similar failures, and this would bypass
both checks.
---
drivers/gpu/drm/drm_pagemap.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/drm_pagemap.c b/drivers/gpu/drm/drm_pagemap.c
index 6ac980bd8f3d..7463aec0db82 100644
--- a/drivers/gpu/drm/drm_pagemap.c
+++ b/drivers/gpu/drm/drm_pagemap.c
@@ -479,7 +479,8 @@ 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) {
+ } else if (IS_ENABLED(CONFIG_PGTABLE_HAS_HUGE_LEAVES) &&
+ migrate_pfn[i] & MIGRATE_PFN_COMPOUND) {
order = HPAGE_PMD_ORDER;
cpages += NR_PAGES(order);
}
@@ -666,7 +667,8 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,
}
migrate.dst[i] = migrate_pfn(migrate.dst[i]);
- if (migrate.src[i] & MIGRATE_PFN_COMPOUND) {
+ if (IS_ENABLED(CONFIG_PGTABLE_HAS_HUGE_LEAVES) &&
+ migrate.src[i] & MIGRATE_PFN_COMPOUND) {
drm_WARN_ONCE(dpagemap->drm, src_page &&
folio_order(page_folio(src_page)) != HPAGE_PMD_ORDER,
"Unexpected folio order\n");
--
2.39.5