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"