Commit caec8926 authored by Andrew Vagin's avatar Andrew Vagin Committed by Pavel Emelyanov

util: return aligned pointers from shmalloc()

Atomic operations doesn't work for non-aligned pointers.

=[log]=> dump/zdtm/static/autofs/30/2/restore.log
------------------------ grep Error ------------------------
(00.185037)      5: Error (/root/git/criu/criu/include/lock.h:78): BUG at /root/git/criu/criu/include/lock.h:78
(00.207193) Error (cr-restore.c:1407): 100 killed by signal 9: Killed
(00.219187) Error (cr-restore.c:2237): Restoring FAILED.
------------------------ ERROR OVER ------------------------

4339  futex(0x7fa79c1561da, FUTEX_WAKE, 2147483647 <unfinished ...>
4339  <... futex resumed> )             = -1 EINVAL (Invalid argument)
Signed-off-by: 's avatarAndrew Vagin <avagin@virtuozzo.com>
Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
parent 52fe2af2
...@@ -124,15 +124,22 @@ void rst_mem_switch_to_private(void) ...@@ -124,15 +124,22 @@ void rst_mem_switch_to_private(void)
rst_mems[RM_PRIVATE].enabled = true; rst_mems[RM_PRIVATE].enabled = true;
} }
unsigned long rst_mem_align_cpos(int type) void rst_mem_align(int type)
{ {
struct rst_mem_type_s *t = &rst_mems[type]; struct rst_mem_type_s *t = &rst_mems[type];
BUG_ON(!t->remapable || !t->enabled);
void *ptr; void *ptr;
ptr = (void *) round_up((unsigned long)t->free_mem, sizeof(void *)); ptr = (void *) round_up((unsigned long)t->free_mem, sizeof(void *));
t->free_bytes -= (ptr - t->free_mem); t->free_bytes -= (ptr - t->free_mem);
t->free_mem = ptr; t->free_mem = ptr;
}
unsigned long rst_mem_align_cpos(int type)
{
struct rst_mem_type_s *t = &rst_mems[type];
BUG_ON(!t->remapable || !t->enabled);
rst_mem_align(type);
return t->free_mem - t->buf; return t->free_mem - t->buf;
} }
......
...@@ -560,6 +560,7 @@ int is_anon_link_type(char *link, char *type) ...@@ -560,6 +560,7 @@ int is_anon_link_type(char *link, char *type)
void *shmalloc(size_t bytes) void *shmalloc(size_t bytes)
{ {
rst_mem_align(RM_SHARED);
return rst_mem_alloc(bytes, RM_SHARED); return rst_mem_alloc(bytes, RM_SHARED);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment