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 1C6AEC46467 for ; Thu, 5 Jan 2023 00:19:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7F8E98E0002; Wed, 4 Jan 2023 19:19:43 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7A87C8E0001; Wed, 4 Jan 2023 19:19:43 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 649178E0002; Wed, 4 Jan 2023 19:19:43 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 55F958E0001 for ; Wed, 4 Jan 2023 19:19:43 -0500 (EST) Received: from smtpin19.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 2B6A51205A4 for ; Thu, 5 Jan 2023 00:19:43 +0000 (UTC) X-FDA: 80318837046.19.AB35037 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (mail-dm6nam04on2051.outbound.protection.outlook.com [40.107.102.51]) by imf01.hostedemail.com (Postfix) with ESMTP id 531A040016 for ; Thu, 5 Jan 2023 00:19:40 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=pREyMbsN; dmarc=pass (policy=reject) header.from=nvidia.com; spf=pass (imf01.hostedemail.com: domain of apopple@nvidia.com designates 40.107.102.51 as permitted sender) smtp.mailfrom=apopple@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=1672877980; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=If1YWFUypXSX+90VERo4+aQcx06wYKkl8PuMz3q0N8c=; b=BpJDhEzc2kIOSIY37RMoWDsc9H2yqRu6G8jSTQuPE93JsuIxJYfppYVFjQCScWlnaVoeZi eSz7KpGseJgYAJFXCli+wSvpqzoirSLeuPflFVLHcBzPp6GY0hmxuS0YOg1HLKJUH9kyzH rRbm0qVCbdurU3g1AVVlFufm5IM6G8w= ARC-Authentication-Results: i=2; imf01.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=pREyMbsN; dmarc=pass (policy=reject) header.from=nvidia.com; spf=pass (imf01.hostedemail.com: domain of apopple@nvidia.com designates 40.107.102.51 as permitted sender) smtp.mailfrom=apopple@nvidia.com; arc=pass ("microsoft.com:s=arcselector9901:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1672877980; a=rsa-sha256; cv=pass; b=YnQg02pLy5bTZfDn2S3B2EOPaCTdf0psPtjmyHqp5m4ojguuDMMtA25uCDBqVMYCnuIYzy tnwUe6k9k+gmieSeqZD+h6fRjKerbNPmmHtgw9A/FGUAIsEAMIRyJMRIeCulqP8CjIgRBL Plz/jJJqhy+heZ18KcDmA6L1YzyXkms= ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PSeYCcKR3x59V8V36gVecFWce9WbRCdXdpc3JYyhVAxBgjbT2yNLkQSdUuNjNR59lC9kRRHdtPAZWWZ2oWeQgM2OOnbTpR9dysd9P/p9yj67OavDp5AU1rR2+WNmqwNrMskJEw6JcYb3K9Nz22WwRjt09JzRawq1cRzm5ZE9TBNmtVI+1T2jXFiWMWNVMcamrRFxYbiO71cjyyZU6HZ2Fur6z8jV1tifse5BdoF4Vv8cVEPi5db4u2p7SA5jWOdn678WMBYPvztMAqjgbppaskUqNtGwKLrDwmhfAXQCedJTcUX18HgW3+9iF8iZ8XppmFGl2hsr94tz9ehSg3EObg== 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=If1YWFUypXSX+90VERo4+aQcx06wYKkl8PuMz3q0N8c=; b=TbaAqHPLmHxzRN01H/4aWIjC0BkS52lZVAFFPrdwf1k3JsUbs4qvMsGMyjQiJV7KtEENoapQAhFkgRVzTNpMNi9YKwJRXRWBLweecaEz9DJcVKeFrL8tiVJIb7uD+yp74qTw867ibSzoUeIdFZNQ2Uy/mFjCCz3upwUjjhCOG4m3746xUevQe485DtLVphqPTRveTjxluDItnupuCh9SwXqKQwrEJDyCLimrwd10WOk9tUlyYxXEWtDYa6wddFweU9dfPzCmOeyf4frY9MClZ7gWYMUxSM5baKv6q43rnA1zZDA5V+LP4grmQF/SizuEvebEUOysn2uR8PePrG29oQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; 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=If1YWFUypXSX+90VERo4+aQcx06wYKkl8PuMz3q0N8c=; b=pREyMbsNW3n5Ec9ZRVsdGjnZQgtk2q0w80cG92zjfNxVPBRAUQM98jMfMDX/AzLni9C0iSvIGEICgyp4OkOhAM9TVcFveWvQEhNSrMkT+ybHAOzdzxln6bKI90M46XTodHoxX/UoBY74YtRZd35ajaugX7OV+i0CLWfgjc3Nrlrh0zeJhVipM3kuwPKxwsrL2QhfhnKK8BBRhAQs2oeQMKTIOYQ6yuGIZarygiM/yfx7sRuG4kqFPjMypCfpGRQb4TzWqn/hhapbLh7i1x+UDSXJUg8M/NP6SMkIBpKs8CuV3h6+7lOll8HS4XbfxfMv0elqrM4RwXLRoWMVNL/hHg== Received: from BYAPR12MB3176.namprd12.prod.outlook.com (2603:10b6:a03:134::26) by CH2PR12MB5513.namprd12.prod.outlook.com (2603:10b6:610:68::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5944.19; Thu, 5 Jan 2023 00:19:38 +0000 Received: from BYAPR12MB3176.namprd12.prod.outlook.com ([fe80::ecfb:a3ad:3efa:9df8]) by BYAPR12MB3176.namprd12.prod.outlook.com ([fe80::ecfb:a3ad:3efa:9df8%3]) with mapi id 15.20.5944.019; Thu, 5 Jan 2023 00:19:38 +0000 References: <20230103163505.1569356-1-fenghua.yu@intel.com> <20230103163505.1569356-10-fenghua.yu@intel.com> <87tu16rdea.fsf@nvidia.com> User-agent: mu4e 1.8.10; emacs 28.2 From: Alistair Popple To: Lorenzo Stoakes Cc: "Yu, Fenghua" , Vinod Koul , "Jiang, Dave" , "dmaengine@vger.kernel.org" , "Zhu, Tony" , Andrew Morton , "linux-mm@kvack.org" , Christoph Hellwig , "Shankar, Ravi V" Subject: Re: [PATCH 09/17] mm: export access_remote_vm() symbol Date: Thu, 05 Jan 2023 10:57:02 +1100 In-reply-to: Message-ID: <87k021vnmw.fsf@nvidia.com> Content-Type: text/plain X-ClientProxiedBy: BYAPR05CA0045.namprd05.prod.outlook.com (2603:10b6:a03:74::22) To BYAPR12MB3176.namprd12.prod.outlook.com (2603:10b6:a03:134::26) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BYAPR12MB3176:EE_|CH2PR12MB5513:EE_ X-MS-Office365-Filtering-Correlation-Id: 2e18efdc-a2bc-49f1-dd26-08daeeb28823 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: z0p2rch4dX3JPQKpLQ2+kUyosfpqt9NdwGowBGsWJvfaXGcaAoZlq+O+qqCp3KmviUr+SkvO92b1tJFuqCnsvaMj05dMovnGUyAmrkxvb2uxsGLniXHhpxlovT0dSlQu9e+oKfSS12xiQs5EB9YhYNSHu0bDRgSEaX3upjGaE6QjWhc4vPKww3SW9S6HnJSN+C+jpPsDUo+8W/6y9MZqatxyI29Dnuh0GYBNqITUO+PTDWPKPfClO8sND91NwUBKz3Fa9WW2NHfeN/DzFgUpHsEBaJ3lOs1urIZks2Z+HX1FrbQ0HOX87+Aw1ZVqIOwj0QX352eMsTIKY6mVEAE/m95YNYuTHXoUui45RbNf8Qn+AGZN00eq03/7hayHzcAc8sa18q0tWIUdPYAV1ki7bgW4NyW7RdG25c/5uKyQ1dr4R1i430+Pkzs++fAip/6HeJXc3LPsTfYBZYTHe0GTFx/jtUEeg8/M6vsozxq5mdCOgpL4gHO4KL8WDir///n1Yb6VjD3lZZ3gROP3ZujhY7merV5CTX53O1G8d5CcG47BPcGR52xGXU7J0fBr2IMl/MZvMP5ljavSveoEVKNzi0TVZhNo6a4xLEgfOdOOKED+leOT35n3gp4Q1WaUiwOMZfzWAWkX1CGvVuBCiHGqKw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR12MB3176.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(376002)(396003)(39860400002)(346002)(366004)(136003)(451199015)(83380400001)(2616005)(26005)(186003)(6512007)(6506007)(6666004)(86362001)(36756003)(38100700002)(41300700001)(4326008)(66899015)(8676002)(7416002)(2906002)(5660300002)(8936002)(6486002)(316002)(66556008)(478600001)(66946007)(54906003)(66476007)(6916009);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?VrvDPnG5acOi/i7YIAy0Hy3u/PltrZ4ZwY2Alex46LF8nSPQXCPokNrpFOuo?= =?us-ascii?Q?EdgO02zOmMT0eIF51+/poTUzT8zLMuD+X2h4OLpuB0DscrgXyTGbsho6DAN0?= =?us-ascii?Q?qXp58slHkEoL5hSCmO7eFAGe2xuTnwWH/lPmL+b6NCiWxPH0V3AHiHSD/Heo?= =?us-ascii?Q?VIP7RfNS+jQyZRc73DJ7JSOfcr1eiBiJz3z2Oi365r6b978tscvginjMkY3v?= =?us-ascii?Q?eZMSpi+SoSFCXv6AdEKWNVBGryw4kppHmM0L/roa8/tsnIt+jOy9ZRtlz6Tb?= =?us-ascii?Q?AirdNcotaFw2VUf6oiX8fEL6KOJ03IxKV3/IUDs9YLOOojXXU478mdeFfzj/?= =?us-ascii?Q?KQdq1/DtI5HnL53z84nk1CR+bg+6ER21KCKv2nwnoVq46GcrQE+1/O95uyfc?= =?us-ascii?Q?snVEE7YFMMxJ5zDuB8DinFsV+jj9gwq5MFtK2cjIkBTc4HuJ4UTEKDI6KPRP?= =?us-ascii?Q?LeFoIPWLE/eyCuwlzxSe5ZO3Nbx40XY72ZhqtX9fN+gXqDHGIFBYGtrL+1jS?= =?us-ascii?Q?WbjSEuec04HrKTWVHtMRL4FLDZ6ypW5baraHyl2gTDgwcFZHuHOtVhS3klcC?= =?us-ascii?Q?T67b1oa+O6UJ2fzBsAmDMEk1IESoLmwB3wyxEdF3US8glBdtJKNASGiec3Po?= =?us-ascii?Q?h6Ghsv0Isb44pUPek8fOKEXePp8t23aQ488de8Lm0PsKpptTHc3anwm01Iyr?= =?us-ascii?Q?I+87QjvmzsCaxcUvSHctiL3CAfQXagcfyY1kwyJI7WjUvkV2QmZFm3gxFtNO?= =?us-ascii?Q?lgnILajoAq9DFRdw0UBjESO5Lzg0KEAgCnwQ05szTVFMRqgTwz4XM/GvWBJV?= =?us-ascii?Q?g0nOB4r1k7wcFMN8QW/cr/JVcPgqhoXs8pXLsOGPU1DuxbhHY7qrNG3PezcC?= =?us-ascii?Q?oxuuy5Pzw2VAfKBdNefL9SLlaSe7ynkbDYwZsV/ZQ9oAZWO/ylpBugBsg/3+?= =?us-ascii?Q?SA6c6cHN9Cpdscv1mpef8YshFzQJFRa9EANlAc5vcOVbAAG7VHTCYw0ZhyG2?= =?us-ascii?Q?u4X7qWB+1AYZAwbg9qL+wtGNKRh3uEB4v445+bEbn4iSgpyQDzPQCYQEks4n?= =?us-ascii?Q?l6O/BvsEWmoPYRQ/z6CyxXrTMpKYAbw5me+aGAuTfIEKOZmqEJO6c22vaK9y?= =?us-ascii?Q?lJbeRDsq1A03rmBPLeB6HlYivC+At7mmmmQ7jFyj3svqHB6Pzepa6f62cpg7?= =?us-ascii?Q?SYr+yxWi68igq8a1IBRzdKbrhOGtDNmsqDoEt/JxwTYWsGCoVz7WG1LGbET9?= =?us-ascii?Q?8lgv2ALp+1fY2BafBVgisP+UDbJMDiISy4LHKff/uljWeYmkJeQANEnO0C+c?= =?us-ascii?Q?Mv4IAS4lwWqOS6AqoGQL0Hrk6gBqPnYN8HhbFxJNjcF0qME6W8aLLK/S12be?= =?us-ascii?Q?nKle0pITWxdTnol8nP66DWt18cm9n+UQyW7i4BwEiXZLFkDmlK72q6lVr44f?= =?us-ascii?Q?bFkrNknepYpwRdg2nNYHeAcKnfS26msyW8qD+qNuNiwsbb45sVg2ghzPFUTt?= =?us-ascii?Q?XiVapJ6u+sN1bnfpCbQq5R5/17VahZEn2P9avQpR0IbodyPoUQsUThWGEQIc?= =?us-ascii?Q?UzGyxCIWzPDtBteAQbOV6f94GUhrGX6x8ngO4RGZ?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2e18efdc-a2bc-49f1-dd26-08daeeb28823 X-MS-Exchange-CrossTenant-AuthSource: BYAPR12MB3176.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jan 2023 00:19:38.3550 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: l5SvJpL7l8EWSw8N0csz39lsmwmDF8va+y/fVcGTrTNIuG5CJ9vHQv0MZP1n14d3XCGgTlaC65L4HMMPhZFNnw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB5513 X-Rspam-User: X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 531A040016 X-Stat-Signature: 5fbr61tsje3g6gioezi1ryenemcc94oh X-HE-Tag: 1672877980-881103 X-HE-Meta: U2FsdGVkX190S8sfWO9AesevjIP3Fk8L/ZtmIMTNYiLNq65AlqdyEtqIT682D2gq1kWdNWRq8E0v/a7ULECvVvSpG8Qm+WsU1+XZEamRJ3Ce25/hniizXznTTUrOBPIDFYnWAXdKay9gi9qfp6xmDS5TjCFd3oQW9161lIdMY5M4a+ebvlTUoQFA+42hHueW2c6YqPjxSf1dy+2nQdsUdg78seNeoAf31dHG9EEL+EWH55LGEFGyAwqgvTdjjMCRvHwbbn5ESTbPonGGIZ1bakpNdDIBikEJZA9FYsvfTnixW2zXcSfuOwCsUEkrAwN8k5wAZgd/gTlEg86YofLe2+nRigBRuikngUVDlRbV0h7Cf5BgrX/idlIqqcLTuW1fIrsJWeMaP4ye/NbBCifrslFPnWrpre50OtAihWieWVzoR1PabosuwybzDz27DnoGdrXs1wXwtiItiGVPvnYLiaW79HejVJm8wiIV0eVxu6tdLkPnGNG1Gpf1M9hI5aMkcA+w74AANzzKrsbdFRaIo+tzhhl04pSLGYw1PUcXFMlMxg0lSO5Mn5FkbjMZSUBTcsVAjCsQDMSpB4HFqyHDom1ma66pOJpreGzNzOvvbqB67cxRh/gp5Y1AG0wVJIu76xg0DsUe6Mb89aHbMdCIRRm3lcXciitE0tLj56SSC8hB2s/uCRYIuVG3/ZJ99AC9itstC3qsWohRRol4h5swqqype3l+qi6niDacEFYqtKDzwexCote1TB56+eu29uTI85woz3gXug2GMhaHq72fINFXOHF7DE3VaoMq5Q15FpMyve2mfd6P0tixiJN4cPnrjX4hTOHo8tq8yclmWpEIV5/Iru9B+udG03Ewq1LaxZVynW3a+X3QvHRqEdrVIALIMM64e2/bN8H4gPoXI+eQnNLIHd2QI+hQi0FJDNVbHlL41bzvHEV6gaz8aw/CaTo+Hu+XjbHC1mN+e8O2ctJ 9yPmWrW3 SBO7E0cU+qt0FbBZU5imw6XKVR5Hm8r2UNreE 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: Lorenzo Stoakes writes: > On Wed, Jan 04, 2023 at 05:12:31PM +1100, Alistair Popple wrote: >> Obviously something must still be holding a mmgrab() though. That should >> happen as part of the PASID allocation done by iommu_sva_bind_device(). > > I'm not familiar with the iommu code, but a brief glance suggests that no > mmgrab() is being performed for intel devices? I may have missed something > though. I'm more familiar with the ARM side of things, but we can safely assume we always have a valid mmgrab()/mm_count while the PASID is bound because iommu_sva_bind_device() -> iommu_sva_domain_alloc() -> mmgrab(). > We do need to be absolutely sure the mm sticks around (hence the > grab) but if we need userland mappings that we have to have a subsequent > mmget_not_zero(). Yeah, iommu_sva_find() does take care of that though: * On success a reference to the mm is taken, and must be released with mmput(). >> >> I definitely don't feel as if simply exporting this is a safe option, and you would in >> >> that case need a new function that handles different scenarios of mm >> >> ownership/not. >> >> Note this isn't that different from get_user_pages_remote(). > > get_user_pages_remote() differs in that, most importantly, it requires the > mm_lock is held on invocation (implying that the mm will stick around), which is > not the case for access_remote_vm() (as __access_remote_vm() subsequently > obtains it), but also in that it pins pages but doesn't copy things to a buffer > (rather returning VMAs or struct page objects). Oh that makes sense. > Also note the comment around get_user_pages_remote() saying nobody should be > using it due to lack of FAULT_FLAG_ALLOW_RETRY handling :) yes it feels like GUP > is a bit of a mess. > >> In any case though iommu_sva_find() already takes care of doing >> mmget_not_zero(). I wonder if it makes more sense to define a wrapper >> (eg. iommu_access_pasid) that takes a PASID and does the mm >> lookup/access_vm/mmput? > > My concern is exposing something highly delicate _which accesses remote mas a public API with implicit > assumptions whose one and only (core kernel) user treats with enormous > caution. Even if this iommu code were to use it correctly, we'd end up with an > interface which could be subject to real risks which other drivers may misuse. Ok, although I think making this an iommu specific wrapper taking a PASID rather than mm_struct would make the API more specific and less likely to be misused as the mm_count/users lifetime issues could be dealt with inside the core IOMMU code. > Another question is - why can't we:- > > 1. mmgrab() [or safely assume we already have a reference] + mmget_not_zero() > 2. acquire mm read lock to stop VMAs disappearing underneath us and pin pages with get_user_pages_remote() > 3. copy what we need using e.g. copy_from_user()/copy_to_user() > 4. unwind Seems reasonable to me at least, but I don't have any strong opinions as I only noticed this thread while trying to catch up on IOMMU developments.