[rtems-libbsd commit] ZONE(9): Honor cache alignment

Sebastian Huber sebh at rtems.org
Wed Jan 21 14:02:59 UTC 2015


Module:    rtems-libbsd
Branch:    master
Commit:    eebe5762f49fac1cd626fc5cb271a382ad38d1d6
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=eebe5762f49fac1cd626fc5cb271a382ad38d1d6

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Nov 25 12:51:56 2014 +0100

ZONE(9): Honor cache alignment

---

 rtemsbsd/rtems/rtems-bsd-chunk.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/rtemsbsd/rtems/rtems-bsd-chunk.c b/rtemsbsd/rtems/rtems-bsd-chunk.c
index c10c220..f2a0bc8 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 *




More information about the vc mailing list