From: Thomas Zimmermann <tzimmermann@suse.de>
To: gregkh@linuxfoundation.org, deller@gmx.de, sam@ravnborg.org
Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org,
Thomas Zimmermann <tzimmermann@suse.de>
Subject: [PATCH 08/13] lib/fonts: Read font size with font_data_size()
Date: Wed, 18 Feb 2026 09:15:59 +0100 [thread overview]
Message-ID: <20260218083855.10743-9-tzimmermann@suse.de> (raw)
In-Reply-To: <20260218083855.10743-1-tzimmermann@suse.de>
Add font_data_size() and update consoles to use it.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/video/console/newport_con.c | 2 +-
drivers/video/fbdev/core/fbcon.c | 14 +++++++-------
include/linux/font.h | 2 ++
lib/fonts/fonts.c | 21 +++++++++++++++++++++
4 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c
index fcf76f65b06e..eee9695c3eb5 100644
--- a/drivers/video/console/newport_con.c
+++ b/drivers/video/console/newport_con.c
@@ -530,7 +530,7 @@ static int newport_set_font(int unit, const struct console_font *op,
/* check if font is already used by other console */
for (i = 0; i < MAX_NR_CONSOLES; i++) {
if (font_data[i] != FONT_DATA
- && FNTSIZE(font_data[i]) == size
+ && font_data_size(font_data[i]) == size
&& !memcmp(font_data[i], new_data, size)) {
kfree(new_data - FONT_EXTRA_WORDS * sizeof(int));
/* current font is the same as the new one */
diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index 73f2757155e6..ebb9c5c1b247 100644
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -2058,7 +2058,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width,
struct fb_var_screeninfo var = info->var;
int x_diff, y_diff, virt_w, virt_h, virt_fw, virt_fh;
- if (p->userfont && FNTSIZE(p->fontdata)) {
+ if (p->userfont && font_data_size(p->fontdata)) {
unsigned int size = vc_font_size(&vc->vc_font);
/*
@@ -2068,7 +2068,7 @@ static int fbcon_resize(struct vc_data *vc, unsigned int width,
* charcount can change and cannot be used to determine the
* font data allocated size.
*/
- if (!size || size > FNTSIZE(p->fontdata))
+ if (!size || size > font_data_size(p->fontdata))
return -EINVAL;
}
@@ -2307,7 +2307,7 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font, unsigne
if (font->width <= 8) {
j = vc->vc_font.height;
- if (font->charcount * j > FNTSIZE(fontdata))
+ if (font->charcount * j > font_data_size(fontdata))
return -EINVAL;
for (i = 0; i < font->charcount; i++) {
@@ -2318,7 +2318,7 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font, unsigne
}
} else if (font->width <= 16) {
j = vc->vc_font.height * 2;
- if (font->charcount * j > FNTSIZE(fontdata))
+ if (font->charcount * j > font_data_size(fontdata))
return -EINVAL;
for (i = 0; i < font->charcount; i++) {
@@ -2328,7 +2328,7 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font, unsigne
fontdata += j;
}
} else if (font->width <= 24) {
- if (font->charcount * (vc->vc_font.height * sizeof(u32)) > FNTSIZE(fontdata))
+ if (font->charcount * (vc->vc_font.height * sizeof(u32)) > font_data_size(fontdata))
return -EINVAL;
for (i = 0; i < font->charcount; i++) {
@@ -2343,7 +2343,7 @@ static int fbcon_get_font(struct vc_data *vc, struct console_font *font, unsigne
}
} else {
j = vc->vc_font.height * 4;
- if (font->charcount * j > FNTSIZE(fontdata))
+ if (font->charcount * j > font_data_size(fontdata))
return -EINVAL;
for (i = 0; i < font->charcount; i++) {
@@ -2558,7 +2558,7 @@ static int fbcon_set_font(struct vc_data *vc, const struct console_font *font,
if (fb_display[i].userfont &&
fb_display[i].fontdata &&
FNTSUM(fb_display[i].fontdata) == csum &&
- FNTSIZE(fb_display[i].fontdata) == size &&
+ font_data_size(fb_display[i].fontdata) == size &&
tmp->vc_font.width == w &&
!memcmp(fb_display[i].fontdata, new_data, size)) {
kfree(new_data - FONT_EXTRA_WORDS * sizeof(int));
diff --git a/include/linux/font.h b/include/linux/font.h
index 4ff8d52e59c3..3afb32b625d3 100644
--- a/include/linux/font.h
+++ b/include/linux/font.h
@@ -54,6 +54,8 @@ static inline const unsigned char *font_data_buf(font_data_t *fd)
return (const unsigned char *)fd;
}
+unsigned int font_data_size(font_data_t *fd);
+
/*
* Font lookup
*/
diff --git a/lib/fonts/fonts.c b/lib/fonts/fonts.c
index a7f118b30171..8c9a6762061c 100644
--- a/lib/fonts/fonts.c
+++ b/lib/fonts/fonts.c
@@ -20,6 +20,27 @@
#endif
#include <linux/font.h>
+/*
+ * Helpers for font_data_t
+ */
+
+/**
+ * font_data_size - Return size of the font data in bytes
+ * @fd: Font data
+ *
+ * Returns:
+ * The number of bytes in the given font data.
+ */
+unsigned int font_data_size(font_data_t *fd)
+{
+ return FNTSIZE(fd);
+}
+EXPORT_SYMBOL_GPL(font_data_size);
+
+/*
+ * Font lookup
+ */
+
static const struct font_desc *fonts[] = {
#ifdef CONFIG_FONT_8x8
&font_vga_8x8,
--
2.52.0
next prev parent reply other threads:[~2026-02-18 8:39 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-18 8:15 [PATCH 00/13] vc,fbcon,fonts: Proper handling of font data Thomas Zimmermann
2026-02-18 8:15 ` [PATCH 01/13] fbdev: Declare src parameter of fb_pad_ helpers as constant Thomas Zimmermann
2026-02-18 8:15 ` [PATCH 02/13] vt: Remove trailing whitespaces Thomas Zimmermann
2026-02-18 8:15 ` [PATCH 03/13] vt: Store font in struct vc_font Thomas Zimmermann
2026-02-18 8:15 ` [PATCH 04/13] vt: Calculate font-buffer size with vc_font_size() Thomas Zimmermann
2026-02-18 8:15 ` [PATCH 05/13] lib/fonts: Remove trailing whitespaces Thomas Zimmermann
2026-02-18 8:15 ` [PATCH 06/13] lib/fonts: Remove FNTCHARCNT() Thomas Zimmermann
2026-02-18 8:15 ` [PATCH 07/13] lib/fonts: Store font data as font_data_t; update consoles Thomas Zimmermann
2026-02-18 8:15 ` Thomas Zimmermann [this message]
2026-02-18 8:16 ` [PATCH 09/13] lib/fonts: Compare font data for equality with font_data_is_equal() Thomas Zimmermann
2026-02-18 8:16 ` [PATCH 10/13] lib/fonts: Manage font-data lifetime with font_data_get/_put() Thomas Zimmermann
2026-02-18 8:16 ` [PATCH 11/13] lib/fonts: Create font_data_t from struct console_font with font_data_import() Thomas Zimmermann
2026-02-18 8:16 ` [PATCH 12/13] lib/fonts: Store font data for user space with font_data_export() Thomas Zimmermann
2026-02-18 8:16 ` [PATCH 13/13] lib/fonts: Remove internal symbols and macros from public header file Thomas Zimmermann
2026-02-18 21:47 ` kernel test robot
2026-02-19 2:08 ` kernel test robot
2026-02-23 15:05 ` Helge Deller
2026-03-02 13:45 ` Thomas Zimmermann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260218083855.10743-9-tzimmermann@suse.de \
--to=tzimmermann@suse.de \
--cc=deller@gmx.de \
--cc=dri-devel@lists.freedesktop.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sam@ravnborg.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox