Index: sys/kern/subr_pctrie.c =================================================================== --- sys/kern/subr_pctrie.c +++ sys/kern/subr_pctrie.c @@ -53,6 +53,7 @@ #include #include +#include #include #include #include /* smr.h depends on struct thread. */ @@ -265,15 +266,11 @@ static __inline uint16_t pctrie_keydiff(uint64_t index1, uint64_t index2) { - uint16_t clev; KASSERT(index1 != index2, ("%s: passing the same key value %jx", __func__, (uintmax_t)index1)); - index1 ^= index2; - for (clev = PCTRIE_LIMIT;; clev--) - if (pctrie_slot(index1, clev) != 0) - return (clev); + return ((flsll(index1 ^ index2) - 1) / PCTRIE_WIDTH); } /* Index: sys/vm/vm_radix.c =================================================================== --- sys/vm/vm_radix.c +++ sys/vm/vm_radix.c @@ -57,6 +57,7 @@ #include #include +#include #include #include #include @@ -291,15 +292,11 @@ static __inline uint16_t vm_radix_keydiff(vm_pindex_t index1, vm_pindex_t index2) { - uint16_t clev; KASSERT(index1 != index2, ("%s: passing the same key value %jx", __func__, (uintmax_t)index1)); - index1 ^= index2; - for (clev = VM_RADIX_LIMIT;; clev--) - if (vm_radix_slot(index1, clev) != 0) - return (clev); + return ((flsll(index1 ^ index2) - 1) / VM_RADIX_WIDTH); } /*