[CRIU] [PATCH 07/12] restore: map taks_args and thread_args earlier
Andrey Wagin
avagin at gmail.com
Tue Dec 18 13:49:24 EST 2012
2012/12/18 Pavel Emelyanov <xemul at parallels.com>:
> On 12/18/2012 10:36 AM, Andrey Vagin wrote:
>> A task_args saves a number of shared pending signals and
>> thread_args save a number of private pendign signals.
>>
>> All signal images should be read for determing a size of siginfo-s.
>
> And how does mapping a part of the restorer area help?
numbers of siginfo-s are saved in these structures.
>
>> Signed-off-by: Andrey Vagin <avagin at openvz.org>
>> ---
>> cr-restore.c | 20 ++++++++++++++++----
>> 1 file changed, 16 insertions(+), 4 deletions(-)
>>
>> diff --git a/cr-restore.c b/cr-restore.c
>> index cb4d943..1b39f97 100644
>> --- a/cr-restore.c
>> +++ b/cr-restore.c
>> @@ -1630,6 +1630,20 @@ static int sigreturn_restore(pid_t pid, CoreEntry *core)
>> current->nr_threads,
>> KBYTES(restore_thread_vma_len));
>>
>> + /* VMA we need to run task_restore code */
>> + mem = mmap(NULL,
>> + restore_task_vma_len + restore_thread_vma_len,
>> + PROT_READ | PROT_WRITE,
>> + MAP_PRIVATE | MAP_ANON, 0, 0);
>> + if (mem == MAP_FAILED) {
>> + pr_err("Can't mmap section for restore code\n");
>> + goto err;
>> + }
>> +
>> + memzero(mem, restore_task_vma_len + restore_thread_vma_len);
>> + task_args = mem;
>> + thread_args = mem + restore_task_vma_len;
>> +
>> restore_bootstrap_len = restorer_len +
>> restore_task_vma_len +
>> restore_thread_vma_len +
>> @@ -1673,16 +1687,14 @@ static int sigreturn_restore(pid_t pid, CoreEntry *core)
>> exec_mem_hint += restorer_len;
>>
>> /* VMA we need to run task_restore code */
>> - mem = mmap((void *)exec_mem_hint,
>> + mem = mremap(mem, restore_task_vma_len + restore_thread_vma_len,
>> restore_task_vma_len + restore_thread_vma_len,
>> - PROT_READ | PROT_WRITE,
>> - MAP_PRIVATE | MAP_ANON | MAP_FIXED, 0, 0);
>> + MREMAP_FIXED | MREMAP_MAYMOVE, (void *)exec_mem_hint);
>> if (mem != (void *)exec_mem_hint) {
>> pr_err("Can't mmap section for restore code\n");
>> goto err;
>> }
>>
>> - memzero(mem, restore_task_vma_len + restore_thread_vma_len);
>> task_args = mem;
>> thread_args = mem + restore_task_vma_len;
>>
>>
>
>
More information about the CRIU
mailing list