[PATCH 2/2] rtems: Relax partition buffer area alignment

Sebastian Huber sebastian.huber at embedded-brains.de
Thu Aug 2 12:55:18 UTC 2018


The partition buffer area alignment required by rtems_partition_create()
was too strict since it was checked via _Addresses_Is_aligned() which
uses CPU_ALIGNMENT.  The CPU_ALIGNMENT must take long double and vector
data type alignment requirements into account.  For the partition
maintenance only pointer alignment is required (Chain_Node, which
consists of two pointers). The user should ensure that its partition
buffer area is suitable for the items it wants to manage.  The user
should not be burdened to provide buffers with the maximum architecture
alignment, e.g. why need a 16 byte aligned buffer if you want to manage
items with 4 byte integers only?

Update #3482.
---
 cpukit/rtems/src/partcreate.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/cpukit/rtems/src/partcreate.c b/cpukit/rtems/src/partcreate.c
index c058adff1f..9484ccb1c3 100644
--- a/cpukit/rtems/src/partcreate.c
+++ b/cpukit/rtems/src/partcreate.c
@@ -68,8 +68,8 @@ rtems_status_code rtems_partition_create(
          !_Partition_Is_buffer_size_aligned( buffer_size ) )
     return RTEMS_INVALID_SIZE;
 
-  if ( !_Addresses_Is_aligned( starting_address ) )
-     return RTEMS_INVALID_ADDRESS;
+  if ( !_Partition_Is_buffer_area_aligned( starting_address ) )
+    return RTEMS_INVALID_ADDRESS;
 
 #if defined(RTEMS_MULTIPROCESSING)
   if ( _Attributes_Is_global( attribute_set ) &&
-- 
2.13.7




More information about the devel mailing list