The branch main has been updated by mav:

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

commit 7835b2cb4a1ae57f403739a2f1076ec7188f18c9
Author:     Alexander Motin <m...@freebsd.org>
AuthorDate: 2021-10-05 18:42:47 +0000
Commit:     Alexander Motin <m...@freebsd.org>
CommitDate: 2021-10-05 18:47:38 +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.
---
 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);
 }
 

Reply via email to