[PATCH 00/10] fbcon,fonts: Refactor framebuffer console rotation

Thomas Zimmermann posted 10 patches 6 days, 1 hour ago
drivers/tty/vt/vt.c                     |  34 +++
drivers/video/fbdev/core/bitblit.c      |  35 +--
drivers/video/fbdev/core/fbcon.c        |  48 ++++-
drivers/video/fbdev/core/fbcon.h        |  14 +-
drivers/video/fbdev/core/fbcon_ccw.c    |  70 ++----
drivers/video/fbdev/core/fbcon_cw.c     |  70 ++----
drivers/video/fbdev/core/fbcon_rotate.c |  88 ++------
drivers/video/fbdev/core/fbcon_rotate.h |  71 ------
drivers/video/fbdev/core/fbcon_ud.c     |  67 ++----
include/linux/console_struct.h          |  30 +--
include/linux/font.h                    |  51 +++++
lib/fonts/Makefile                      |  36 ++--
lib/fonts/font_rotate.c                 | 275 ++++++++++++++++++++++++
lib/fonts/fonts.c                       |   2 +-
14 files changed, 525 insertions(+), 366 deletions(-)
create mode 100644 lib/fonts/font_rotate.c
[PATCH 00/10] fbcon,fonts: Refactor framebuffer console rotation
Posted by Thomas Zimmermann 6 days, 1 hour ago
Refactor the framebuffer console rotation into individual components
for glyphs, fonts and the overall fbcon state. Right now this is mixed
up in fbcon_rotate.{c,h}. Also build cursor rotation on top of the new
interfaces.

Start with an OOB fix in patch 1. If buffer allocation fails, fbcon
currently uses a too-small glyph buffer for output. Avoid that.

Patches 2 to 4 make a number of small improvements to the font library
and its callers.

Patches 5 to 8 refactor the font rotation. Fbcon rotation rotates each
individual glphy in a font buffer and uses the rotated buffer's glyphs
for output. The result looks like the console buffer has been rotated
as a whole. Split this into helpers that rotate individual glyphs and
a helper that rotates the font buffer of these. Then reimplement fbcon
rotation on top. Document the public font helpers.

Patch 9 rebuilds cursor rotation on top of the new glyph helpers. The
fbcon cursor is itself a glyph that has to be rotated in sync with the
font.

Patch 10 moves the state of fbcon rotation into a single place and makes
is a build-time conditional.

Tested with fbcon under bochs on Qemu.

Built upon the fbcon changes at [1].

[1] https://lore.kernel.org/linux-fbdev/20260309141723.137364-1-tzimmermann@suse.de/

Thomas Zimmermann (10):
  fbcon: Avoid OOB font access if console rotation fails
  vt: Implement helpers for struct vc_font in source file
  lib/fonts: Provide helpers for calculating glyph pitch and size
  lib/fonts: Clean up Makefile
  lib/fonts: Implement glyph rotation
  lib/fonts: Refactor glyph-pattern helpers
  lib/fonts: Refactor glyph-rotation helpers
  lib/fonts: Implement font rotation
  fbcon: Fill cursor mask in helper function
  fbcon: Put font-rotation state into separate struct

 drivers/tty/vt/vt.c                     |  34 +++
 drivers/video/fbdev/core/bitblit.c      |  35 +--
 drivers/video/fbdev/core/fbcon.c        |  48 ++++-
 drivers/video/fbdev/core/fbcon.h        |  14 +-
 drivers/video/fbdev/core/fbcon_ccw.c    |  70 ++----
 drivers/video/fbdev/core/fbcon_cw.c     |  70 ++----
 drivers/video/fbdev/core/fbcon_rotate.c |  88 ++------
 drivers/video/fbdev/core/fbcon_rotate.h |  71 ------
 drivers/video/fbdev/core/fbcon_ud.c     |  67 ++----
 include/linux/console_struct.h          |  30 +--
 include/linux/font.h                    |  51 +++++
 lib/fonts/Makefile                      |  36 ++--
 lib/fonts/font_rotate.c                 | 275 ++++++++++++++++++++++++
 lib/fonts/fonts.c                       |   2 +-
 14 files changed, 525 insertions(+), 366 deletions(-)
 create mode 100644 lib/fonts/font_rotate.c

