summaryrefslogtreecommitdiffstats
path: root/sys/vm
diff options
context:
space:
mode:
Diffstat (limited to 'sys/vm')
-rw-r--r--sys/vm/uma.h14
-rw-r--r--sys/vm/uma_core.c14
2 files changed, 26 insertions, 2 deletions
diff --git a/sys/vm/uma.h b/sys/vm/uma.h
index 0027177..c082e96 100644
--- a/sys/vm/uma.h
+++ b/sys/vm/uma.h
@@ -236,7 +236,7 @@ uma_zone_t uma_zsecond_create(char *name, uma_ctor ctor, uma_dtor dtor,
#define UMA_ALIGN_INT (sizeof(int) - 1) /* "" int */
#define UMA_ALIGN_SHORT (sizeof(short) - 1) /* "" short */
#define UMA_ALIGN_CHAR (sizeof(char) - 1) /* "" char */
-#define UMA_ALIGN_CACHE (16 - 1) /* Cache line size align */
+#define UMA_ALIGN_CACHE (0 - 1) /* Cache line size align */
/*
* Destroys an empty uma zone. If the zone is not empty uma complains loudly.
@@ -388,6 +388,18 @@ void uma_startup2(void);
void uma_reclaim(void);
/*
+ * Sets the alignment mask to be used for all zones requesting cache
+ * alignment. Should be called by MD boot code prior to starting VM/UMA.
+ *
+ * Arguments:
+ * align The alignment mask
+ *
+ * Returns:
+ * Nothing
+ */
+void uma_set_align(int align);
+
+/*
* Switches the backing object of a zone
*
* Arguments:
diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c
index fa2cb05..eb00bfe 100644
--- a/sys/vm/uma_core.c
+++ b/sys/vm/uma_core.c
@@ -111,6 +111,9 @@ static uma_zone_t slabrefzone; /* With refcounters (for UMA_ZONE_REFCNT) */
*/
static uma_zone_t hashzone;
+/* The boot-time adjusted value for cache line alignment. */
+static int uma_align_cache = 16 - 1;
+
static MALLOC_DEFINE(M_UMAHASH, "UMAHash", "UMA Hash Buckets");
/*
@@ -1707,13 +1710,22 @@ uma_kcreate(uma_zone_t zone, size_t size, uma_init uminit, uma_fini fini,
args.size = size;
args.uminit = uminit;
args.fini = fini;
- args.align = align;
+ args.align = (align == UMA_ALIGN_CACHE) ? uma_align_cache : align;
args.flags = flags;
args.zone = zone;
return (uma_zalloc_internal(kegs, &args, M_WAITOK));
}
/* See uma.h */
+void
+uma_set_align(int align)
+{
+
+ if (align != UMA_ALIGN_CACHE)
+ uma_align_cache = align;
+}
+
+/* See uma.h */
uma_zone_t
uma_zcreate(char *name, size_t size, uma_ctor ctor, uma_dtor dtor,
uma_init uminit, uma_fini fini, int align, u_int32_t flags)
OpenPOWER on IntegriCloud