Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp26188ybv; Tue, 4 Feb 2020 15:43:21 -0800 (PST) X-Google-Smtp-Source: APXvYqz4+pbIUi92X9QqouxiwNF3udc/aqIXb7kB93SqFs3TtsUxfwjOb6N7QS/xjppyMCo+yKRA X-Received: by 2002:a9d:53cb:: with SMTP id i11mr24455456oth.158.1580859801094; Tue, 04 Feb 2020 15:43:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580859801; cv=none; d=google.com; s=arc-20160816; b=aIeCDknY73kEyDjN2xsDddXbTP0hefYlftZImHo+uaDujGGmpEDaUqaWmfAfbp7gB2 WAGDL0rjd/KR0RvwrxkVO+Klj49zQPWeztSLIZD7u7DZ7+wQUhpgvNAr8hAYLLnNeIze p/xfVs60IGTOYgg7StBXUTIM9e8ylKqFQchr2FL2yvzYhhQhs6/jBiaz+6mYWVbAfKET WNlFL48gBic1Oqyt86bYwYtIAQ1uzg3sIj1pSXR1va41AnoJtrxaZmuT8H9B/BeBMRUN RCRZIF6boK9YpWMkYNe27egPAR1820y2jG4Nmwdcjoc6kvZkdvEnnP5LmUHEfbi3XjiA UNuA== 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=sZhZQbiC9I8GO8JF0aqKQNqzrcQku+nBhyG/L/eQWqWzvqa7yWgSLrQz4dqZkDrySt 0zc/yQ08h0pxjHxD786cPAlbB5EKGCI2qzHN0mITgzPQzUDb6hX4w3Byln9sDyngCDSw YDjTBV4zF3ckQuky9xaCZ/nwweYjFGyAeU/qIhfY4/nSBbuZ1rFOvAAfefDf6DNOHh/b XfIWBCM5Frr9WEayR3NO0ElyEgLkb5Xrh6U1PHp+30bozrunHc4FCBpSW/W+V2Yjf8Cb MHVPddy08CLoP7ldVMqtdi7+bkZGYWgfWgzsg8oOxrYX85P19nwUcAPsydt7rC/VAnDx SYYg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b="XeW/rqQk"; 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 d5si10742492oij.139.2020.02.04.15.43.09; Tue, 04 Feb 2020 15:43:21 -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="XeW/rqQk"; 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 S1727887AbgBDXl5 (ORCPT + 99 others); Tue, 4 Feb 2020 18:41:57 -0500 Received: from hqnvemgate24.nvidia.com ([216.228.121.143]:8901 "EHLO hqnvemgate24.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727729AbgBDXlY (ORCPT ); Tue, 4 Feb 2020 18:41:24 -0500 Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate24.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Tue, 04 Feb 2020 15:40:23 -0800 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Tue, 04 Feb 2020 15:41:20 -0800 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Tue, 04 Feb 2020 15:41:20 -0800 Received: from HQMAIL105.nvidia.com (172.20.187.12) by HQMAIL111.nvidia.com (172.20.187.18) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Tue, 4 Feb 2020 23:41:19 +0000 Received: from rnnvemgw01.nvidia.com (10.128.109.123) by HQMAIL105.nvidia.com (172.20.187.12) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Tue, 4 Feb 2020 23:41:19 +0000 Received: from blueforge.nvidia.com (Not Verified[10.110.48.28]) by rnnvemgw01.nvidia.com with Trustwave SEG (v7,5,8,10121) id ; Tue, 04 Feb 2020 15:41:18 -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 v4 02/12] mm/gup: split get_user_pages_remote() into two routines Date: Tue, 4 Feb 2020 15:41:07 -0800 Message-ID: <20200204234117.2974687-3-jhubbard@nvidia.com> X-Mailer: git-send-email 2.25.0 In-Reply-To: <20200204234117.2974687-1-jhubbard@nvidia.com> References: <20200204234117.2974687-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=1580859623; 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=XeW/rqQkwXtywsSBDjYabmhQ6QiQ3rTVpSSFkJ4HkWcJ77uw0/x7p4Ek+mB+Tn/f9 W3/SLncUw+aNRIDytW6zkUdQyqkp4YSQbRn5Hc5nrAnO2wPr+rZ4J/scNsUpHabK0+ JQdicag4Mrz44NCDbG23aKJJXm9/tWBxOLXSIRWkFa8MO6LKUmPWGiq776PXnCGf8L y8h7B1fu7R6mJR/Rm2Lqycg5czHeC0Wnvr37h8WdZxv8tzdEBCTtgFDLXoEayX/ItT 3qZYHEFJ2zcZXuNcu2AvedsRVZ0PUH1Z3q5YUFNbx8/1dvr4W/XWfwW3LfXuKdKiCG AZ0Lkj4eozEOg== 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