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

Kirill Tkhai ktkhai at virtuozzo.com
Tue Jan 31 00:58:13 PST 2017


On 30.01.2017 23:45, Andrei Vagin wrote:
> On Sat, Jan 28, 2017 at 06:56:21PM +0300, 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.
> 
> Why is it not aligned without this patch?

This patch points that in clear way!

>>
>> 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;
>> +	};
>>  	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;
>>
>> _______________________________________________
>> CRIU mailing list
>> CRIU at openvz.org
>> https://lists.openvz.org/mailman/listinfo/criu


More information about the CRIU mailing list