From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id BDB9DC433FE for ; Wed, 16 Nov 2022 22:11:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3D78F6B0078; Wed, 16 Nov 2022 17:11:18 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 360286B007B; Wed, 16 Nov 2022 17:11:18 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1B2F98E0001; Wed, 16 Nov 2022 17:11:18 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 056FC6B0078 for ; Wed, 16 Nov 2022 17:11:18 -0500 (EST) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id C3B581406E7 for ; Wed, 16 Nov 2022 22:11:17 +0000 (UTC) X-FDA: 80140702194.02.A2E2CFA Received: from NAM12-DM6-obe.outbound.protection.outlook.com (mail-dm6nam12on2071.outbound.protection.outlook.com [40.107.243.71]) by imf25.hostedemail.com (Postfix) with ESMTP id 30D30A0009 for ; Wed, 16 Nov 2022 22:11:16 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nvu0nDS/a0lszAfR3Lrq3rhCAteobst4nkjGLh2fXVtnWGoEOGRtEPBltFBFLWGo20PccwocjQHqrw3jwL3DCawf3TZOKNn++olEXu87Pi3n2lPvDEedE3muR5tvjT5cPZGzF11Lbwb6zLZbB0zkufFStr09zA8ZaSwSfgFQq/4lVCIMH2/fbpSZicitMDRq3cOq2ncLym8cPcEH4DazBkbnGTnxx+pTNicZyEtoftKxoZlOM1kv1I/nqH/qvZqDvlRM5CnIZE3FSLX3J0E+3y6PHWZZuEugtkxsxNb+3DIPCjdC8DYeSWdGQ9yoRRoMx/QEie5o9fUa9O362crlGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=jwhEgVQg1k9kYi7U93RvrWtrvTgP/sMSm+nlsVgnpg4=; b=bxcvsjr57JQT4Xlq27gA/sx3AenadnSyOVmu/oB5lVYcvyXBdBryG795LXqLVJGDPD6/YC7A70QCuD+B+tZjWMq2AjRDCNvccukPwTsRjNroCZnq5jijJCPk5OM2KzPD8rXztyFYb0EkRMCZnSaodaL5myCT9ybi0T83zZx5tmT4uyj4uGAHgTFJQTakJL9J8y03mjFqWhymjdbq8qzQtl51OMGlEFAaFLrPT/oVh9umizk6nwVVyQYF3SRyc1p7oZTqHlCO7GKEanSTMOBZjt05xgObxB67h3U8R45HFF+pLx8KWqSXGtKyhDiMn5yceLVz/QvQJ/2C1lLNBYB3+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=linux-foundation.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jwhEgVQg1k9kYi7U93RvrWtrvTgP/sMSm+nlsVgnpg4=; b=BJSg2Xt32NEORRL2ml70UnZxnU9FnMPc4a7keFOC/TQBDCrdQRdn73DCrRJXDCbVbbP83rV8TtMnU72En1To5heAezXjFVSiq1xPfXhwCc+VHj5fJ1Fp0lSRRcJ7rFGtHR4zT8NO03acHv7kCbcrmYUaF7Pk17aYEvdrSz3M0c9PJFStlKEkU1ATI/VPsmes+JfwoHqk14ScbCBFl6G4vkII5vglml9NPEeP0ctFUUhfjWbZmpFTBL1Q476tbrhZ75bBKATwj2vWcP61O/kXoqueQGfCfbUnBa2LsCV/5OlU+HP2yn9U8fxz7lv91DtOzj8LARTM3qNyUCqGB2Gtbg== Received: from BN9PR03CA0162.namprd03.prod.outlook.com (2603:10b6:408:f4::17) by SJ0PR12MB6942.namprd12.prod.outlook.com (2603:10b6:a03:449::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.17; Wed, 16 Nov 2022 22:11:15 +0000 Received: from BN8NAM11FT086.eop-nam11.prod.protection.outlook.com (2603:10b6:408:f4:cafe::79) by BN9PR03CA0162.outlook.office365.com (2603:10b6:408:f4::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5813.18 via Frontend Transport; Wed, 16 Nov 2022 22:11:14 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by BN8NAM11FT086.mail.protection.outlook.com (10.13.176.220) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.8 via Frontend Transport; Wed, 16 Nov 2022 22:11:14 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.36; Wed, 16 Nov 2022 14:11:05 -0800 Received: from [10.110.48.28] (10.126.231.35) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.36; Wed, 16 Nov 2022 14:11:04 -0800 Message-ID: <5c5f2c34-05d7-7e64-e368-0f240ef15eeb@nvidia.com> Date: Wed, 16 Nov 2022 14:11:04 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: [PATCH] mm/gup: Remove the restriction on locked with FOLL_LONGTERM Content-Language: en-US To: Jason Gunthorpe , Andrew Morton , , Alistair Popple References: <0-v1-b9ae39aa8884+14dbb-gup_longterm_locked_jgg@nvidia.com> From: John Hubbard In-Reply-To: <0-v1-b9ae39aa8884+14dbb-gup_longterm_locked_jgg@nvidia.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.126.231.35] X-ClientProxiedBy: rnnvmail201.nvidia.com (10.129.68.8) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN8NAM11FT086:EE_|SJ0PR12MB6942:EE_ X-MS-Office365-Filtering-Correlation-Id: 78a324ff-1fff-4f2c-202f-08dac81f7a0c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9mhHYELwj7/Yf7mZbxtd1YV+5LZlQgwEWeE7yufkQCoQBUlctpHX1idj4BH7QbSrgQ7J5Uvux1JHFrlbhXFbCSTYv9ztRlxTR5vwxrDsApS1ptRhkWH/pWoc+ZKpIIC0DXNZHaeAR9gGlYCDq6DxGx6hkNVAEA8l0ptcWffls16yLMIegW7FjXz6Fb1XPSDPwuI/EaERq2k56FrzqbgT7jVQMmfDUDDPI3ktSPblVnMAG7JD5wYnYwPhY9TfWwdxVxKO1iwh7a0Jj41TNE1uZWHFK25xRQ0QJt1+ZlGvSiTMXPcol7Dt3L3fqRTo3ti9B2RHbLlI27NDF9iTkMMaEqXjhIhfh32CTkWdw6/1dEH/vZ87peJ66MCvINUqBInolVHFgJOWRFjkFOqHz40iUCOdHDI+UydIqbIKTW2FPx6siGP09fgelGGbV4AItT2L8AzqnmXuiRVaoDhFBJikSMAlRaxZqY69/43W6EyfHKfXUGU0q1TnwUsl83Cqpzq7p5EX+uy2IedxEqZw0+JBuqd4Z8KXBy/xm0Xg/lKZZVTrrx5BMcIH9M+G8a5WDo+SgUodzoKfRo3unsRUcQAhmtZ2l0QEQoLB2QZ/fH53Pmnb0qMFM6GnORiyzvopFGatJFbVdIFXPyRPgRwrTLo3+D70y8/jF0CKLlpfF7wf7C0xOMlBiJ5nADQdOVtiEUnD1NM17IzLLnA574V0PrGFgZ3ysdaLh5vrTXUUhdug8/ty7keBuVtvbx35ASy/bksH95iLj1kWAOLClZhCQGRal7BkyjxdA4bRLnJ+pRy4IEecIKSuPBNun4M/bsjRXE7+ X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230022)(4636009)(136003)(376002)(346002)(39860400002)(396003)(451199015)(46966006)(40470700004)(36840700001)(47076005)(83380400001)(40460700003)(2616005)(186003)(8936002)(36860700001)(2906002)(336012)(82740400003)(426003)(356005)(16526019)(70206006)(53546011)(70586007)(5660300002)(40480700001)(478600001)(82310400005)(41300700001)(26005)(8676002)(16576012)(7636003)(110136005)(6636002)(316002)(31686004)(36756003)(31696002)(86362001)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Nov 2022 22:11:14.1471 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 78a324ff-1fff-4f2c-202f-08dac81f7a0c X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT086.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR12MB6942 ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1668636677; a=rsa-sha256; cv=pass; b=zU4vSCuCSZoQEIUnvXAeHOk0OHLuehqTtLzmEBsWRRuDDEm/9c1wsMQki5D5Ak3fHsQLhX qHl6bvpWE3qYbNDLH1AhZdnvz4GnobKr9h4l1bWNdigQg3SvR/GVXrJ/9HrNrRK+9hVIlv uqErkA0CizoqeaZiex9Hh6bp1+ni7xs= ARC-Authentication-Results: i=2; imf25.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=BJSg2Xt3; dmarc=pass (policy=reject) header.from=nvidia.com; spf=pass (imf25.hostedemail.com: domain of jhubbard@nvidia.com designates 40.107.243.71 as permitted sender) smtp.mailfrom=jhubbard@nvidia.com; arc=pass ("microsoft.com:s=arcselector9901:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1668636677; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=jwhEgVQg1k9kYi7U93RvrWtrvTgP/sMSm+nlsVgnpg4=; b=8PpLsSlRiyTBUP6kI0aM4MGB46XQGMvzGKnIxc+mzXvlzHkLS8DnXrXDOHjWtG4d0us5Nf l/5ygay5QWCVCa0Ufz3m2cGZW05RvTzxLxad9sqVtR7K9LFiKlB68CAImMNq/xxcdkyyj1 wR09pS6MTY77V1GVbdjIOvMZIb1vQls= X-Rspam-User: X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 30D30A0009 Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=BJSg2Xt3; dmarc=pass (policy=reject) header.from=nvidia.com; spf=pass (imf25.hostedemail.com: domain of jhubbard@nvidia.com designates 40.107.243.71 as permitted sender) smtp.mailfrom=jhubbard@nvidia.com; arc=pass ("microsoft.com:s=arcselector9901:i=1") X-Stat-Signature: 5ya4er5fj11dr8hxno5ytss1yhjctacj X-HE-Tag: 1668636676-182150 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On 11/16/22 12:07, Jason Gunthorpe wrote: > This restriction was created because FOLL_LONGTERM used to scan the vma > list, so it could not tolerate becoming unlocked. That was fixed in commit > 52650c8b466b ("mm/gup: remove the vma allocation from > gup_longterm_locked()") and the restriction on !vma was removed. > > However, the locked restriction remained, even though it isn't necessary > anymore. > > Adjust __gup_longterm_locked() so it can handle the mmap_read_lock() > becoming unlocked while it is looping for migration. Migration does not > require the mmap_read_sem because it is only handling struct pages. If we > had to unlock then ensure the whole thing returns unlocked. > > Remove __get_user_pages_remote() and __gup_longterm_unlocked(). These > cases can now just directly call other functions. > > Signed-off-by: Jason Gunthorpe > --- > mm/gup.c | 109 ++++++++++++++----------------------------------------- > 1 file changed, 27 insertions(+), 82 deletions(-) Looks nice. Even after this cleanup, gup.c is still a bit of a ball of string, what with things like __gup_longterm_locked() actually handling !FOLL_LONGTERM, and a bunch of other vestigial stuff, but this takes us in the right direction. Reviewed-by: John Hubbard thanks, -- John Hubbard NVIDIA > > diff --git a/mm/gup.c b/mm/gup.c > index fe195d47de74a7..91251291698a08 100644 > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -2105,14 +2105,19 @@ static long __gup_longterm_locked(struct mm_struct *mm, > unsigned long nr_pages, > struct page **pages, > struct vm_area_struct **vmas, > + int *locked, > unsigned int gup_flags) > { > + bool must_unlock = false; > unsigned int flags; > long rc, nr_pinned_pages; > > + if (locked && WARN_ON_ONCE(!*locked)) > + return -EINVAL; > + > if (!(gup_flags & FOLL_LONGTERM)) > return __get_user_pages_locked(mm, start, nr_pages, pages, vmas, > - NULL, gup_flags); > + locked, gup_flags); > > /* > * If we get to this point then FOLL_LONGTERM is set, and FOLL_LONGTERM > @@ -2126,8 +2131,13 @@ static long __gup_longterm_locked(struct mm_struct *mm, > return -EINVAL; > flags = memalloc_pin_save(); > do { > + if (locked && !*locked) { > + mmap_read_lock(mm); > + must_unlock = true; > + *locked = 1; > + } > nr_pinned_pages = __get_user_pages_locked(mm, start, nr_pages, > - pages, vmas, NULL, > + pages, vmas, locked, > gup_flags); > if (nr_pinned_pages <= 0) { > rc = nr_pinned_pages; > @@ -2137,6 +2147,10 @@ static long __gup_longterm_locked(struct mm_struct *mm, > } while (rc == -EAGAIN); > memalloc_pin_restore(flags); > > + if (locked && *locked && must_unlock) { > + mmap_read_unlock(mm); > + *locked = 0; > + } > return rc ? rc : nr_pinned_pages; > } > > @@ -2160,35 +2174,6 @@ static bool is_valid_gup_flags(unsigned int gup_flags) > } > > #ifdef CONFIG_MMU > -static long __get_user_pages_remote(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(mm, start, nr_pages, pages, > - vmas, gup_flags | FOLL_TOUCH | > - FOLL_REMOTE); > - } > - > - return __get_user_pages_locked(mm, start, nr_pages, pages, vmas, > - locked, > - gup_flags | FOLL_TOUCH | FOLL_REMOTE); > -} > - > /** > * get_user_pages_remote() - pin user pages in memory > * @mm: mm_struct of target mm > @@ -2257,8 +2242,8 @@ long get_user_pages_remote(struct mm_struct *mm, > if (!is_valid_gup_flags(gup_flags)) > return -EINVAL; > > - return __get_user_pages_remote(mm, start, nr_pages, gup_flags, > - pages, vmas, locked); > + return __gup_longterm_locked(mm, start, nr_pages, pages, vmas, locked, > + gup_flags | FOLL_TOUCH | FOLL_REMOTE); > } > EXPORT_SYMBOL(get_user_pages_remote); > > @@ -2270,14 +2255,6 @@ long get_user_pages_remote(struct mm_struct *mm, > { > return 0; > } > - > -static long __get_user_pages_remote(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) > -{ > - return 0; > -} > #endif /* !CONFIG_MMU */ > > /** > @@ -2304,7 +2281,7 @@ long get_user_pages(unsigned long start, unsigned long nr_pages, > return -EINVAL; > > return __gup_longterm_locked(current->mm, start, nr_pages, > - pages, vmas, gup_flags | FOLL_TOUCH); > + pages, vmas, NULL, gup_flags | FOLL_TOUCH); > } > EXPORT_SYMBOL(get_user_pages); > > @@ -2330,18 +2307,9 @@ long get_user_pages_unlocked(unsigned long start, unsigned long nr_pages, > int locked = 1; > long ret; > > - /* > - * FIXME: Current FOLL_LONGTERM behavior is incompatible with > - * FAULT_FLAG_ALLOW_RETRY because of the FS DAX check requirement on > - * vmas. As there are no users of this flag in this call we simply > - * disallow this option for now. > - */ > - if (WARN_ON_ONCE(gup_flags & FOLL_LONGTERM)) > - return -EINVAL; > - > mmap_read_lock(mm); > - ret = __get_user_pages_locked(mm, start, nr_pages, pages, NULL, > - &locked, gup_flags | FOLL_TOUCH); > + ret = __gup_longterm_locked(mm, start, nr_pages, pages, NULL, &locked, > + gup_flags | FOLL_TOUCH); > if (locked) > mmap_read_unlock(mm); > return ret; > @@ -2935,29 +2903,6 @@ static bool gup_fast_permitted(unsigned long start, unsigned long end) > } > #endif > > -static int __gup_longterm_unlocked(unsigned long start, int nr_pages, > - unsigned int gup_flags, struct page **pages) > -{ > - int ret; > - > - /* > - * FIXME: FOLL_LONGTERM does not work with > - * get_user_pages_unlocked() (see comments in that function) > - */ > - if (gup_flags & FOLL_LONGTERM) { > - mmap_read_lock(current->mm); > - ret = __gup_longterm_locked(current->mm, > - start, nr_pages, > - pages, NULL, gup_flags); > - mmap_read_unlock(current->mm); > - } else { > - ret = get_user_pages_unlocked(start, nr_pages, > - pages, gup_flags); > - } > - > - return ret; > -} > - > static unsigned long lockless_pages_from_mm(unsigned long start, > unsigned long end, > unsigned int gup_flags, > @@ -3041,8 +2986,8 @@ static int internal_get_user_pages_fast(unsigned long start, > /* Slow path: try to get the remaining pages with get_user_pages */ > start += nr_pinned << PAGE_SHIFT; > pages += nr_pinned; > - ret = __gup_longterm_unlocked(start, nr_pages - nr_pinned, gup_flags, > - pages); > + ret = get_user_pages_unlocked(start, nr_pages - nr_pinned, pages, > + gup_flags); > if (ret < 0) { > /* > * The caller has to unpin the pages we already pinned so > @@ -3241,9 +3186,9 @@ long pin_user_pages_remote(struct mm_struct *mm, > if (WARN_ON_ONCE(!pages)) > return -EINVAL; > > - gup_flags |= FOLL_PIN; > - return __get_user_pages_remote(mm, start, nr_pages, gup_flags, > - pages, vmas, locked); > + return __gup_longterm_locked(mm, start, nr_pages, pages, vmas, locked, > + gup_flags | FOLL_PIN | FOLL_TOUCH | > + FOLL_REMOTE); > } > EXPORT_SYMBOL(pin_user_pages_remote); > > @@ -3277,7 +3222,7 @@ long pin_user_pages(unsigned long start, unsigned long nr_pages, > > gup_flags |= FOLL_PIN; > return __gup_longterm_locked(current->mm, start, nr_pages, > - pages, vmas, gup_flags); > + pages, vmas, NULL, gup_flags); > } > EXPORT_SYMBOL(pin_user_pages); > > > base-commit: b1a4dd7dab677fa4bfc4967c99ee45ba4d1d05d6