git: e8efee297c6d - main - radix_trie: avoid reloading radix node
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 23 Jun 2023 23:50:11 UTC
The branch main has been updated by dougm:
URL: https://cgit.FreeBSD.org/src/commit/?id=e8efee297c6db8b1adfa7e5a10cd5a340564cb7b
commit e8efee297c6db8b1adfa7e5a10cd5a340564cb7b
Author: Doug Moore <dougm@FreeBSD.org>
AuthorDate: 2023-06-23 23:47:23 +0000
Commit: Doug Moore <dougm@FreeBSD.org>
CommitDate: 2023-06-23 23:47:23 +0000
radix_trie: avoid reloading radix node
In the vm_radix:remove loop that searches for the last child, load
that child once, without loading it again after the search is over.
Change KASSERTS from index check to NULL node check.
Reviewed by: alc
Differential Revision: https://reviews.freebsd.org/D40721
---
sys/kern/subr_pctrie.c | 2 +-
sys/vm/vm_radix.c | 11 ++++++-----
2 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/sys/kern/subr_pctrie.c b/sys/kern/subr_pctrie.c
index d4262e32be51..043c31ad9501 100644
--- a/sys/kern/subr_pctrie.c
+++ b/sys/kern/subr_pctrie.c
@@ -749,7 +749,7 @@ pctrie_remove(struct pctrie *ptree, uint64_t index, pctrie_free_t freefn)
if (tmp != NULL)
break;
}
- KASSERT(i != PCTRIE_COUNT,
+ KASSERT(tmp != NULL,
("%s: invalid node configuration", __func__));
if (parent == NULL)
pctrie_root_store(ptree, tmp, PCTRIE_LOCKED);
diff --git a/sys/vm/vm_radix.c b/sys/vm/vm_radix.c
index 6848f0b2c30e..cc932a6cc80d 100644
--- a/sys/vm/vm_radix.c
+++ b/sys/vm/vm_radix.c
@@ -773,13 +773,14 @@ vm_radix_remove(struct vm_radix *rtree, vm_pindex_t index)
rnode->rn_count--;
if (rnode->rn_count > 1)
return (m);
- for (i = 0; i < VM_RADIX_COUNT; i++)
- if (vm_radix_node_load(&rnode->rn_child[i],
- LOCKED) != NULL)
+ for (i = 0; i < VM_RADIX_COUNT; i++) {
+ tmp = vm_radix_node_load(&rnode->rn_child[i],
+ LOCKED);
+ if (tmp != NULL)
break;
- KASSERT(i != VM_RADIX_COUNT,
+ }
+ KASSERT(tmp != NULL,
("%s: invalid node configuration", __func__));
- tmp = vm_radix_node_load(&rnode->rn_child[i], LOCKED);
if (parent == NULL)
vm_radix_root_store(rtree, tmp, LOCKED);
else {