svn commit: r252652 - head/sys/arm/arm
Oleksandr Tymoshenko
gonzo at FreeBSD.org
Wed Jul 3 23:38:03 UTC 2013
Author: gonzo
Date: Wed Jul 3 23:38:02 2013
New Revision: 252652
URL: http://svnweb.freebsd.org/changeset/base/252652
Log:
Fix one of INVARIANTS-related UMA panics on ARM
Force UMA zone to allocate service structures like slabs using own
allocator. uma_debug code performs atomic ops on uma_slab_t fields
and safety of this operation is not guaranteed for write-back caches
Modified:
head/sys/arm/arm/busdma_machdep-v6.c
Modified: head/sys/arm/arm/busdma_machdep-v6.c
==============================================================================
--- head/sys/arm/arm/busdma_machdep-v6.c Wed Jul 3 23:29:40 2013 (r252651)
+++ head/sys/arm/arm/busdma_machdep-v6.c Wed Jul 3 23:38:02 2013 (r252652)
@@ -192,14 +192,26 @@ static busdma_bufalloc_t standard_alloca
static void
busdma_init(void *dummy)
{
+ int uma_flags;
+
+ uma_flags = 0;
/* Create a cache of buffers in standard (cacheable) memory. */
standard_allocator = busdma_bufalloc_create("buffer",
arm_dcache_align, /* minimum_alignment */
NULL, /* uma_alloc func */
NULL, /* uma_free func */
- 0); /* uma_zcreate_flags */
+ uma_flags); /* uma_zcreate_flags */
+#ifdef INVARIANTS
+ /*
+ * Force UMA zone to allocate service structures like
+ * slabs using own allocator. uma_debug code performs
+ * atomic ops on uma_slab_t fields and safety of this
+ * operation is not guaranteed for write-back caches
+ */
+ uma_flags = UMA_ZONE_OFFPAGE;
+#endif
/*
* Create a cache of buffers in uncacheable memory, to implement the
* BUS_DMA_COHERENT (and potentially BUS_DMA_NOCACHE) flag.
@@ -208,7 +220,7 @@ busdma_init(void *dummy)
arm_dcache_align, /* minimum_alignment */
busdma_bufalloc_alloc_uncacheable,
busdma_bufalloc_free_uncacheable,
- 0); /* uma_zcreate_flags */
+ uma_flags); /* uma_zcreate_flags */
}
/*
More information about the svn-src-head
mailing list