[CRIU] [PATCH] pstree: Aligned pstree item allocation

Pavel Emelyanov xemul at virtuozzo.com
Wed Feb 1 06:12:37 PST 2017


On 01/28/2017 06:56 PM, Kirill Tkhai wrote:
> According to man futex(2):
> 
>     "On all platforms, futexes are four-byte integers
>      that must be aligned on a four-byte boundary".
> 
> So, allocate them aligned.
> 
> Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
> ---
>  criu/include/pstree.h |    9 +++++----
>  criu/pstree.c         |    1 +
>  2 files changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/criu/include/pstree.h b/criu/include/pstree.h
> index b4dc6b635..ee46a14db 100644
> --- a/criu/include/pstree.h
> +++ b/criu/include/pstree.h
> @@ -12,6 +12,11 @@
>   */
>  #define INIT_PID	(1)
>  struct pstree_item {
> +	union {
> +		/* Must be 4 bytes aligned */
> +		futex_t		task_st;
> +		unsigned long	task_st_le_bits;
> +	};

Ugh... Can't we make this more kernel-style? With the gcc attribute.

>  	struct pstree_item	*parent;
>  	struct list_head	children;	/* list of my children */
>  	struct list_head	sibling;	/* linkage in my parent's children list */
> @@ -25,10 +30,6 @@ struct pstree_item {
>  	struct pid		*threads;	/* array of threads */
>  	CoreEntry		**core;
>  	TaskKobjIdsEntry	*ids;
> -	union {
> -		futex_t		task_st;
> -		unsigned long	task_st_le_bits;
> -	};
>  };
>  
>  enum {
> diff --git a/criu/pstree.c b/criu/pstree.c
> index 8eeea947c..bee9c8917 100644
> --- a/criu/pstree.c
> +++ b/criu/pstree.c
> @@ -203,6 +203,7 @@ struct pstree_item *__alloc_pstree_item(bool rst)
>  			return NULL;
>  	} else {
>  		sz = sizeof(*item) + sizeof(struct rst_info);
> +		/* Guarantees sizeof(void *) alignment */
>  		item = shmalloc(sz);
>  		if (!item)
>  			return NULL;
> 
> .
> 



More information about the CRIU mailing list