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-all mailing list