Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp4283918ybv; Mon, 10 Feb 2020 16:16:50 -0800 (PST) X-Google-Smtp-Source: APXvYqyi8PNa6Xc9rUItqCJcpqcaarKorXjQ9GvQH8uFWE5dmu8hlS/aGPz27/MvxVzcruwzZ2PA X-Received: by 2002:a9d:7695:: with SMTP id j21mr3224014otl.157.1581380210146; Mon, 10 Feb 2020 16:16:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581380210; cv=none; d=google.com; s=arc-20160816; b=yXAVD8k6YQLehYleLSvNqc/Gjbier8LZqxtyn4hzNajMqeowHgYZs/e+37FiRrNDyf nzIzxcS3TiQU9AH/MFVrKPMapyzYYKk+n1WOSCquu8AeydBRpjzGHme1R9Kt6sJsEgjs zge/JKx8w0fDzzR5PqBTqxhNn3eNsHEv0pvXec/olzhNcYBaDKZuxO203aigukyPJ8NL 3oaztXEWCg8htLg3Ztec1xy6xxPDnVzS7P17itOmDn0bHIk+FZJRianoz6E67KpglxaH Asy75Vl9QswxA1FMTIQ3T1yI1D7uRxDMd+ZyR2TuePm8whzozBwLvao5HfuZG7sV6HvZ zEPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:dkim-signature:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from; bh=5eZvoA5nW7X3dfTYOUjuH4An39unHi+TdehpbIAk1Fs=; b=q1hy7rZMfTP+/rnsgpfd8+2CYvLcp8jFs4SCT/ai4WilKEj6B+W8HhIt5x4SHptz5V K1ldAXTtvP9p5jjpwliObSvXsq6Ocwk9vK1wAaZo/ba+U3P6lcLBfFMOdlp5aJS6SEtl z0FzuUtOOgRsxSjtSwF1zXtRVtfQSLczvlc1n+LmKGfZ6whiuNOhD/NcV1vGgTvEO05k LKhrU+lXNpItI1tGYW54+DV2t3JB8w+VlQ7O5FWzlp8jUlunkr/1vzKw1q9ptVq2/Q8L LL7ugqhbRU5L9Al1agofqjyLq+lxCq9P+W5WvaIssPtje8sojKrC9T2byYdSkfn8kacT 5cCQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=rEwMQZWD; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d6si994327ote.72.2020.02.10.16.16.38; Mon, 10 Feb 2020 16:16:50 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=rEwMQZWD; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727858AbgBKAQO (ORCPT + 99 others); Mon, 10 Feb 2020 19:16:14 -0500 Received: from hqnvemgate25.nvidia.com ([216.228.121.64]:18837 "EHLO hqnvemgate25.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727671AbgBKAPm (ORCPT ); Mon, 10 Feb 2020 19:15:42 -0500 Received: from hqpgpgate102.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate25.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Mon, 10 Feb 2020 16:15:11 -0800 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate102.nvidia.com (PGP Universal service); Mon, 10 Feb 2020 16:15:38 -0800 X-PGP-Universal: processed; by hqpgpgate102.nvidia.com on Mon, 10 Feb 2020 16:15:38 -0800 Received: from HQMAIL101.nvidia.com (172.20.187.10) by HQMAIL111.nvidia.com (172.20.187.18) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Tue, 11 Feb 2020 00:15:37 +0000 Received: from hqnvemgw03.nvidia.com (10.124.88.68) by HQMAIL101.nvidia.com (172.20.187.10) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Tue, 11 Feb 2020 00:15:37 +0000 Received: from blueforge.nvidia.com (Not Verified[10.110.48.28]) by hqnvemgw03.nvidia.com with Trustwave SEG (v7,5,8,10121) id ; Mon, 10 Feb 2020 16:15:37 -0800 From: John Hubbard To: Andrew Morton CC: Al Viro , Christoph Hellwig , Dan Williams , Dave Chinner , Ira Weiny , Jan Kara , Jason Gunthorpe , Jonathan Corbet , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , "Kirill A . Shutemov" , Michal Hocko , Mike Kravetz , Shuah Khan , Vlastimil Babka , Matthew Wilcox , , , , , , LKML , John Hubbard , "Kirill A . Shutemov" Subject: [PATCH v6 01/12] mm/gup: split get_user_pages_remote() into two routines Date: Mon, 10 Feb 2020 16:15:25 -0800 Message-ID: <20200211001536.1027652-2-jhubbard@nvidia.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200211001536.1027652-1-jhubbard@nvidia.com> References: <20200211001536.1027652-1-jhubbard@nvidia.com> MIME-Version: 1.0 X-NVConfidentiality: public Content-Transfer-Encoding: quoted-printable Content-Type: text/plain DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1581380111; bh=5eZvoA5nW7X3dfTYOUjuH4An39unHi+TdehpbIAk1Fs=; h=X-PGP-Universal:From:To:CC:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:MIME-Version:X-NVConfidentiality: Content-Transfer-Encoding:Content-Type; b=rEwMQZWD05AgLngkWV8G2ETx/yHb6UdGrTfv3nnbDyQPaGfmTi+7zeEvuv2Xyql9H YVe0UlzbOsShgtrNYH8xNDp6KZOn+qVXqe4C/eKqH79BEf/nj3IjhdWBbCo5ZUn+Zd 92N9D+YbHepR0eMW3UFrgMr2R5h83A57cJI8vq1B2P0uerCeuMD34BA6991m2Sc3j1 WhpVeJkkGxAjYVhLllRp0a0aoqCVp8sZJpcoEgWmsbPhf4dF0Ii/j8mjaz7V0UfeXz MF7nH1wRbd8sZ/fcrsb1sUq5RqlA6/TlLJ+UWmGMykqPcOBKK0Sve1KvMQf34ediCD 8I2iLuJqzZIdA== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org An upcoming patch requires reusing the implementation of get_user_pages_remote(). Split up get_user_pages_remote() into an outer routine that checks flags, and an implementation routine that will be reused. This makes subsequent changes much easier to understand. There should be no change in behavior due to this patch. Acked-by: Kirill A. Shutemov Reviewed-by: Jan Kara Signed-off-by: John Hubbard --- mm/gup.c | 56 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/mm/gup.c b/mm/gup.c index 1b521e0ac1de..b699500da077 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -1557,6 +1557,37 @@ static __always_inline long __gup_longterm_locked(st= ruct task_struct *tsk, } #endif /* CONFIG_FS_DAX || CONFIG_CMA */ =20 +#ifdef CONFIG_MMU +static long __get_user_pages_remote(struct task_struct *tsk, + struct mm_struct *mm, + unsigned long start, unsigned long nr_pages, + unsigned int gup_flags, struct page **pages, + struct vm_area_struct **vmas, int *locked) +{ + /* + * Parts of FOLL_LONGTERM behavior are incompatible with + * FAULT_FLAG_ALLOW_RETRY because of the FS DAX check requirement on + * vmas. However, this only comes up if locked is set, and there are + * callers that do request FOLL_LONGTERM, but do not set locked. So, + * allow what we can. + */ + if (gup_flags & FOLL_LONGTERM) { + if (WARN_ON_ONCE(locked)) + return -EINVAL; + /* + * This will check the vmas (even if our vmas arg is NULL) + * and return -ENOTSUPP if DAX isn't allowed in this case: + */ + return __gup_longterm_locked(tsk, mm, start, nr_pages, pages, + vmas, gup_flags | FOLL_TOUCH | + FOLL_REMOTE); + } + + return __get_user_pages_locked(tsk, mm, start, nr_pages, pages, vmas, + locked, + gup_flags | FOLL_TOUCH | FOLL_REMOTE); +} + /* * get_user_pages_remote() - pin user pages in memory * @tsk: the task_struct to use for page fault accounting, or @@ -1619,7 +1650,6 @@ static __always_inline long __gup_longterm_locked(str= uct task_struct *tsk, * should use get_user_pages because it cannot pass * FAULT_FLAG_ALLOW_RETRY to handle_mm_fault. */ -#ifdef CONFIG_MMU long get_user_pages_remote(struct task_struct *tsk, struct mm_struct *mm, unsigned long start, unsigned long nr_pages, unsigned int gup_flags, struct page **pages, @@ -1632,28 +1662,8 @@ long get_user_pages_remote(struct task_struct *tsk, = struct mm_struct *mm, if (WARN_ON_ONCE(gup_flags & FOLL_PIN)) return -EINVAL; =20 - /* - * Parts of FOLL_LONGTERM behavior are incompatible with - * FAULT_FLAG_ALLOW_RETRY because of the FS DAX check requirement on - * vmas. However, this only comes up if locked is set, and there are - * callers that do request FOLL_LONGTERM, but do not set locked. So, - * allow what we can. - */ - if (gup_flags & FOLL_LONGTERM) { - if (WARN_ON_ONCE(locked)) - return -EINVAL; - /* - * This will check the vmas (even if our vmas arg is NULL) - * and return -ENOTSUPP if DAX isn't allowed in this case: - */ - return __gup_longterm_locked(tsk, mm, start, nr_pages, pages, - vmas, gup_flags | FOLL_TOUCH | - FOLL_REMOTE); - } - - return __get_user_pages_locked(tsk, mm, start, nr_pages, pages, vmas, - locked, - gup_flags | FOLL_TOUCH | FOLL_REMOTE); + return __get_user_pages_remote(tsk, mm, start, nr_pages, gup_flags, + pages, vmas, locked); } EXPORT_SYMBOL(get_user_pages_remote); =20 --=20 2.25.0