lkml.org 
[lkml]   [2014]   [Oct]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 2/4] mm: gup: add get_user_pages_locked and get_user_pages_unlocked
    On Wed, Oct 01, 2014 at 10:56:35AM +0200, Andrea Arcangeli wrote:

    > +static inline long __get_user_pages_locked(struct task_struct *tsk,
    > + struct mm_struct *mm,
    > + unsigned long start,
    > + unsigned long nr_pages,
    > + int write, int force,
    > + struct page **pages,
    > + struct vm_area_struct **vmas,
    > + int *locked,
    > + bool notify_drop)
    > +{

    > + if (notify_drop && lock_dropped && *locked) {
    > + /*
    > + * We must let the caller know we temporarily dropped the lock
    > + * and so the critical section protected by it was lost.
    > + */
    > + up_read(&mm->mmap_sem);
    > + *locked = 0;
    > + }
    > + return pages_done;
    > +}

    > +long get_user_pages_locked(struct task_struct *tsk, struct mm_struct *mm,
    > + unsigned long start, unsigned long nr_pages,
    > + int write, int force, struct page **pages,
    > + int *locked)
    > +{
    > + return __get_user_pages_locked(tsk, mm, start, nr_pages, write, force,
    > + pages, NULL, locked, true);
    > +}

    > +long get_user_pages_unlocked(struct task_struct *tsk, struct mm_struct *mm,
    > + unsigned long start, unsigned long nr_pages,
    > + int write, int force, struct page **pages)
    > +{
    > + long ret;
    > + int locked = 1;
    > + down_read(&mm->mmap_sem);
    > + ret = __get_user_pages_locked(tsk, mm, start, nr_pages, write, force,
    > + pages, NULL, &locked, false);
    > + if (locked)
    > + up_read(&mm->mmap_sem);
    > + return ret;
    > +}

    > long get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
    > unsigned long start, unsigned long nr_pages, int write,
    > int force, struct page **pages, struct vm_area_struct **vmas)
    > {
    > + return __get_user_pages_locked(tsk, mm, start, nr_pages, write, force,
    > + pages, vmas, NULL, false);
    > }

    I'm wondering about that notify_drop parameter, what's the added
    benefit? If you look at these 3 callers we can do away with it, since in
    the second called where we have locked but !notify_drop we seem to do
    the exact same thing afterwards anyway.


    \
     
     \ /
      Last update: 2014-10-09 13:21    [W:3.206 / U:0.624 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site