git: 1912d2b15e6d - main - vt: parse_font_info_static should set refcount, not parse_font_info

Toomas Soome tsoome at FreeBSD.org
Mon Feb 1 22:34:35 UTC 2021


The branch main has been updated by tsoome:

URL: https://cgit.FreeBSD.org/src/commit/?id=1912d2b15e6d6f4a1d8c3886b03ab30d2f21f3fd

commit 1912d2b15e6d6f4a1d8c3886b03ab30d2f21f3fd
Author:     Toomas Soome <tsoome at FreeBSD.org>
AuthorDate: 2021-01-31 21:04:59 +0000
Commit:     Toomas Soome <tsoome at FreeBSD.org>
CommitDate: 2021-02-01 22:33:58 +0000

    vt: parse_font_info_static should set refcount, not parse_font_info
    
    As we get started with no memory allocator, we set up static font data
    for font passed by loader (if there is any). At this time, we also must
    set refcount 1, and refcount will get incremented in cnprobe() callback.
    
    At some point the memory allocator will be available, and we will set up
    properly allocated font data, but we should not disturb the refcount.
    
    PR: 253147
---
 sys/dev/vt/vt_core.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/sys/dev/vt/vt_core.c b/sys/dev/vt/vt_core.c
index ac89d8635e78..05c383829f49 100644
--- a/sys/dev/vt/vt_core.c
+++ b/sys/dev/vt/vt_core.c
@@ -1487,6 +1487,8 @@ parse_font_info_static(struct font_info *fi)
 	vfp = &vt_font_loader;
 	vfp->vf_height = fi->fi_height;
 	vfp->vf_width = fi->fi_width;
+	/* This is default font, set refcount 1 to disable removal. */
+	vfp->vf_refcount = 1;
 	for (unsigned i = 0; i < VFNT_MAPS; i++) {
 		if (fi->fi_map_count[i] == 0)
 			continue;
@@ -1499,6 +1501,12 @@ parse_font_info_static(struct font_info *fi)
 	return (vfp);
 }
 
+/*
+ * Set up default font with allocated data structures.
+ * However, we can not set refcount here, because it is already set and
+ * incremented in vtterm_cnprobe() to avoid being released by font load from
+ * userland.
+ */
 static struct vt_font *
 parse_font_info(struct font_info *fi)
 {
@@ -1528,8 +1536,6 @@ parse_font_info(struct font_info *fi)
 	ptr = roundup2(ptr, 8);
 
 	vfp = &vt_font_loader;
-	/* This is default font, set refcount 1 to disable removal. */
-	vfp->vf_refcount = 1;
 	vfp->vf_height = fi->fi_height;
 	vfp->vf_width = fi->fi_width;
 	for (unsigned i = 0; i < VFNT_MAPS; i++) {


More information about the dev-commits-src-all mailing list