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
This commit is contained in:
parent
df5c65e22a
commit
64cf3edab8
@ -192,14 +192,26 @@ static busdma_bufalloc_t standard_allocator; /* Cache of standard buffers */
|
||||
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 */
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user