Hi

Am 05.03.26 um 01:23 schrieb Nathan Chancellor:
[...]
+static bool font_data_is_internal(font_data_t *fd)
+{
+       return is_kernel_rodata((unsigned long)fd);
+}
+
[...]

This breaks the build when CONFIG_FONT_SUPPORT is a module.

   $ cat allno.config
   CONFIG_MODULES=y
   CONFIG_DRM=m
   CONFIG_DRM_PANIC=y

   $ make -skj"$(nproc)" ARCH=x86_64 CROSS_COMPILE=x86_64-linux- 
KCONFIG_ALLCONFIG=1 allnoconfig all
   ERROR: modpost: "__end_rodata" [lib/fonts/font.ko] undefined!
   make[4]: *** [scripts/Makefile.modpost:147: Module.symvers] Error 1
   ...

   $ scripts/config -s FONT_SUPPORT
   m

Thanks for testing. The attached patch fixes the problem for me. Could you please test?

Best regards
Thomas


Cheers,
Nathan


+       if (font_data_size(lhs) != font_data_size(rhs))
+               return false;
+       if (FNTSUM(lhs) && FNTSUM(rhs) && FNTSUM(lhs) != FNTSUM(rhs))
+               return false;
+
+       return !memcmp(lhs, rhs, FNTSIZE(lhs));
+}
+EXPORT_SYMBOL_GPL(font_data_is_equal);
+
  /*
   * Font lookup
   */
--
2.53.0


--
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstr. 146, 90461 Nürnberg, Germany, www.suse.com
GF: Jochen Jaser, Andrew McDonald, Werner Knoblich, (HRB 36809, AG Nürnberg)

From 8dc48d2e676d1437584794f4df3dd20d08878655 Mon Sep 17 00:00:00 2001
From: Thomas Zimmermann <[email protected]>
Date: Thu, 5 Mar 2026 09:28:28 +0100
Subject: [PATCH] test for internal fonts by refcount

Internal font data is 'static const'. Hence test against the refcount
being zero.
---
 lib/fonts/fonts.c | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/lib/fonts/fonts.c b/lib/fonts/fonts.c
index 198aae869be2..b73d74b977ec 100644
--- a/lib/fonts/fonts.c
+++ b/lib/fonts/fonts.c
@@ -45,14 +45,11 @@ static struct font_data *to_font_data_struct(font_data_t *fd)
 
 static bool font_data_is_internal(font_data_t *fd)
 {
-	return is_kernel_rodata((unsigned long)fd);
+	return !REFCOUNT(fd); /* internal fonts have no reference counting */
 }
 
 static void font_data_free(font_data_t *fd)
 {
-	if (WARN_ON(font_data_is_internal(fd)))
-		return;
-
 	kfree(to_font_data_struct(fd));
 }
 
-- 
2.53.0

Reply via email to