git: 996fa9fb4ec4 - main - kern/rman: update rman_make_alignment_flags()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 21 May 2024 23:56:23 UTC
The branch main has been updated by imp:
URL: https://cgit.FreeBSD.org/src/commit/?id=996fa9fb4ec47995e89d2089e6084d37dcb1033c
commit 996fa9fb4ec47995e89d2089e6084d37dcb1033c
Author: Elliott Mitchell <ehem+freebsd@m5p.com>
AuthorDate: 2024-05-09 04:47:09 +0000
Commit: Warner Losh <imp@FreeBSD.org>
CommitDate: 2024-05-21 23:52:27 +0000
kern/rman: update rman_make_alignment_flags()
The flsl() function makes use of hardware functionality to compute the
value faster than this loop. The only deviation from flsl() is at 0.
Reviewed by: imp,jhb
Pull Request: https://github.com/freebsd/freebsd-src/pull/1224
---
sys/kern/subr_rman.c | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/sys/kern/subr_rman.c b/sys/kern/subr_rman.c
index 2019e19090c0..508152f74002 100644
--- a/sys/kern/subr_rman.c
+++ b/sys/kern/subr_rman.c
@@ -776,19 +776,14 @@ rman_release_resource(struct resource *re)
uint32_t
rman_make_alignment_flags(uint32_t size)
{
- int i;
/*
* Find the hightest bit set, and add one if more than one bit
* set. We're effectively computing the ceil(log2(size)) here.
*/
- for (i = 31; i > 0; i--)
- if ((1 << i) & size)
- break;
- if (~(1 << i) & size)
- i++;
-
- return(RF_ALIGNMENT_LOG2(i));
+ if (__predict_false(size == 0))
+ return (0);
+ return (RF_ALIGNMENT_LOG2(flsl(size - 1)));
}
rman_res_t