[PATCH v1 1/7] rtembsd: Fix alignment of allocations for 64bit

Kinsey Moore kinsey.moore at oarcorp.com
Tue Mar 9 02:21:29 UTC 2021


The patch to the if_cgem driver is actually a modified (to LibBSD style) backport of the
64bit cgem patch that's in 13. FreeBSD doesn't appear to care about ILP32 and that is
the majority of functional difference between the upstream and what is being applied
here.

Kinsey

-----Original Message-----
From: Chris Johns <chrisj at rtems.org> 
Sent: Monday, March 8, 2021 20:04
To: Kinsey Moore <kinsey.moore at oarcorp.com>; devel at rtems.org
Subject: Re: [PATCH v1 1/7] rtembsd: Fix alignment of allocations for 64bit

OK for 1 to 7 from me.

In regards to the if_ cgem driver, will any be posted up stream?

Chris

On 9/3/21 10:27 am, Kinsey Moore wrote:
> Alignment on 64bit hardware is strict in comparison to running in an
> emulator. This resolves an alignment exception when allocating memory on
> real hardware.
> ---
>  rtemsbsd/rtems/rtems-program.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/rtemsbsd/rtems/rtems-program.c b/rtemsbsd/rtems/rtems-program.c
> index 204ed248..370609d4 100644
> --- a/rtemsbsd/rtems/rtems-program.c
> +++ b/rtemsbsd/rtems/rtems-program.c
> @@ -479,12 +479,13 @@ rtems_bsd_program_alloc(size_t size, void *org_ptr)
>  	void *ptr = NULL;
>  	size_t size_with_list;
>  	size_t size_alligned;
> +	size_t alignment = sizeof(void*);
>  
>  	if (prog_ctrl != NULL) {
>  		/* align the end to the next word address */
>  		size_alligned = size;
> -		if ((size_alligned & 0x3) != 0) {
> -			size_alligned = (size_alligned | 0x03) + 1;
> +		if ((size_alligned & (alignment - 1)) != 0) {
> +			size_alligned = (size_alligned | (alignment - 1)) + 1;
>  		}
>  		size_with_list = size_alligned +
>  		    sizeof(struct program_allocmem_item);
> 


More information about the devel mailing list