* Laurent Dufour <lduf...@linux.vnet.ibm.com> wrote:

> +{
> +     unsigned long vdso_end, vdso_start;
> +
> +     if (!mm->context.vdso_base)
> +             return;
> +     vdso_start = mm->context.vdso_base;
> +
> +#ifdef CONFIG_PPC64
> +     /* Calling is_32bit_task() implies that we are dealing with the
> +      * current process memory. If there is a call path where mm is not
> +      * owned by the current task, then we'll have need to store the
> +      * vDSO size in the mm->context.
> +      */
> +     BUG_ON(current->mm != mm);
> +     if (is_32bit_task())
> +             vdso_end = vdso_start + (vdso32_pages << PAGE_SHIFT);
> +     else
> +             vdso_end = vdso_start + (vdso64_pages << PAGE_SHIFT);
> +#else
> +     vdso_end = vdso_start + (vdso32_pages << PAGE_SHIFT);
> +#endif
> +     vdso_end += (1<<PAGE_SHIFT); /* data page */
> +
> +     /* Check if the vDSO is in the range of the remapped area */
> +     if ((vdso_start <= old_start && old_start < vdso_end) ||
> +         (vdso_start < old_end && old_end <= vdso_end)  ||
> +         (old_start <= vdso_start && vdso_start < old_end)) {
> +             /* Update vdso_base if the vDSO is entirely moved. */
> +             if (old_start == vdso_start && old_end == vdso_end &&
> +                 (old_end - old_start) == (new_end - new_start))
> +                     mm->context.vdso_base = new_start;
> +             else
> +                     mm->context.vdso_base = 0;
> +     }
> +}

Oh my, that really looks awfully complex, as you predicted, and right 
in every mremap() call.

I'm fine with your original, imperfect, KISS approach. Sorry about 
this detour ...

Reviewed-by: Ingo Molnar <mi...@kernel.org>

Thanks,

        Ingo

------------------------------------------------------------------------------
Dive into the World of Parallel Programming The Go Parallel Website, sponsored
by Intel and developed in partnership with Slashdot Media, is your hub for all
things parallel software development, from weekly thought leadership blogs to
news, videos, case studies, tutorials and more. Take a look and join the 
conversation now. http://goparallel.sourceforge.net/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

Reply via email to