git: 0d965bc03428 - main - subr_pctrie: improve iter nbr search
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 25 Oct 2024 22:01:57 UTC
The branch main has been updated by dougm:
URL: https://cgit.FreeBSD.org/src/commit/?id=0d965bc03428b66689d311fa4275868dfe27c82e
commit 0d965bc03428b66689d311fa4275868dfe27c82e
Author: Doug Moore <dougm@FreeBSD.org>
AuthorDate: 2024-10-25 22:00:31 +0000
Commit: Doug Moore <dougm@FreeBSD.org>
CommitDate: 2024-10-25 22:00:31 +0000
subr_pctrie: improve iter nbr search
pctrie_toval(node) can be applied to either a leaf or an internal
node; in the latter case it provides the address of the pn_owner
field. In a couple of places where a neighbor search is about to begin
for an iterator, the current code distinguishes the leaf and non-leaf
cases in a way that isn't really necessary. This change shrinks each
function by 16 bytes, and by a branch instruction.
Reviewed by: bnovkov
Differential Revision: https://reviews.freebsd.org/D47207
---
sys/kern/subr_pctrie.c | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/sys/kern/subr_pctrie.c b/sys/kern/subr_pctrie.c
index ea1c1cf881d2..e4865c602ce4 100644
--- a/sys/kern/subr_pctrie.c
+++ b/sys/kern/subr_pctrie.c
@@ -801,9 +801,7 @@ pctrie_iter_lookup_ge(struct pctrie_iter *it, uint64_t index)
* If no such node was found, and instead this path leads only to nodes
* < index, back up to find a subtrie with the least value > index.
*/
- if (pctrie_isleaf(node) ?
- (m = pctrie_toval(node)) == NULL || *m < index :
- node->pn_owner < index) {
+ if (node == PCTRIE_NULL || *pctrie_toval(node) < index) {
/* Climb the path to find a node with a descendant > index. */
while (it->top != 0) {
node = it->path[it->top - 1];
@@ -960,9 +958,7 @@ pctrie_iter_lookup_le(struct pctrie_iter *it, uint64_t index)
* If no such node was found, and instead this path leads only to nodes
* > index, back up to find a subtrie with the greatest value < index.
*/
- if (pctrie_isleaf(node) ?
- (m = pctrie_toval(node)) == NULL || *m > index :
- node->pn_owner > index) {
+ if (node == PCTRIE_NULL || *pctrie_toval(node) > index) {
/* Climb the path to find a node with a descendant < index. */
while (it->top != 0) {
node = it->path[it->top - 1];