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 C2E06C54E94 for ; Wed, 25 Jan 2023 03:01:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0A2036B0071; Tue, 24 Jan 2023 22:01:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 052D36B0072; Tue, 24 Jan 2023 22:01:08 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E0D836B0073; Tue, 24 Jan 2023 22:01:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id CFF426B0071 for ; Tue, 24 Jan 2023 22:01:07 -0500 (EST) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 89F191207E0 for ; Wed, 25 Jan 2023 03:01:07 +0000 (UTC) X-FDA: 80391819774.08.19A67F3 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2056.outbound.protection.outlook.com [40.107.244.56]) by imf16.hostedemail.com (Postfix) with ESMTP id 7247B180017 for ; Wed, 25 Jan 2023 03:01:03 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=qwFDhPBX; spf=pass (imf16.hostedemail.com: domain of jhubbard@nvidia.com designates 40.107.244.56 as permitted sender) smtp.mailfrom=jhubbard@nvidia.com; arc=pass ("microsoft.com:s=arcselector9901:i=1"); dmarc=pass (policy=reject) header.from=nvidia.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1674615663; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc: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=cY61PK8LG3thkZJvoTGGwrEhEoozSUwGJQO2fAy65A4=; b=XHgWUD+Yv7DU4KxgcZ93bmVd0zyTrsUyd4FhURd6HRASPePuS0pdOMeOOQHJHL4hfqoV3N F8fKcx8BKkpNlMpfQFX89evL2NPkzXtUd0TSdCGulWsymsGgq2CvH4E8ef70cAV3QwOpA8 PHbruOlzWR6U9b+zuTZJlNFugQu3ZDE= ARC-Authentication-Results: i=2; imf16.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=qwFDhPBX; spf=pass (imf16.hostedemail.com: domain of jhubbard@nvidia.com designates 40.107.244.56 as permitted sender) smtp.mailfrom=jhubbard@nvidia.com; arc=pass ("microsoft.com:s=arcselector9901:i=1"); dmarc=pass (policy=reject) header.from=nvidia.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1674615663; a=rsa-sha256; cv=pass; b=1OIkGtxLf8VRxN50gfudGxummN31mPeUjt4+wrPynTYrsPWMuI5o/n1Oj/7yOgteXtF1NN 60RP00aqdZaebaWij07qJ3oXtbtU1lTlmNM+aseyQJ0gl9QrjccxCcHIJGqQTG2TtzPeuQ nEl+zkSgjGI9FJJrLZ5c+8iPx/59uIo= ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=mtzwd0CQOSKNGdt7ipGyG+4LOJUVz4dLRpiiZzcXJA1F9f7z19s3Zsdlj6DShQrdSnR0BbR3Gw8vImgZ//bY2PVHECRVvJyMECsoc6g9B1utuQw6P1efguaaCocRAzvzGv+NtjOX2xQQQO0E9KOasphDuL/012+TD6zokrC8XTgwPGk3cKoi25lc40772tmCFTdwrTOpsgimzUKkLA7b4pe1xqtQmyG2xgOFhDu4RyX4nOLsySTiKm1IPpFsY2zPdT6n8mFKBOF7qKgmg7J/2S/JaTnYp5g/Ge+kve29J4X6mgRntDhtUQtGs3GnIWB9mlfc35gThE182tyaQzw8XA== 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=cY61PK8LG3thkZJvoTGGwrEhEoozSUwGJQO2fAy65A4=; b=lHxwzF+oW4lwGcZSPfGgIC+Zp/PyTEUX2hr+0sYcvPHXLpEYwMnMPpQMeAq8vtoyg7+5zC5d9F1u7VWxLP7I2eC3HUcWY7fdn8te9F7AuP2W4TzaEY/ry1/GOJ0JqHFKtCk9ELkq0T3bO5XisM5Cqk0NgnMIf+heIBt7p0WFNv7ntyApUfGeww7Lk6zgQsYj1hIoaTfnqydknOVCYmbIvRiJyM3k2YA/6p6XzWh0m+nCPHUVkyTjaXuEy6/yt0dK9xqS0EC+7S65XOrHdUWxaMUbQBPnhMdKQGYZCcgin+X11tS6Iul+E3B/Q9962egeE5N3fU5WxMVdDGGYoWEEmQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=redhat.com 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=cY61PK8LG3thkZJvoTGGwrEhEoozSUwGJQO2fAy65A4=; b=qwFDhPBXe/VgrFa1aAfInBShwQOQXVs6eOhUjjHlvokqNadZIAdZZqP//LxUZtm5QTDmw74UyLg9FRHFIuoM+GeePJo9/tP6JiRkUiMwNqbaXiOhFpaDQrZrxX6DJxDqc9EtmBLXQjpos7wiYlCbJ0kX8+kcYl+2B8fiL27LVcusU8ViHwGcCdDZcDR6UpbThEHacDW7I4Cd9GTrCab3q2lH4CNPq5wmJKffpRxAZHH3WPTlqGSiskWJF9ZT38fFyiZ5t+AC1vZGsvMfmicR3D9ELTnEUT6sA7gHZN5ANRRGYoBNtknLGssEqq7pcEszHpymCk/0XbF2HAbMQFeD8A== Received: from BN9PR03CA0734.namprd03.prod.outlook.com (2603:10b6:408:110::19) by BN9PR12MB5116.namprd12.prod.outlook.com (2603:10b6:408:119::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.33; Wed, 25 Jan 2023 03:00:59 +0000 Received: from BL02EPF000108E8.namprd05.prod.outlook.com (2603:10b6:408:110:cafe::54) by BN9PR03CA0734.outlook.office365.com (2603:10b6:408:110::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6002.33 via Frontend Transport; Wed, 25 Jan 2023 03:00:59 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) 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.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by BL02EPF000108E8.mail.protection.outlook.com (10.167.241.201) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6043.10 via Frontend Transport; Wed, 25 Jan 2023 03:00:59 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.36; Tue, 24 Jan 2023 19:00:40 -0800 Received: from [10.110.48.28] (10.126.230.37) 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; Tue, 24 Jan 2023 19:00:40 -0800 Message-ID: <2fe84a70-3ea5-25a2-31ee-e3b26816ad9f@nvidia.com> Date: Tue, 24 Jan 2023 19:00:39 -0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.1 Subject: Re: [PATCH v2 09/13] mm/gup: make locked never NULL in the internal GUP functions Content-Language: en-US To: Jason Gunthorpe CC: Alistair Popple , David Hildenbrand , David Howells , Christoph Hellwig , , "Mike Rapoport (IBM)" References: <9-v2-987e91b59705+36b-gup_tidy_jgg@nvidia.com> From: John Hubbard In-Reply-To: <9-v2-987e91b59705+36b-gup_tidy_jgg@nvidia.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [10.126.230.37] X-ClientProxiedBy: rnnvmail203.nvidia.com (10.129.68.9) To rnnvmail201.nvidia.com (10.129.68.8) X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL02EPF000108E8:EE_|BN9PR12MB5116:EE_ X-MS-Office365-Filtering-Correlation-Id: 46642f53-961f-411c-a6b3-08dafe80631d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: W5WWyfqtr8BGY3JKrpotjogYrgLDrZGdNz2NkuyOvfiMO8xpPJiy/O2dsEyT9cNWZ1aoTt+nR60DTqd0qQ7OeHNqxmaUEhOqvkAykkJyuxlouxrVVEG3DzHPcA0d4C5BnY+VcKpdyEzjNixH9as02R9ciazivKYz1uWw6VRPKUyk/IcQxc4qm+OE/SEwXzngfOLuUoOp4/iQJRJe6z12uY4puYkITLv/CXUVhm8QxDrdjt++9c5Do0fex/yEBby+xPc217AK1Xh1KWSGYT1b44nKsFz5YqJH0KB6+Un/BS3of5ZoSR8kGeeuQXvu0GbIgBXIsbdlizhA99VfKwTrOxzNhhCKc40lmbIVdlJgSdpjtBq8AH6z1NBHld2tk5TzZFVMQi4mQRkYucQGsPfqZ8EBfJ/g1altTBNVYN36SYz8kad96noONoPE1/FSNJyuaATFfSXzQBHGTJgCeJfOlBOc3Nk7BVDNLtXeif6n9afLB4piszhwY6w6GOeQ9aLMRIHdVTH9uy9TopT9R0RBmvyX6H2Ehjn0JbxkxRsIUIaXQKaQxWDu8qaP/gbeLTI65IwHPdoMygqyVteITgMlrcw6dlmjHnrs5NM/Skya73b94cq4CSf0kDZWDjpBmnQXDdMPNgcsiqRiNVQRBkmOlA0GrJBdKg8dOYIQPRGtqzwIzSmVxSWdAUgBsF1HYJP5Rr1WKVK23MS/HUFt0bkdKp47282RfEmQFY3nxDJ8EPM= X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230025)(4636009)(39860400002)(376002)(136003)(396003)(346002)(451199018)(40470700004)(36840700001)(46966006)(70586007)(7636003)(40480700001)(36756003)(40460700003)(82740400003)(356005)(31696002)(16576012)(2906002)(336012)(478600001)(316002)(70206006)(6636002)(8676002)(4326008)(37006003)(2616005)(426003)(47076005)(54906003)(31686004)(41300700001)(86362001)(53546011)(36860700001)(83380400001)(186003)(82310400005)(5660300002)(6862004)(16526019)(26005)(8936002)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jan 2023 03:00:59.6315 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 46642f53-961f-411c-a6b3-08dafe80631d 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.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BL02EPF000108E8.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN9PR12MB5116 X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 7247B180017 X-Stat-Signature: uabdejpa4mt9pp9tqweiet8ebj74ecw8 X-HE-Tag: 1674615663-617484 X-HE-Meta: U2FsdGVkX1/t2g2z7M56MHU1nC3fqtuXCuA8N/UL5VksgEuCEU8BtqG80RU1vHH+6sF+p6+/5bG4XAo8R7MN3n7kSjBVfiwQh97Y8dWDu8iemszC8jJvBx1/Gni17/WZrnL5st5RntEdm8+sZYJC8lWlGJVXCLB16hYmfiS56VXdmFL1jdh6hdix97aK3xrvGqWylUCLgSEPLQjFUODxkl8q+u7/p1P8bBY29ru+SsSqgpsc7IrvUgaIXGk4njCnU8NGu2/awCqFVzM9Xm5sk4o38GNGvtZWkGNxLjZMyBLmTnOAsCAOgTTXP+WUdKNqP9Bz9yQDLUdFrF+idfw8kGFSs8Hcw6qkpLgW196CypeHMsS6W0x4Om99NhSFgxYFFxUdCXypVb3IsKlU1Y4LbQ3UdwE/q9B9THQismVumriY/BFd3pcvvDsUPuoYri1EMstc2OsJ4Z6cmFNRVVeoHNuNBYZ1ofPIhpr2LOQPWta00RazDI48IK2hecbJ3KLGOKGA/WTKKzdqK6fMH5Of+g/jnTBlHOWAZxbmw0fAFRF7j+shEvCei3haeSpIxv9yPkModZ1WW95lvpwTUr1avhReUWjMfVisrkB3T9AcO0jcaD/wQfSzYpnEmeMCf9XCA8JrcBbX8Xq1/FMN8Jn8izaISYebPmqwb2lc3uvQV33S+wYsczlLf8qoG4a5ugC9QfBJ0sIetVGEOTvVh/iU93RHObzD6fk/GlGgWlY9Ucf2RYmHsVmwkyVElScxp+C7wux/TCn7Y0GcDe+r3M3eKM2Ru09rvU9PB49kfrr5MqIG4OIq48lbfgnwHnldx7gsDPFdzBnj2QU300j6qGVGteJoiGs0T7evstmtWNyyUHoqSqnxP6KpNyMvjqz3Vey3TZ3Sy0C8yoxraUywA+MGx9EQmEI0iTUlf4BOdxgtvAM+ZrE1jzhbR5uxBgx9J5xEbFSHwNtTJTXm5PUgg+L JS7AIrUj RQJlYgZLpAhH2Irdeoc3rP7KolgRssfg6acOYRddX2Gzgq/JG0jIMWO0uuL49O19lW5wRUK48k9MnKz+AiknPx9duVa/lsZ4H8gd44FMlzdl7+4ZooRYMENoCZBGeLPFRwv6zYUgFxuQX2ZhuYvJqtfyC0Ws3EkzLb8kX1fE830x0BnglFubmelA4N9hFLgFrstOfeQdjzqEhHhEgaWNV9HrXXfgG4fa6arZ//gwryDO5P5ukzth0ObIBfaZIx+Pwoe4BU9hGbnIiNu3dnu4FaQSmCJJhDODuIHcpwYZ8MxhrgKh281d/XFkkgpFH5AxuTCqZEHZNXk8vF4/fkFLQ57zYXDjYGoJYRegN/yLTLNBcRivNFCexIdRSQanOXt13vnuByyndcpbFO+9TBo1w5dVvvw== 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 1/24/23 12:34, Jason Gunthorpe wrote: > Now that NULL locked doesn't have a special meaning we can just make it > non-NULL in all cases and remove the special tests. > > get_user_pages() and pin_user_pages() can safely pass in a locked = 1 > > get_user_pages_remote) and pin_user_pages_remote() can swap in a local > variable for locked if NULL is passed. > > Remove all the NULL checks. > > Acked-by: Mike Rapoport (IBM) > Signed-off-by: Jason Gunthorpe > --- > mm/gup.c | 51 ++++++++++++++++++++++++++++++--------------------- > 1 file changed, 30 insertions(+), 21 deletions(-) Reviewed-by: John Hubbard thanks, -- John Hubbard NVIDIA > > diff --git a/mm/gup.c b/mm/gup.c > index 37849fcd962e9a..932a2339613c2f 100644 > --- a/mm/gup.c > +++ b/mm/gup.c > @@ -879,9 +879,9 @@ static int get_gate_page(struct mm_struct *mm, unsigned long address, > } > > /* > - * mmap_lock must be held on entry. If @locked != NULL and *@flags > - * does not include FOLL_NOWAIT, the mmap_lock may be released. If it > - * is, *@locked will be set to 0 and -EBUSY returned. > + * mmap_lock must be held on entry. If @flags has FOLL_UNLOCKABLE but not > + * FOLL_NOWAIT, the mmap_lock may be released. If it is, *@locked will be set > + * to 0 and -EBUSY returned. > */ > static int faultin_page(struct vm_area_struct *vma, > unsigned long address, unsigned int *flags, bool unshare, > @@ -930,8 +930,8 @@ static int faultin_page(struct vm_area_struct *vma, > * mmap lock in the page fault handler. Sanity check this. > */ > WARN_ON_ONCE(fault_flags & FAULT_FLAG_RETRY_NOWAIT); > - if (locked) > - *locked = 0; > + *locked = 0; > + > /* > * We should do the same as VM_FAULT_RETRY, but let's not > * return -EBUSY since that's not reflecting the reality of > @@ -951,7 +951,7 @@ static int faultin_page(struct vm_area_struct *vma, > } > > if (ret & VM_FAULT_RETRY) { > - if (locked && !(fault_flags & FAULT_FLAG_RETRY_NOWAIT)) > + if (!(fault_flags & FAULT_FLAG_RETRY_NOWAIT)) > *locked = 0; > return -EBUSY; > } > @@ -1062,14 +1062,12 @@ static int check_vma_flags(struct vm_area_struct *vma, unsigned long gup_flags) > * appropriate) must be called after the page is finished with, and > * before put_page is called. > * > - * If @locked != NULL, *@locked will be set to 0 when mmap_lock is > - * released by an up_read(). That can happen if @gup_flags does not > - * have FOLL_NOWAIT. > + * If FOLL_UNLOCKABLE is set without FOLL_NOWAIT then the mmap_lock may > + * be released. If this happens *@locked will be set to 0 on return. > * > - * A caller using such a combination of @locked and @gup_flags > - * must therefore hold the mmap_lock for reading only, and recognize > - * when it's been released. Otherwise, it must be held for either > - * reading or writing and will not be released. > + * A caller using such a combination of @gup_flags must therefore hold the > + * mmap_lock for reading only, and recognize when it's been released. Otherwise, > + * it must be held for either reading or writing and will not be released. > * > * In most cases, get_user_pages or get_user_pages_fast should be used > * instead of __get_user_pages. __get_user_pages should be used only if > @@ -1121,7 +1119,7 @@ static long __get_user_pages(struct mm_struct *mm, > i = follow_hugetlb_page(mm, vma, pages, vmas, > &start, &nr_pages, i, > gup_flags, locked); > - if (locked && *locked == 0) { > + if (!*locked) { > /* > * We've got a VM_FAULT_RETRY > * and we've lost mmap_lock. > @@ -1354,7 +1352,7 @@ static __always_inline long __get_user_pages_locked(struct mm_struct *mm, > * The internal caller expects GUP to manage the lock internally and the > * lock must be released when this returns. > */ > - if (locked && !*locked) { > + if (!*locked) { > if (mmap_read_lock_killable(mm)) > return -EAGAIN; > must_unlock = true; > @@ -1502,6 +1500,7 @@ long populate_vma_page_range(struct vm_area_struct *vma, > { > struct mm_struct *mm = vma->vm_mm; > unsigned long nr_pages = (end - start) / PAGE_SIZE; > + int local_locked = 1; > int gup_flags; > long ret; > > @@ -1542,7 +1541,7 @@ long populate_vma_page_range(struct vm_area_struct *vma, > * not result in a stack expansion that recurses back here. > */ > ret = __get_user_pages(mm, start, nr_pages, gup_flags, > - NULL, NULL, locked); > + NULL, NULL, locked ? locked : &local_locked); > lru_add_drain(); > return ret; > } > @@ -1683,7 +1682,7 @@ static long __get_user_pages_locked(struct mm_struct *mm, unsigned long start, > * The internal caller expects GUP to manage the lock internally and the > * lock must be released when this returns. > */ > - if (locked && !*locked) { > + if (!*locked) { > if (mmap_read_lock_killable(mm)) > return -EAGAIN; > must_unlock = true; > @@ -2222,11 +2221,14 @@ long get_user_pages_remote(struct mm_struct *mm, > unsigned int gup_flags, struct page **pages, > struct vm_area_struct **vmas, int *locked) > { > + int local_locked = 1; > + > if (!is_valid_gup_args(pages, vmas, locked, &gup_flags, > FOLL_TOUCH | FOLL_REMOTE)) > return -EINVAL; > > - return __get_user_pages_locked(mm, start, nr_pages, pages, vmas, locked, > + return __get_user_pages_locked(mm, start, nr_pages, pages, vmas, > + locked ? locked : &local_locked, > gup_flags); > } > EXPORT_SYMBOL(get_user_pages_remote); > @@ -2261,11 +2263,13 @@ long get_user_pages(unsigned long start, unsigned long nr_pages, > unsigned int gup_flags, struct page **pages, > struct vm_area_struct **vmas) > { > + int locked = 1; > + > if (!is_valid_gup_args(pages, vmas, NULL, &gup_flags, FOLL_TOUCH)) > return -EINVAL; > > return __get_user_pages_locked(current->mm, start, nr_pages, pages, > - vmas, NULL, gup_flags); > + vmas, &locked, gup_flags); > } > EXPORT_SYMBOL(get_user_pages); > > @@ -3158,10 +3162,13 @@ long pin_user_pages_remote(struct mm_struct *mm, > unsigned int gup_flags, struct page **pages, > struct vm_area_struct **vmas, int *locked) > { > + int local_locked = 1; > + > if (!is_valid_gup_args(pages, vmas, locked, &gup_flags, > FOLL_PIN | FOLL_TOUCH | FOLL_REMOTE)) > return 0; > - return __gup_longterm_locked(mm, start, nr_pages, pages, vmas, locked, > + return __gup_longterm_locked(mm, start, nr_pages, pages, vmas, > + locked ? locked : &local_locked, > gup_flags); > } > EXPORT_SYMBOL(pin_user_pages_remote); > @@ -3187,10 +3194,12 @@ long pin_user_pages(unsigned long start, unsigned long nr_pages, > unsigned int gup_flags, struct page **pages, > struct vm_area_struct **vmas) > { > + int locked = 1; > + > if (!is_valid_gup_args(pages, vmas, NULL, &gup_flags, FOLL_PIN)) > return 0; > return __gup_longterm_locked(current->mm, start, nr_pages, > - pages, vmas, NULL, gup_flags); > + pages, vmas, &locked, gup_flags); > } > EXPORT_SYMBOL(pin_user_pages); >