-- 
2.53.0
Re: [PATCH 00/10] fbcon,fonts: Refactor framebuffer console rotation
Posted by Helge Deller 1 day, 22 hours ago
Hi Thomas,

On 3/27/26 13:49, Thomas Zimmermann wrote:
> Refactor the framebuffer console rotation into individual components
> for glyphs, fonts and the overall fbcon state. Right now this is mixed
> up in fbcon_rotate.{c,h}. Also build cursor rotation on top of the new
> interfaces.
> 
> Start with an OOB fix in patch 1. If buffer allocation fails, fbcon
> currently uses a too-small glyph buffer for output. Avoid that.
> 
> Patches 2 to 4 make a number of small improvements to the font library
> and its callers.
> 
> Patches 5 to 8 refactor the font rotation. Fbcon rotation rotates each
> individual glphy in a font buffer and uses the rotated buffer's glyphs
> for output. The result looks like the console buffer has been rotated
> as a whole. Split this into helpers that rotate individual glyphs and
> a helper that rotates the font buffer of these. Then reimplement fbcon
> rotation on top. Document the public font helpers.
> 
> Patch 9 rebuilds cursor rotation on top of the new glyph helpers. The
> fbcon cursor is itself a glyph that has to be rotated in sync with the
> font.
> 
> Patch 10 moves the state of fbcon rotation into a single place and makes
> is a build-time conditional.
> 
> Tested with fbcon under bochs on Qemu.
> 
> Built upon the fbcon changes at [1].
> 
> [1] https://lore.kernel.org/linux-fbdev/20260309141723.137364-1-tzimmermann@suse.de/


Thanks a lot for this cleanup work!

I've applied this series to the fbdev git tree.

Helge

  
> Thomas Zimmermann (10):
>    fbcon: Avoid OOB font access if console rotation fails
>    vt: Implement helpers for struct vc_font in source file
>    lib/fonts: Provide helpers for calculating glyph pitch and size
>    lib/fonts: Clean up Makefile
>    lib/fonts: Implement glyph rotation
>    lib/fonts: Refactor glyph-pattern helpers
>    lib/fonts: Refactor glyph-rotation helpers
>    lib/fonts: Implement font rotation
>    fbcon: Fill cursor mask in helper function
>    fbcon: Put font-rotation state into separate struct
> 
>   drivers/tty/vt/vt.c                     |  34 +++
>   drivers/video/fbdev/core/bitblit.c      |  35 +--
>   drivers/video/fbdev/core/fbcon.c        |  48 ++++-
>   drivers/video/fbdev/core/fbcon.h        |  14 +-
>   drivers/video/fbdev/core/fbcon_ccw.c    |  70 ++----
>   drivers/video/fbdev/core/fbcon_cw.c     |  70 ++----
>   drivers/video/fbdev/core/fbcon_rotate.c |  88 ++------
>   drivers/video/fbdev/core/fbcon_rotate.h |  71 ------
>   drivers/video/fbdev/core/fbcon_ud.c     |  67 ++----
>   include/linux/console_struct.h          |  30 +--
>   include/linux/font.h                    |  51 +++++
>   lib/fonts/Makefile                      |  36 ++--
>   lib/fonts/font_rotate.c                 | 275 ++++++++++++++++++++++++
>   lib/fonts/fonts.c                       |   2 +-
>   14 files changed, 525 insertions(+), 366 deletions(-)
>   create mode 100644 lib/fonts/font_rotate.c
> 
Re: [PATCH 00/10] fbcon,fonts: Refactor framebuffer console rotation
Posted by Thomas Zimmermann 1 day, 22 hours ago
Hi

