Hi

Am 03.03.26 um 16:29 schrieb Helge Deller:
On 3/2/26 15:08, Thomas Zimmermann wrote:
Provide helpers for handling console font data. Update consoles and VT.

VT's vc_state stores font data as a plain byte array of glphys. Fbcon,
newport_con and the kernel's internal fonts store the glyph data as an
array of plain bytes plus a hidden header for reference counting, check
sums and buffer sizes. The reference counting only works for user-space
fonts but not for internal fonts. Font-data handling is duplicated in
several places. Most of the font handling is open-coded and mixed up with
VT's plain glyph arrays.

To address these issues, add proper handling of font data to all involved components: struct vc_font for font state in VC; a font data type for the
consoles. Then implement interfaces for handling font data one by one.

Patch 1 prepares the fbdev interface.

Patches 2 to 4 prepare VT's font handling.

Patches 5 to 13 refactor fbcon and newport_con to use clean interfaces for
their fonts.

Fbcon has long been a source of problems and bug reports. [1] With its
confusing implementation, it is hard to find the cause of these bugs.
Cleaning up the fbcon code will hopefully help with resolving bug reports
in the future.

The series has been tested with fbcon under DRM's bochs driver by changing fonts at runtime using the setfont utility. [2] The changes to newport_con
have only been tested to compile.

v2:
- keep declaring the internal fonts in the public header file (Helge)
- rebase and clean up

[1] https://lore.kernel.org/all/[email protected]/
[2] https://www.man7.org/linux/man-pages/man8/setfont.8.html

Thomas Zimmermann (13):
   fbdev: Declare src parameter of fb_pad_ helpers as constant
   vt: Remove trailing whitespaces
   vt: Store font in struct vc_font
   vt: Calculate font-buffer size with vc_font_size()
   lib/fonts: Remove trailing whitespaces
   lib/fonts: Remove FNTCHARCNT()
   lib/fonts: Store font data as font_data_t; update consoles
   lib/fonts: Read font size with font_data_size()
   lib/fonts: Compare font data for equality with font_data_is_equal()
   lib/fonts: Manage font-data lifetime with font_data_get/_put()
   lib/fonts: Create font_data_t from struct console_font with
     font_data_import()
   lib/fonts: Store font data for user space with font_data_export()
   lib/fonts: Remove internal symbols and macros from public header file

  drivers/video/console/newport_con.c |  61 +++----
  drivers/video/fbdev/core/bitblit.c  |  11 +-
  drivers/video/fbdev/core/fbcon.c    | 194 +++++++----------------
  drivers/video/fbdev/core/fbcon.h    |   8 +-
  drivers/video/fbdev/core/fbmem.c    |   6 +-
  include/linux/console_struct.h      |  59 ++++++-
  include/linux/fb.h                  |  10 +-
  include/linux/font.h                | 115 +++++++++-----
  lib/fonts/font.h                    |  38 +++++
  lib/fonts/font_10x18.c              |   2 +-
  lib/fonts/font_6x10.c               |   3 +-
  lib/fonts/font_6x11.c               |   2 +-
  lib/fonts/font_6x8.c                |   3 +-
  lib/fonts/font_7x14.c               |   2 +-
  lib/fonts/font_8x16.c               |   3 +-
  lib/fonts/font_8x8.c                |   2 +-
  lib/fonts/font_acorn_8x8.c          |   4 +-
  lib/fonts/font_mini_4x6.c           |  10 +-
  lib/fonts/font_pearl_8x8.c          |   2 +-
  lib/fonts/font_sun12x22.c           |   3 +-
  lib/fonts/font_sun8x16.c            |   3 +-
  lib/fonts/font_ter10x18.c           |   4 +-
  lib/fonts/font_ter16x32.c           |   4 +-
  lib/fonts/fonts.c                   | 236 +++++++++++++++++++++++++++-
  24 files changed, 518 insertions(+), 267 deletions(-)
  create mode 100644 lib/fonts/font.h
Thomas, thanks for the nice cleanup!
Beside a few minor comments which I posted to the various patches, the series looks good.

I've applied it for further testing to the fbdev git tree.

Great, thanks!

In case you send later v3 series, I'll update it.

I'd preferably not modify the data structures for now. Shall I send an update for the typos?

Best regards
Thomas


Thanks a lot!
Helge

--
--
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)


Reply via email to