mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Zsolt Kajtar <soci@c64.rulez.org>
To: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org,
	gregkh@linuxfoundation.org, jirislaby@kernel.org
Cc: Zsolt Kajtar <soci@c64.rulez.org>
Subject: [PATCH v2 1/4] tty/vt: 8th bit location in vc_uniscr routines
Date: Mon,  1 Sep 2025 07:26:33 +0200	[thread overview]
Message-ID: <20250901052636.8981-2-soci@c64.rulez.org> (raw)
In-Reply-To: <20250901052636.8981-1-soci@c64.rulez.org>

Both vc_uniscr_check and vc_uniscr_copy_line assume that the 8th bit of
glyph is also the 8th bit in the screen buffer. However this is only the
case for fbcon at the moment. Vgacon has it on the 11th and so the
conversion won't work in that case.

The patch adds a helper to read the glyph correctly from the buffer.

Signed-off-by: Zsolt Kajtar <soci@c64.rulez.org>
---
 drivers/tty/vt/vt.c | 28 ++++++++++++++++++----------
 1 file changed, 18 insertions(+), 10 deletions(-)

diff --git a/drivers/tty/vt/vt.c b/drivers/tty/vt/vt.c
index 869261141..19ce9c426 100644
--- a/drivers/tty/vt/vt.c
+++ b/drivers/tty/vt/vt.c
@@ -293,6 +293,17 @@ static inline u16 *screenpos(const struct vc_data *vc, unsigned int offset,
 	return (u16 *)(origin + offset);
 }
 
+static inline u16 scr_read_glyph(const struct vc_data *vc, u16 *pos)
+{
+	u16 w = scr_readw(pos);
+	u16 glyph = w & 0xff;
+
+	if (w & vc->vc_hi_font_mask)
+		glyph |= 0x100;
+
+	return glyph;
+}
+
 static void con_putc(struct vc_data *vc, u16 ca, unsigned int y, unsigned int x)
 {
 	if (vc->vc_sw->con_putc)
@@ -493,7 +504,7 @@ int vc_uniscr_check(struct vc_data *vc)
 {
 	u32 **uni_lines;
 	unsigned short *p;
-	int x, y, mask;
+	int x, y;
 
 	WARN_CONSOLE_UNLOCKED();
 
@@ -514,11 +525,11 @@ int vc_uniscr_check(struct vc_data *vc)
 	 * unicode content will be available after a complete screen refresh.
 	 */
 	p = (unsigned short *)vc->vc_origin;
-	mask = vc->vc_hi_font_mask | 0xff;
 	for (y = 0; y < vc->vc_rows; y++) {
 		u32 *line = uni_lines[y];
 		for (x = 0; x < vc->vc_cols; x++) {
-			u16 glyph = scr_readw(p++) & mask;
+			u16 glyph = scr_read_glyph(vc, p++);
+
 			line[x] = inverse_translate(vc, glyph, true);
 		}
 	}
@@ -561,10 +572,10 @@ void vc_uniscr_copy_line(const struct vc_data *vc, void *dest, bool viewed,
 		 * buffer of its own.
 		 */
 		u16 *p = (u16 *)pos;
-		int mask = vc->vc_hi_font_mask | 0xff;
 		u32 *uni_buf = dest;
 		while (nr--) {
-			u16 glyph = scr_readw(p++) & mask;
+			u16 glyph = scr_read_glyph(vc, p++);
+
 			*uni_buf++ = inverse_translate(vc, glyph, true);
 		}
 	}
@@ -4920,12 +4931,9 @@ int con_font_op(struct vc_data *vc, struct console_font_op *op)
 /* used by selection */
 u16 screen_glyph(const struct vc_data *vc, int offset)
 {
-	u16 w = scr_readw(screenpos(vc, offset, true));
-	u16 c = w & 0xff;
+	u16 *pos = screenpos(vc, offset, true);
 
-	if (w & vc->vc_hi_font_mask)
-		c |= 0x100;
-	return c;
+	return scr_read_glyph(vc, pos);
 }
 EXPORT_SYMBOL_GPL(screen_glyph);
 
-- 
2.30.2


  reply	other threads:[~2025-09-01  5:54 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-01  5:26 [PATCH v2 0/4] tty/vt: fix various 512 glyph font issues Zsolt Kajtar
2025-09-01  5:26 ` Zsolt Kajtar [this message]
2025-09-01  5:26 ` [PATCH v2 2/4] tty/vt: Prevent 8th bit corruption with soft cursor Zsolt Kajtar
2025-09-01  5:26 ` [PATCH v2 3/4] tty/vt: Fix unreadable kernel messages on vgacon Zsolt Kajtar
2025-09-01  5:26 ` [PATCH v2 4/4] tty/vt: use correct attribute mask in do_update_region Zsolt Kajtar
2025-09-06 11:42 ` [PATCH v2 0/4] tty/vt: fix various 512 glyph font issues Greg KH

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=20250901052636.8981-2-soci@c64.rulez.org \
    --to=soci@c64.rulez.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jirislaby@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.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

all inboxes | Powered by JetHome®