summaryrefslogtreecommitdiffstats
path: root/rtemsbsd/rtems/rtems-bsd-chunk.c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-11-25 12:51:56 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2015-01-21 15:00:19 +0100
commiteebe5762f49fac1cd626fc5cb271a382ad38d1d6 (patch)
tree7a791b0d665cacd06353b83b743d88ecc626685b /rtemsbsd/rtems/rtems-bsd-chunk.c
parentBUS_DMA(9): Support BUS_DMA_COHERENT (diff)
downloadrtems-libbsd-eebe5762f49fac1cd626fc5cb271a382ad38d1d6.tar.bz2
ZONE(9): Honor cache alignment
Diffstat (limited to 'rtemsbsd/rtems/rtems-bsd-chunk.c')
-rw-r--r--rtemsbsd/rtems/rtems-bsd-chunk.c11
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 *