svn commit: r347464 - head/sys/kern

Doug Moore dougm at FreeBSD.org
Fri May 10 19:55:30 UTC 2019


Author: dougm
Date: Fri May 10 19:55:29 2019
New Revision: 347464
URL: https://svnweb.freebsd.org/changeset/base/347464

Log:
  Replace the expression "-mask & ~mask" with a function call that does
  the same thing, but is commented so that it might be better
  understood.
  
  Approved by: kib (mentor)
  Differential Revision: https://reviews.freebsd.org/D20231

Modified:
  head/sys/kern/subr_blist.c

Modified: head/sys/kern/subr_blist.c
==============================================================================
--- head/sys/kern/subr_blist.c	Fri May 10 19:36:14 2019	(r347463)
+++ head/sys/kern/subr_blist.c	Fri May 10 19:55:29 2019	(r347464)
@@ -643,6 +643,19 @@ blst_next_leaf_alloc(blmeta_t *scan, daddr_t blk, int 
 }
 
 /*
+ * Given a bitmask, flip all the bits from the least-significant 1-bit to the
+ * most significant bit.  If the result is non-zero, then the least-significant
+ * 1-bit of the result is in the same position as the least-signification 0-bit
+ * in mask that is followed by a 1-bit.
+ */
+static inline u_daddr_t
+flip_hibits(u_daddr_t mask)
+{
+
+	return (-mask & ~mask);
+}
+
+/*
  * BLST_LEAF_ALLOC() -	allocate at a leaf in the radix tree (a bitmap).
  *
  *	This function is the core of the allocator.  Its execution time is
@@ -659,7 +672,7 @@ blst_leaf_alloc(blmeta_t *scan, daddr_t blk, int count
 	count1 = count - 1;
 	num_shifts = fls(count1);
 	mask = scan->bm_bitmap;
-	while ((-mask & ~mask) != 0 && num_shifts > 0) {
+	while (flip_hibits(mask) != 0 && num_shifts > 0) {
 		/*
 		 * If bit i is set in mask, then bits in [i, i+range1] are set
 		 * in scan->bm_bitmap.  The value of range1 is equal to count1


More information about the svn-src-head mailing list