diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-11-25 12:51:56 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2015-01-21 15:00:19 +0100 |
commit | eebe5762f49fac1cd626fc5cb271a382ad38d1d6 (patch) | |
tree | 7a791b0d665cacd06353b83b743d88ecc626685b /rtemsbsd | |
parent | BUS_DMA(9): Support BUS_DMA_COHERENT (diff) | |
download | rtems-libbsd-eebe5762f49fac1cd626fc5cb271a382ad38d1d6.tar.bz2 |
ZONE(9): Honor cache alignment
Diffstat (limited to 'rtemsbsd')
-rw-r--r-- | rtemsbsd/rtems/rtems-bsd-chunk.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/rtemsbsd/rtems/rtems-bsd-chunk.c b/rtemsbsd/rtems/rtems-bsd-chunk.c index c10c2205..f2a0bc8f 100644 --- a/rtemsbsd/rtems/rtems-bsd-chunk.c +++ b/rtemsbsd/rtems/rtems-bsd-chunk.c @@ -66,7 +66,12 @@ void rtems_bsd_chunk_init(rtems_bsd_chunk_control *self, uintptr_t info_size, rtems_bsd_chunk_info_ctor info_ctor, rtems_bsd_chunk_info_dtor info_dtor) { - info_size = roundup(info_size, CPU_HEAP_ALIGNMENT); + uintptr_t align = rtems_cache_get_data_line_size(); + + if (align < CPU_HEAP_ALIGNMENT) + align = CPU_HEAP_ALIGNMENT; + + info_size = roundup(info_size, align); self->info_size = info_size; self->info_ctor = info_ctor; @@ -77,7 +82,7 @@ rtems_bsd_chunk_init(rtems_bsd_chunk_control *self, uintptr_t info_size, void * rtems_bsd_chunk_alloc(rtems_bsd_chunk_control *self, uintptr_t chunk_size) { - char *p = malloc(chunk_size + self->info_size, M_TEMP, M_WAITOK); + char *p = rtems_cache_aligned_malloc(chunk_size + self->info_size); if (p != NULL) { rtems_bsd_chunk_info *info = (rtems_bsd_chunk_info *) p; @@ -110,7 +115,7 @@ rtems_bsd_chunk_free(rtems_bsd_chunk_control *self, (*self->info_dtor)(self, info); - free(info, M_TEMP); + free(info, M_RTEMS_HEAP); } rtems_bsd_chunk_info * |