Re: [openib-general] Re: [PATCH][RFC][0/4] InfiniBand userspace verbs implementation

Libor Michalek
2005-04-26T15:44:44Z

On Tue, Apr 26, 2005 at 08:31:32AM -0700, Roland Dreier wrote:
> Andrew> umm, how about we
>
> Andrew> - force the special pages into a separate vma
>
> Andrew> - run get_user_pages() against it all
>
> Andrew> - use RLIMIT_MEMLOCK accounting to check whether the user
> Andrew> is allowed to do this thing
>
> Andrew> - undo the RMLIMIT_MEMLOCK accounting in ->release
>
> Andrew> This will all interact with user-initiated mlock/munlock
> Andrew> in messy ways. Maybe a new kernel-internal vma->vm_flag
> Andrew> which works like VM_LOCKED but is unaffected by
> Andrew> mlock/munlock activity is needed.
>
> Andrew> A bit of generalisation in do_mlock() should suit?
>
> Yes, it seems that modifying do_mlock() to something like
>
> int do_mlock(unsigned long start, size_t len,
> unsigned int set, unsigned int clear)
>
> and then exporting a function along the lines of
>
> int do_mem_pin(unsigned long start, size_t len, int on)
>
> that sets/clears (VM_LOCKED_KERNEL | VM_DONTCOPY) according to the on
> flag.

Do you mean that the set/clear parameters to do_mlock() are the
actual flags which are set/cleared by the caller? Also, the issue
remains that the flags are not reference counted which is a problem
if you are dealing with overlapping memory region, or even if one
region ends and another begins on the same page. Since the desire is
to be able to pin any memory that a user can malloc this is a likely
scenario.

-Libor