From: Michal Hocko <mhocko@kernel.org>
To: Lorenzo Stoakes <lstoakes@gmail.com>
Cc: linux-mm@kvack.org,
"Linus Torvalds" <torvalds@linux-foundation.org>,
"Jan Kara" <jack@suse.cz>, "Hugh Dickins" <hughd@google.com>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
"Rik van Riel" <riel@redhat.com>,
"Mel Gorman" <mgorman@techsingularity.net>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Radim Krčmář" <rkrcmar@redhat.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] mm: remove unnecessary __get_user_pages_unlocked() calls
Date: Wed, 26 Oct 2016 11:54:13 +0200 [thread overview]
Message-ID: <20161026095413.GF18382@dhcp22.suse.cz> (raw)
In-Reply-To: <20161026093913.GA12814@lucifer>
On Wed 26-10-16 10:39:13, Lorenzo Stoakes wrote:
> On Wed, Oct 26, 2016 at 11:15:43AM +0200, Michal Hocko wrote:
> > On Wed 26-10-16 00:46:31, Lorenzo Stoakes wrote:
> > > The holdout for unexporting __get_user_pages_unlocked() is its invocation in
> > > mm/process_vm_access.c: process_vm_rw_single_vec(), as this definitely _does_
> > > seem to invoke VM_FAULT_RETRY behaviour which get_user_pages_remote() will not
> > > trigger if we were to replace it with the latter.
> >
> > I am not sure I understand. Prior to 1e9877902dc7e this used
> > get_user_pages_unlocked. What prevents us from reintroducing it with
> > FOLL_REMOVE which was meant to be added by the above commit?
> >
> > Or am I missing your point?
>
> The issue isn't the flags being passed, rather that in this case:
>
> a. Replacing __get_user_pages_unlocked() with get_user_pages_unlocked() won't
> work as the latter assumes task = current and mm = current->mm but
> process_vm_rw_single_vec() needs to pass different task, mm.
Ohh, right. I should have checked more closely.
> b. Moving to get_user_pages_remote() _will_ allow us to pass different task, mm
> but won't however match existing behaviour precisely, since
> __get_user_pages_unlocked() acquires mmap_sem then passes a pointer to a
> local 'locked' variable to __get_user_pages_locked() which allows
> VM_FAULT_RETRY to trigger.
I do not see any reason why get_user_pages_remote should implicitely
disallow VM_FAULT_RETRY. Releasing the mmap_sem on a remote task when we
have to wait for IO is a good thing in general. So I would rather see a
way to do allow that. Doing that implicitly sounds too dangerous and
maybe we even have users which wouldn't cope with the mmap sem being
dropped (get_arg_page sounds like a potential example) so I would rather
add locked * parameter to get_user_pages_remote.
--
Michal Hocko
SUSE Labs
WARNING: multiple messages have this Message-ID (diff)
From: Michal Hocko <mhocko@kernel.org>
To: Lorenzo Stoakes <lstoakes@gmail.com>
Cc: linux-mm@kvack.org,
"Linus Torvalds" <torvalds@linux-foundation.org>,
"Jan Kara" <jack@suse.cz>, "Hugh Dickins" <hughd@google.com>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
"Rik van Riel" <riel@redhat.com>,
"Mel Gorman" <mgorman@techsingularity.net>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Radim Krčmář" <rkrcmar@redhat.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] mm: remove unnecessary __get_user_pages_unlocked() calls
Date: Wed, 26 Oct 2016 11:54:13 +0200 [thread overview]
Message-ID: <20161026095413.GF18382@dhcp22.suse.cz> (raw)
In-Reply-To: <20161026093913.GA12814@lucifer>
On Wed 26-10-16 10:39:13, Lorenzo Stoakes wrote:
> On Wed, Oct 26, 2016 at 11:15:43AM +0200, Michal Hocko wrote:
> > On Wed 26-10-16 00:46:31, Lorenzo Stoakes wrote:
> > > The holdout for unexporting __get_user_pages_unlocked() is its invocation in
> > > mm/process_vm_access.c: process_vm_rw_single_vec(), as this definitely _does_
> > > seem to invoke VM_FAULT_RETRY behaviour which get_user_pages_remote() will not
> > > trigger if we were to replace it with the latter.
> >
> > I am not sure I understand. Prior to 1e9877902dc7e this used
> > get_user_pages_unlocked. What prevents us from reintroducing it with
> > FOLL_REMOVE which was meant to be added by the above commit?
> >
> > Or am I missing your point?
>
> The issue isn't the flags being passed, rather that in this case:
>
> a. Replacing __get_user_pages_unlocked() with get_user_pages_unlocked() won't
> work as the latter assumes task = current and mm = current->mm but
> process_vm_rw_single_vec() needs to pass different task, mm.
Ohh, right. I should have checked more closely.
> b. Moving to get_user_pages_remote() _will_ allow us to pass different task, mm
> but won't however match existing behaviour precisely, since
> __get_user_pages_unlocked() acquires mmap_sem then passes a pointer to a
> local 'locked' variable to __get_user_pages_locked() which allows
> VM_FAULT_RETRY to trigger.
I do not see any reason why get_user_pages_remote should implicitely
disallow VM_FAULT_RETRY. Releasing the mmap_sem on a remote task when we
have to wait for IO is a good thing in general. So I would rather see a
way to do allow that. Doing that implicitly sounds too dangerous and
maybe we even have users which wouldn't cope with the mmap sem being
dropped (get_arg_page sounds like a potential example) so I would rather
add locked * parameter to get_user_pages_remote.
--
Michal Hocko
SUSE Labs
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2016-10-26 9:54 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-10-25 23:36 [PATCH] mm: remove unnecessary __get_user_pages_unlocked() calls Lorenzo Stoakes
2016-10-25 23:36 ` Lorenzo Stoakes
2016-10-25 23:46 ` Lorenzo Stoakes
2016-10-25 23:46 ` Lorenzo Stoakes
2016-10-26 9:15 ` Michal Hocko
2016-10-26 9:15 ` Michal Hocko
2016-10-26 9:39 ` Lorenzo Stoakes
2016-10-26 9:39 ` Lorenzo Stoakes
2016-10-26 9:54 ` Michal Hocko [this message]
2016-10-26 9:54 ` Michal Hocko
2016-10-26 7:59 ` Lorenzo Stoakes
2016-10-26 7:59 ` Lorenzo Stoakes
2016-10-26 9:07 ` Michal Hocko
2016-10-26 9:07 ` Michal Hocko
2016-10-26 9:12 ` Michal Hocko
2016-10-26 9:12 ` Michal Hocko
2016-10-26 9:25 ` [PATCH v2] " Lorenzo Stoakes
2016-10-26 9:25 ` Lorenzo Stoakes
2016-10-27 0:12 ` Andrew Morton
2016-10-27 0:12 ` Andrew Morton
2016-10-27 7:06 ` Lorenzo Stoakes
2016-10-27 7:06 ` Lorenzo Stoakes
2016-10-27 9:27 ` Paolo Bonzini
2016-10-27 9:27 ` Paolo Bonzini
2016-10-27 9:32 ` Lorenzo Stoakes
2016-10-27 9:32 ` Lorenzo Stoakes
2016-10-27 9:35 ` Paolo Bonzini
2016-10-27 9:35 ` Paolo Bonzini
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161026095413.GF18382@dhcp22.suse.cz \
--to=mhocko@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=dave.hansen@linux.intel.com \
--cc=hughd@google.com \
--cc=jack@suse.cz \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lstoakes@gmail.com \
--cc=mgorman@techsingularity.net \
--cc=pbonzini@redhat.com \
--cc=riel@redhat.com \
--cc=rkrcmar@redhat.com \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.