Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Aug 2021 01:54:53 GMT
From:      Alexander Motin <mav@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 696fca3fd491 - main - Optimize res_find().
Message-ID:  <202108090154.1791srNj025290@gitrepo.freebsd.org>

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

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

commit 696fca3fd491972e615195f2ce94598b9c469cac
Author:     Alexander Motin <mav@FreeBSD.org>
AuthorDate: 2021-08-09 01:34:33 +0000
Commit:     Alexander Motin <mav@FreeBSD.org>
CommitDate: 2021-08-09 01:54:49 +0000

    Optimize res_find().
    
    When the device name is provided, we can simply run strncmp() for each
    line to quickly skip unrelated ones, that is much faster than sscanf()
    and only then strcmp().
    
    MFC after:      2 weeks
---
 sys/kern/subr_hints.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/sys/kern/subr_hints.c b/sys/kern/subr_hints.c
index 3614659ebcf2..b16761d7d6fc 100644
--- a/sys/kern/subr_hints.c
+++ b/sys/kern/subr_hints.c
@@ -127,7 +127,7 @@ res_find(char **hintp_cookie, int *line, int *startln,
     const char **ret_name, int *ret_namelen, int *ret_unit,
     const char **ret_resname, int *ret_resnamelen, const char **ret_value)
 {
-	int fbacklvl = FBACK_MDENV, i = 0, n = 0;
+	int fbacklvl = FBACK_MDENV, i = 0, n = 0, namelen;
 	char r_name[32];
 	int r_unit;
 	char r_resname[32];
@@ -229,12 +229,16 @@ fallback:
 		i = 0;
 	}
 
+	if (name)
+		namelen = strlen(name);
 	cp = hintp;
 	while (cp) {
 		(*line)++;
 		if (strncmp(cp, "hint.", 5) != 0)
 			goto nexthint;
-		n = sscanf(cp, "hint.%32[^.].%d.%32[^=]=%127s", r_name, &r_unit,
+		if (name && strncmp(cp + 5, name, namelen) != 0)
+			goto nexthint;
+		n = sscanf(cp + 5, "%32[^.].%d.%32[^=]=%127s", r_name, &r_unit,
 		    r_resname, r_value);
 		if (n != 4) {
 			printf("CONFIG: invalid hint '%s'\n", cp);



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