From: Alexey Gladkov <legion@kernel.org> To: Samuel Thibault <samuel.thibault@ens-lyon.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Jiri Slaby <jirislaby@kernel.org>, linux-kernel@vger.kernel.org, kbd@lists.altlinux.org Subject: Re: [kbd] [patchv2 3/3] VT: Bump font size limitation to 64x128 pixels Date: Sun, 18 Dec 2022 15:39:38 +0100 Message-ID: <Y58mKmE9Km+NujDa@example.org> (raw) In-Reply-To: <20221218003237.503424466@ens-lyon.org> On Sun, Dec 18, 2022 at 01:32:12AM +0100, Samuel Thibault wrote: > This moves 32x32 font size limitation checking down to drivers, so that > fbcon can allow large fonts. > > We still keep a limitation to 64x128 pixels so as to have a simple bounded > allocation for con_font_get and in the userland kbd tool. That glyph size > will however be enough to have 128x36 characters on a "16/9 8K display". > > Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org> > > --- > V1 -> V2: Switch con_font_get to kvmalloc/kvfree instead of kmalloc/kfree > > Index: linux-6.0/drivers/tty/vt/vt.c > =================================================================== > --- linux-6.0.orig/drivers/tty/vt/vt.c > +++ linux-6.0/drivers/tty/vt/vt.c > @@ -4575,17 +4575,20 @@ void reset_palette(struct vc_data *vc) > /* > * Font switching > * > - * Currently we only support fonts up to 32 pixels wide, at a maximum height > - * of 32 pixels. Userspace fontdata is stored with 32 bytes (shorts/ints, > - * depending on width) reserved for each character which is kinda wasty, but > - * this is done in order to maintain compatibility with the EGA/VGA fonts. It > - * is up to the actual low-level console-driver convert data into its favorite > - * format (maybe we should add a `fontoffset' field to the `display' > - * structure so we won't have to convert the fontdata all the time. > + * Currently we only support fonts up to 128 pixels wide, at a maximum height > + * of 128 pixels. Userspace fontdata may have to be stored with 32 bytes > + * (shorts/ints, depending on width) reserved for each character which is > + * kinda wasty, but this is done in order to maintain compatibility with the > + * EGA/VGA fonts. It is up to the actual low-level console-driver convert data > + * into its favorite format (maybe we should add a `fontoffset' field to the > + * `display' structure so we won't have to convert the fontdata all the time. > * /Jes > */ > > -#define max_font_size 65536 > +#define max_font_width 64 > +#define max_font_height 128 > +#define max_font_glyphs 512 > +#define max_font_size (max_font_glyphs*max_font_width*max_font_height) As a suggestion that you can safely ignore. Maybe make max_font_glyphs a sysctl parameter to be able to use larger fonts ? I get requests from time to time in kbd that it is not possible to load a larger font. > static int con_font_get(struct vc_data *vc, struct console_font_op *op) > { > @@ -4595,7 +4598,7 @@ static int con_font_get(struct vc_data * > unsigned int vpitch = op->op == KD_FONT_OP_GET_TALL ? op->height : 32; > > if (op->data) { > - font.data = kmalloc(max_font_size, GFP_KERNEL); > + font.data = kvmalloc(max_font_size, GFP_KERNEL); > if (!font.data) > return -ENOMEM; > } else > @@ -4630,7 +4633,7 @@ static int con_font_get(struct vc_data * > rc = -EFAULT; > > out: > - kfree(font.data); > + kvfree(font.data); > return rc; > } > > @@ -4645,9 +4648,10 @@ static int con_font_set(struct vc_data * > return -EINVAL; > if (!op->data) > return -EINVAL; > - if (op->charcount > 512) > + if (op->charcount > max_font_glyphs) > return -EINVAL; > - if (op->width <= 0 || op->width > 32 || !op->height || op->height > 32) > + if (op->width <= 0 || op->width > max_font_width || !op->height || > + op->height > max_font_height) > return -EINVAL; > if (vpitch < op->height) > return -EINVAL; > Index: linux-6.0/drivers/usb/misc/sisusbvga/sisusb_con.c > =================================================================== > --- linux-6.0.orig/drivers/usb/misc/sisusbvga/sisusb_con.c > +++ linux-6.0/drivers/usb/misc/sisusbvga/sisusb_con.c > @@ -1203,7 +1203,7 @@ sisusbcon_font_set(struct vc_data *c, st > struct sisusb_usb_data *sisusb; > unsigned charcount = font->charcount; > > - if (font->width != 8 || vpitch != 32 || > + if (font->width != 8 || font->height > 32 || vpitch != 32 || > (charcount != 256 && charcount != 512)) > return -EINVAL; > > Index: linux-6.0/drivers/video/console/vgacon.c > =================================================================== > --- linux-6.0.orig/drivers/video/console/vgacon.c > +++ linux-6.0/drivers/video/console/vgacon.c > @@ -1037,7 +1037,7 @@ static int vgacon_font_set(struct vc_dat > if (vga_video_type < VIDEO_TYPE_EGAM) > return -EINVAL; > > - if (font->width != VGA_FONTWIDTH || vpitch != 32 || > + if (font->width != VGA_FONTWIDTH || font->height > 32 || vpitch != 32 || > (charcount != 256 && charcount != 512)) > return -EINVAL; > > Index: linux-6.0/drivers/video/fbdev/core/fbcon.c > =================================================================== > --- linux-6.0.orig/drivers/video/fbdev/core/fbcon.c > +++ linux-6.0/drivers/video/fbdev/core/fbcon.c > @@ -2279,6 +2279,8 @@ static int fbcon_get_font(struct vc_data > > font->width = vc->vc_font.width; > font->height = vc->vc_font.height; > + if (font->height > vpitch) > + return -ENOSPC; > font->charcount = vc->vc_hi_font_mask ? 512 : 256; > if (!font->data) > return 0; > > _______________________________________________ > kbd mailing list > kbd@lists.altlinux.org > https://lists.altlinux.org/mailman/listinfo/kbd > -- Rgrds, legion
next prev parent reply other threads:[~2022-12-18 14:39 UTC|newest] Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-12-18 0:32 [kbd] [patchv2 0/3] VT: Support >32x32 fonts for hidpi displays Samuel Thibault 2022-12-18 0:32 ` [kbd] [patchv2 1/3] VT: Add height parameter to con_font_get/set consw operations Samuel Thibault 2023-01-19 15:09 ` Greg Kroah-Hartman 2023-01-19 15:20 ` Samuel Thibault 2022-12-18 0:32 ` [kbd] [patchv2 2/3] VT: Add KD_FONT_OP_SET/GET_TALL operations Samuel Thibault 2022-12-18 0:32 ` [kbd] [patchv2 3/3] VT: Bump font size limitation to 64x128 pixels Samuel Thibault 2022-12-18 14:39 ` Alexey Gladkov [this message] 2022-12-18 14:55 ` Samuel Thibault 2022-12-18 15:25 ` Alexey Gladkov 2022-12-18 15:28 ` Samuel Thibault 2022-12-18 15:38 ` Alexey Gladkov 2023-01-19 14:55 ` Greg Kroah-Hartman 2022-12-18 0:33 ` [kbd] [patch] font: Leverage KD_FONT_OP_GET/SET_TALL font operations Samuel Thibault 2023-01-11 20:00 ` Alexey Gladkov 2023-01-16 22:44 ` Samuel Thibault 2023-01-10 20:55 ` [kbd] [patchv2 0/3] VT: Support >32x32 fonts for hidpi displays Samuel Thibault 2023-01-18 14:00 ` Alexey Gladkov
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=Y58mKmE9Km+NujDa@example.org \ --to=legion@kernel.org \ --cc=gregkh@linuxfoundation.org \ --cc=jirislaby@kernel.org \ --cc=kbd@lists.altlinux.org \ --cc=linux-kernel@vger.kernel.org \ --cc=samuel.thibault@ens-lyon.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
Linux console tools development discussion This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/kbd/0 kbd/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 kbd kbd/ http://lore.altlinux.org/kbd \ kbd@lists.altlinux.org kbd@lists.altlinux.ru kbd@lists.altlinux.com public-inbox-index kbd Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.kbd AGPL code for this site: git clone https://public-inbox.org/public-inbox.git