Re: [PATCH v2 09/13] lib/fonts: Compare font data for equality with font_data_is_equal()
From: Thomas Zimmermann
Date: Thu Mar 05 2026 - 04:31:44 EST
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 <tzimmermann@xxxxxxx>
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