Am 31.03.26 um 17:08 schrieb Helge Deller:
> Hi Thomas,
>
> On 3/27/26 13:49, Thomas Zimmermann wrote:
>> Refactor the framebuffer console rotation into individual components
>> for glyphs, fonts and the overall fbcon state. Right now this is mixed
>> up in fbcon_rotate.{c,h}. Also build cursor rotation on top of the new
>> interfaces.
>>
>> Start with an OOB fix in patch 1. If buffer allocation fails, fbcon
>> currently uses a too-small glyph buffer for output. Avoid that.
>>
>> Patches 2 to 4 make a number of small improvements to the font library
>> and its callers.
>>
>> Patches 5 to 8 refactor the font rotation. Fbcon rotation rotates each
>> individual glphy in a font buffer and uses the rotated buffer's glyphs
>> for output. The result looks like the console buffer has been rotated
>> as a whole. Split this into helpers that rotate individual glyphs and
>> a helper that rotates the font buffer of these. Then reimplement fbcon
>> rotation on top. Document the public font helpers.
>>
>> Patch 9 rebuilds cursor rotation on top of the new glyph helpers. The
>> fbcon cursor is itself a glyph that has to be rotated in sync with the
>> font.
>>
>> Patch 10 moves the state of fbcon rotation into a single place and makes
>> is a build-time conditional.
>>
>> Tested with fbcon under bochs on Qemu.
>>
>> Built upon the fbcon changes at [1].
>>
>> [1] 
>> https://lore.kernel.org/linux-fbdev/20260309141723.137364-1-tzimmermann@suse.de/
>
>
> Thanks a lot for this cleanup work!
>
> I've applied this series to the fbdev git tree.

Thanks a lot.

There's a small typo in patch 2 that I noticed when Greg gave his ack. 
The commit description say <liux/math.h> instead of <linux/math.h>.  Let 
me know whether you can fix it or if I should send an update.

Best regards
Thomas

>
> Helge
>
>
>> Thomas Zimmermann (10):
>>    fbcon: Avoid OOB font access if console rotation fails
>>    vt: Implement helpers for struct vc_font in source file
>>    lib/fonts: Provide helpers for calculating glyph pitch and size
>>    lib/fonts: Clean up Makefile
>>    lib/fonts: Implement glyph rotation
>>    lib/fonts: Refactor glyph-pattern helpers
>>    lib/fonts: Refactor glyph-rotation helpers
>>    lib/fonts: Implement font rotation
>>    fbcon: Fill cursor mask in helper function
>>    fbcon: Put font-rotation state into separate struct
>>
>>   drivers/tty/vt/vt.c                     |  34 +++
>>   drivers/video/fbdev/core/bitblit.c      |  35 +--
>>   drivers/video/fbdev/core/fbcon.c        |  48 ++++-
>>   drivers/video/fbdev/core/fbcon.h        |  14 +-
>>   drivers/video/fbdev/core/fbcon_ccw.c    |  70 ++----
>>   drivers/video/fbdev/core/fbcon_cw.c     |  70 ++----
>>   drivers/video/fbdev/core/fbcon_rotate.c |  88 ++------
>>   drivers/video/fbdev/core/fbcon_rotate.h |  71 ------
>>   drivers/video/fbdev/core/fbcon_ud.c     |  67 ++----
>>   include/linux/console_struct.h          |  30 +--
>>   include/linux/font.h                    |  51 +++++
>>   lib/fonts/Makefile                      |  36 ++--
>>   lib/fonts/font_rotate.c                 | 275 ++++++++++++++++++++++++
>>   lib/fonts/fonts.c                       |   2 +-
>>   14 files changed, 525 insertions(+), 366 deletions(-)
>>   create mode 100644 lib/fonts/font_rotate.c
>>
>

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