svn commit: r358732 - head/sys/vm

Mark Johnston markj at FreeBSD.org
Sat Mar 7 15:37:25 UTC 2020


Author: markj
Date: Sat Mar  7 15:37:23 2020
New Revision: 358732
URL: https://svnweb.freebsd.org/changeset/base/358732

Log:
  Clean up uma_int.h a bit.
  
  This makes it easier to write libkvm programs that access UMA data
  structures.
  
  - Remove a couple of unused slab functions and make others local to
    uma_core.c.  Similarly move SLAB_BITSETS, which affects the layout of
    slab structures, to uma_core.c.
  - Stop defining the slab structures under _KERNEL.  There's no real
    reason they can't be visible to userspace like the rest of UMA's
    structures are.
  - Group KEG_ASSERT_COLD with other keg macros.
  - Convert an assertion about MAXMEMDOM to use _Static_assert.
  
  No functional change intended.
  
  Discussed with:	jeff
  Reviewed by:	rlibby
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D23980

Modified:
  head/sys/vm/uma_core.c
  head/sys/vm/uma_int.h

Modified: head/sys/vm/uma_core.c
==============================================================================
--- head/sys/vm/uma_core.c	Sat Mar  7 15:09:45 2020	(r358731)
+++ head/sys/vm/uma_core.c	Sat Mar  7 15:37:23 2020	(r358732)
@@ -117,6 +117,16 @@ static uma_zone_t kegs;
 static uma_zone_t zones;
 
 /*
+ * On INVARIANTS builds, the slab contains a second bitset of the same size,
+ * "dbg_bits", which is laid out immediately after us_free.
+ */
+#ifdef INVARIANTS
+#define	SLAB_BITSETS	2
+#else
+#define	SLAB_BITSETS	1
+#endif
+
+/*
  * These are the two zones from which all offpage uma_slab_ts are allocated.
  *
  * One zone is for slab headers that can represent a larger number of items,
@@ -1898,7 +1908,7 @@ zero_init(void *mem, int size, int flags)
 }
 
 #ifdef INVARIANTS
-struct noslabbits *
+static struct noslabbits *
 slab_dbg_bits(uma_slab_t slab, uma_keg_t keg)
 {
 
@@ -1909,7 +1919,7 @@ slab_dbg_bits(uma_slab_t slab, uma_keg_t keg)
 /*
  * Actual size of embedded struct slab (!OFFPAGE).
  */
-size_t
+static size_t
 slab_sizeof(int nitems)
 {
 	size_t s;
@@ -1918,15 +1928,6 @@ slab_sizeof(int nitems)
 	return (roundup(s, UMA_ALIGN_PTR + 1));
 }
 
-/*
- * Size of memory for embedded slabs (!OFFPAGE).
- */
-size_t
-slab_space(int nitems)
-{
-	return (UMA_SLAB_SIZE - slab_sizeof(nitems));
-}
-
 #define	UMA_FIXPT_SHIFT	31
 #define	UMA_FRAC_FIXPT(n, d)						\
 	((uint32_t)(((uint64_t)(n) << UMA_FIXPT_SHIFT) / (d)))
@@ -1965,18 +1966,6 @@ slab_ipers_hdr(u_int size, u_int rsize, u_int slabsize
 	}
 
 	return (ipers);
-}
-
-/*
- * Compute the number of items that will fit in a slab for a startup zone.
- */
-int
-slab_ipers(size_t size, int align)
-{
-	int rsize;
-
-	rsize = roundup(size, align + 1); /* Assume no CACHESPREAD */
-	return (slab_ipers_hdr(size, rsize, UMA_SLAB_SIZE, true));
 }
 
 struct keg_layout_result {

Modified: head/sys/vm/uma_int.h
==============================================================================
--- head/sys/vm/uma_int.h	Sat Mar  7 15:09:45 2020	(r358731)
+++ head/sys/vm/uma_int.h	Sat Mar  7 15:37:23 2020	(r358732)
@@ -368,11 +368,6 @@ struct uma_keg {
 };
 typedef struct uma_keg	* uma_keg_t;
 
-#ifdef _KERNEL
-#define	KEG_ASSERT_COLD(k)						\
-	KASSERT(uma_keg_get_allocs((k)) == 0,				\
-	    ("keg %s initialization after use.", (k)->uk_name))
-
 /*
  * Free bits per-slab.
  */
@@ -391,30 +386,14 @@ struct uma_slab {
 	uint8_t		us_domain;		/* Backing NUMA domain. */
 	struct noslabbits us_free;		/* Free bitmask, flexible. */
 };
-_Static_assert(sizeof(struct uma_slab) == offsetof(struct uma_slab, us_free),
+_Static_assert(sizeof(struct uma_slab) == __offsetof(struct uma_slab, us_free),
     "us_free field must be last");
-#if MAXMEMDOM >= 255
-#error "Slab domain type insufficient"
-#endif
+_Static_assert(MAXMEMDOM < 255,
+    "us_domain field is not wide enough");
 
 typedef struct uma_slab * uma_slab_t;
 
 /*
- * On INVARIANTS builds, the slab contains a second bitset of the same size,
- * "dbg_bits", which is laid out immediately after us_free.
- */
-#ifdef INVARIANTS
-#define	SLAB_BITSETS	2
-#else
-#define	SLAB_BITSETS	1
-#endif
-
-/* These three functions are for embedded (!OFFPAGE) use only. */
-size_t slab_sizeof(int nitems);
-size_t slab_space(int nitems);
-int slab_ipers(size_t size, int align);
-
-/*
  * Slab structure with a full sized bitset and hash link for both
  * HASH and OFFPAGE zones.
  */
@@ -460,7 +439,6 @@ slab_item_index(uma_slab_t slab, uma_keg_t keg, void *
 	data = (uintptr_t)slab_data(slab, keg);
 	return (((uintptr_t)item - data) / keg->uk_rsize);
 }
-#endif /* _KERNEL */
 
 STAILQ_HEAD(uma_bucketlist, uma_bucket);
 
@@ -578,6 +556,10 @@ static __inline uma_slab_t hash_sfind(struct uma_hash 
 	KASSERT((void *)(keg) != NULL,				\
 	    ("%s: Invalid zone %p type", __func__, (zone)));	\
 	} while (0)
+
+#define	KEG_ASSERT_COLD(k)						\
+	KASSERT(uma_keg_get_allocs((k)) == 0,				\
+	    ("keg %s initialization after use.", (k)->uk_name))
 
 /* Domains are contiguous after the last CPU */
 #define	ZDOM_GET(z, n)							\


More information about the svn-src-all mailing list