Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 21 Oct 2021 22:31:32 GMT
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: fa226878a553 - stable/13 - sbuf(9): Microoptimize sbuf_put_byte()
Message-ID:  <202110212231.19LMVWff018757@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by mav:

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

commit fa226878a5532e79acb373e1201f92e0114428e6
Author:     Alexander Motin <mav@FreeBSD.org>
AuthorDate: 2021-10-05 18:42:47 +0000
Commit:     Alexander Motin <mav@FreeBSD.org>
CommitDate: 2021-10-21 22:24:29 +0000

    sbuf(9): Microoptimize sbuf_put_byte()
    
    This function is actively used by sbuf_vprintf(), so this simple
    inlining in half reduces time of kern.geom.confxml generation.
    
    MFC after:      2 weeks
    Sponsored by:   iXsystem, Inc.
    
    (cherry picked from commit 7835b2cb4a1ae57f403739a2f1076ec7188f18c9)
---
 sys/kern/subr_sbuf.c | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/sys/kern/subr_sbuf.c b/sys/kern/subr_sbuf.c
index b7f135e81206..6c533f36c82e 100644
--- a/sys/kern/subr_sbuf.c
+++ b/sys/kern/subr_sbuf.c
@@ -480,7 +480,26 @@ static void
 sbuf_put_byte(struct sbuf *s, char c)
 {
 
-	sbuf_put_bytes(s, &c, 1);
+	assert_sbuf_integrity(s);
+	assert_sbuf_state(s, 0);
+
+	if (__predict_false(s->s_error != 0))
+		return;
+	if (__predict_false(SBUF_FREESPACE(s) <= 0)) {
+		/*
+		 * If there is a drain, use it, otherwise extend the
+		 * buffer.
+		 */
+		if (s->s_drain_func != NULL)
+			(void)sbuf_drain(s);
+		else if (sbuf_extend(s, 1) < 0)
+			s->s_error = ENOMEM;
+		if (s->s_error != 0)
+			return;
+	}
+	s->s_buf[s->s_len++] = c;
+	if (SBUF_ISSECTION(s))
+		s->s_sect_len++;
 }
 
 /*
@@ -623,7 +642,7 @@ static void
 sbuf_putc_func(int c, void *arg)
 {
 
-	if (c != '\0')
+	if (__predict_true(c != '\0'))
 		sbuf_put_byte(arg, c);
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202110212231.19LMVWff018757>