Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 10 Jul 2020 12:06:18 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r363078 - head/sys/compat/linuxkpi/common/include/linux
Message-ID:  <202007101206.06AC6Iah011825@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Fri Jul 10 12:06:18 2020
New Revision: 363078
URL: https://svnweb.freebsd.org/changeset/base/363078

Log:
  Implement the bitmap_subset() function in the LinuxKPI. This function
  checks if the bitmap pointed to by the first argument is a subset of
  the bitmap pointed to by the second argument. The function returns one
  on success and zero on failure.
  
  MFC after:		1 week
  Sponsored by:		Mellanox Technologies

Modified:
  head/sys/compat/linuxkpi/common/include/linux/bitmap.h

Modified: head/sys/compat/linuxkpi/common/include/linux/bitmap.h
==============================================================================
--- head/sys/compat/linuxkpi/common/include/linux/bitmap.h	Fri Jul 10 11:27:54 2020	(r363077)
+++ head/sys/compat/linuxkpi/common/include/linux/bitmap.h	Fri Jul 10 12:06:18 2020	(r363078)
@@ -244,6 +244,28 @@ bitmap_equal(const unsigned long *pa,
 	return (1);
 }
 
+static inline int
+bitmap_subset(const unsigned long *pa,
+    const unsigned long *pb, unsigned size)
+{
+	const unsigned end = BIT_WORD(size);
+	const unsigned tail = size & (BITS_PER_LONG - 1);
+	unsigned i;
+
+	for (i = 0; i != end; i++) {
+		if (pa[i] & ~pb[i])
+			return (0);
+	}
+
+	if (tail) {
+		const unsigned long mask = BITMAP_LAST_WORD_MASK(tail);
+
+		if (pa[end] & ~pb[end] & mask)
+			return (0);
+	}
+	return (1);
+}
+
 static inline void
 bitmap_complement(unsigned long *dst, const unsigned long *src,
     const unsigned int size)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202007101206.06AC6Iah011825>