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)                                                  
\
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to