[PATCH] drm/pagemap: avoid referencing HPAGE_PMD_ORDER for non-hugepage builds

Arnd Bergmann posted 1 patch 2 weeks, 5 days ago
drivers/gpu/drm/drm_pagemap.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
[PATCH] drm/pagemap: avoid referencing HPAGE_PMD_ORDER for non-hugepage builds
Posted by Arnd Bergmann 2 weeks, 5 days ago
From: Arnd Bergmann <arnd@arndb.de>

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@arndb.de>
---
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