Message ID | cover.24b48fced909fe1414e83b58aa468d4393dd06de.1742099301.git-series.apopple@nvidia.com (mailing list archive) |
---|---|
Headers | show
Return-Path: <owner-linux-mm@kvack.org> 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 BB3A1C282DE for <linux-mm@archiver.kernel.org>; Sun, 16 Mar 2025 04:29:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id D856E280003; Sun, 16 Mar 2025 00:29:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D3413280001; Sun, 16 Mar 2025 00:29:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BB0C7280003; Sun, 16 Mar 2025 00:29:54 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 9D282280001 for <linux-mm@kvack.org>; Sun, 16 Mar 2025 00:29:54 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 4297CB6C5B for <linux-mm@kvack.org>; Sun, 16 Mar 2025 04:29:55 +0000 (UTC) X-FDA: 83226136350.01.B27E518 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2083.outbound.protection.outlook.com [40.107.236.83]) by imf25.hostedemail.com (Postfix) with ESMTP id 72114A0007 for <linux-mm@kvack.org>; Sun, 16 Mar 2025 04:29:52 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=a9911XJG; spf=pass (imf25.hostedemail.com: domain of apopple@nvidia.com designates 40.107.236.83 as permitted sender) smtp.mailfrom=apopple@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742099392; 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: references:dkim-signature; bh=JbI4aSkTotSjLOdayxCjWDb4vuQczyU5E5iKOWgXnzE=; b=yXDPEVRzaXxQF4zJgMB8YIFyiVlE/zXs0PI3igjbMMRg4aZ1n1WpI1/cNDHYLjIhtCzIoS cuLYyYNMRKjLQsqLW2c0rusYQX82wo2qaQI+GeMRsm4ovnERTprAaaiDZp0OI+UjxrrLL4 Zt98G8mSO1eg8UW1wciZw6bBGfo9nng= ARC-Authentication-Results: i=2; imf25.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=a9911XJG; spf=pass (imf25.hostedemail.com: domain of apopple@nvidia.com designates 40.107.236.83 as permitted sender) smtp.mailfrom=apopple@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1742099392; a=rsa-sha256; cv=pass; b=T02LaGS971Agd7MNsWmyJLZBv0bu9UnLMC9EZMJInSJGq/5hnC1oW2NVsme2qwt0yp4+nB Vd24hLbVewJdIOdr2654OXvZbLRjH4WEbwD1h6PQIp27VdlWi73IEROZlT7ae6Kp1UjT7k A1Kfp0LSavAUKEfv/K2v2MXyR9pe2qA= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uqcR/O/eLCzZbsgCwLNqXDoBC4dXEJ6b6LNvVDqx/e7WR6WWzAyqQCEzZtTksfKZWF4Yw/Uz/FKKNZwwQ09ixzQNgsmfnmPyApNYzxJSX83ga4/zfawMDe//d32mjcNvy3sLHhU7+MctYCA3xl7ZrxrtooDEuhqDThVHPfOtgprA//35FnT0D/YO4NZ47ajbcXwtCzRZuLJSMYQ2ktcTfGeffxRHGG2bANG9RlxTyc59U/phSYCNjqO230lUsohfw3Dfpvnjg5XFFKi3XqjyzhhbPT0M2bpjbOG93BNnETR5v6ew7j4JrQvd9gS+8IlRCnBrE0MTcYMy+XyWKhhVDg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=JbI4aSkTotSjLOdayxCjWDb4vuQczyU5E5iKOWgXnzE=; b=IzzmzjhIZsitI0vLClzC8fTO1C73Rcns89ZLYeGK9J8Z2Dsi5bjzl02f3zlZt0Blw/ZkUKzC12QUGvSN9wYGRRr44yFxP+RqIXlFMgdaGtVO7gqRjtPlYKUZR7F8z7Wu7QAp90EAOMFCQqOwxVPZEOK8j90LDZnmGdSvsfT1E5TWES84YBLM0WP3BtyKGbq42GY89NqTFm9NLUx7VJETqmeIBUEdayFOQFHnl+gDNCAGPLq6HeOktgp1HqXeYPapSMb6kZvG9SqIymDJD307q6UQbX6LsRuKRCZrnQeMfB0Ejo96CTsqJHr+j6EuUOjqkwIuWomQz1tH+ktlCYxNbA== 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=JbI4aSkTotSjLOdayxCjWDb4vuQczyU5E5iKOWgXnzE=; b=a9911XJGETsVwHA+sHkcDf2tJeTHBM93A8qubDCgjUKGp8pdk16VpABAmZloHFnL0l4P486orKEezo42mtkVy7kk3rYP+C4XVqqgBC2gXHftj0/TcBjwKEVQVvzeTy99VcQmIU/CgmbP+QjjXe7tC1oP3aJPq1IqlgQ7iCxcrXG1je9x2AUkYCDKTT4nuuq/w+6C2yj6VTFvuz9aXUIC1Vhi4jAhHSh7RVowmsP0uSGY4sAOnwi3yPvapfkR3QaT/oWp5S636AitnkNHqOF6nAEkdzmgmjf/f5JHbIvQu3HxR9QaYsFWjftiWkyLVMTCiaDG21mvm960FrQZ2yLK5Q== Received: from DS0PR12MB7726.namprd12.prod.outlook.com (2603:10b6:8:130::6) by LV3PR12MB9260.namprd12.prod.outlook.com (2603:10b6:408:1b4::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8534.33; Sun, 16 Mar 2025 04:29:50 +0000 Received: from DS0PR12MB7726.namprd12.prod.outlook.com ([fe80::953f:2f80:90c5:67fe]) by DS0PR12MB7726.namprd12.prod.outlook.com ([fe80::953f:2f80:90c5:67fe%7]) with mapi id 15.20.8511.031; Sun, 16 Mar 2025 04:29:49 +0000 From: Alistair Popple <apopple@nvidia.com> To: linux-mm@kvack.org Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, Alistair Popple <apopple@nvidia.com> Subject: [PATCH RFC 0/6] Allow file-backed or shared device private pages Date: Sun, 16 Mar 2025 15:29:23 +1100 Message-ID: <cover.24b48fced909fe1414e83b58aa468d4393dd06de.1742099301.git-series.apopple@nvidia.com> X-Mailer: git-send-email 2.45.2 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: SY6PR01CA0008.ausprd01.prod.outlook.com (2603:10c6:10:e8::13) To DS0PR12MB7726.namprd12.prod.outlook.com (2603:10b6:8:130::6) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR12MB7726:EE_|LV3PR12MB9260:EE_ X-MS-Office365-Filtering-Correlation-Id: 09641212-ebec-49a2-3284-08dd64433084 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|366016; X-Microsoft-Antispam-Message-Info: lNS2rGCy6MHZypWRPwZXOCVY5FP2PEq+pCsFrgGag/vh5l/q/u5QOoTgpUy4YQpV2AlKT0iv1puhQXw5ZaUfOqXAMJ0q034epHX8BlwUsdTa3qZgn8C2C20eNC2KbkmhJLhCu6ccIFQdjfV6SweHczA7x/pSakt5CbsA5MGwsgYBbO/JoFmD05s8BlkmQji+TqQ99rgPlOr2YDRrAkLOsuf4Jd3UridKldrL0lqKbZPVebPTtipp5MFEZ7IePvNJ9oowOy8yNF22z+hF2QJ7uZHXzDA8GMbzghmFw+Cyk0A6SxXdmZjFlKo02yYw3LgteMZAIZYVx3zYdvZ6ThUuJQiU2Z9adbXYvJNEF4IWs1LpMdYsEsXCgEBqBREX7c2bP7AKA3A5JcLvakyxzmVx8Prfjm9lIq+QT4EFvWMkoI/cX4WyoeXUUQ/b/0s+T7IURFnH/lFfSSyLe+6iLb+u7XXYXYjYwpPm0vPe7LDSnoADNouulajCtltlG0l7zgdPTQbp+i7qWQOeVL+9z8PLooFqk8IEdAdVZtiAv5efdrV8Giimu8uMPTyYWg1Eu3wgqTNw54Z+Ib2k0pZ17kpxv9Pjhf80aKz1ivoICoJP7HCT+0kGa/T9ndcqbbsMPw1sx7/uIkuWNRISp6WQb10FYYDjyLZ2xw9XOkUomvegVv/BXgwbOKleBmTvXCBwy+pDxcUG4ZsOjUop2Ste+HbNqA8Gj2iTxLpVSis0e+4DsCpSZyWwKUfKHz4DlKm/Ri4qnQ4Wz1areckdYZlV4Dhu5mTkyXtwwRSSyCn7I9lu+PUBO2VOP4JeJFuku78pTTgikANf+wsOtDOeP8DbMSgWeuT/0mTxi9o53LsXK3dhN4jqiOJ/1aPy872BUk5n/zrWv/5vlL85ywFig0ilhCUqufDCSYsOLfkB8IEwtQO6QGbh5ZfRzdKy5dCPnzVItwjt/iPDBsO4kMJr0GB1Imn10NSwebteM8GMijRivulQF8SZhxFWpVE1fc93KhaRMt/LD52t2X2XQwcHk/qMRd4hYq7xwNDncUPYHWXpAx+27+x+5D5Qp1kwiAZiHsD4KSKMC7ZRECuT9qLiBJsmA2vPyF+hfnE8RVroK27fuCdQJ5yKHXrMlE20QIzBF0GUfBa8BZUJsU4RJNa07VlA23JckS7OhIIdpqa0+CvLuOT7OMf1OMQWrFMRSt+R+zficMv1S25As/7ve2szZALOMkFjKAm5C9ZxbdhLBbsO0nGokJ5VY58oGlRmHID0H3RPMWbltF28hlNpUKY/U+eIWXvDQtCRhAHBKb0ZBZ7CtNNbW/4StDPnS++GsJeFk5yuV7eOL3Y6lGUNvxOjzoXF6VjuAWZo5+EXSPykiv+O0FLVmS5k5Z3lGbDCDeCI7bEqeG/M X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB7726.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9Zh3JRfjg7X4prbXFmjdb6nzk+1gp6x7JVkZBGaaF8u2G8DfiLMgJAOWg4cy5qssSmHvLPJIE90/Ahb92GUBsaHLKUvoAiZZNWPBA7Evq6XxDfLn2FduvM13hiGMLJiUitNajwWgabjoGG7lXfZCSjnjF4razY7k7QfKGCFnQIXFlo3tjizKK5lDEhIABYvffjaN+UcQs6LCgU2p1cxUWlHFURdqQRZlZO1n7/LOW4IOCRRZSHxy6Zyp7tqHhSg9DbQ8WulRuGDAu02ddntO2LG70tjv7BgAStMLcczo0fQyAUlDOa27fpFosXtp3IgWWYkTRrdpli/FgHuDSk+lCJQr8lPXbF224PheNdxxKGGIt0OGtdAxeCSXKzsNH1/hT8HiIT/QASVMjtapsHlfqwt3xRQfcvFpnWaxHEu88Am/65MznFxbzXlGzcZ8khtho5gWI1dZqvNqh/wb6TpjNeC78zr7xUdj8V1UMc+etjpOH2S+Y0ii2Q44Ro1C0pwS8BrEkUBOeT9Mf4DuADBiVrcn40GoIXqMq58MfU30anrvCF7g8bzGOJr8B56lsPmBRy1Y/lhQLc1MlkP8ecoAxE4Wky7h7gLrIlx9QsD7SH5gGnyGuW2pGX8ErOGfYqVH9KhfG0GNI/6DFC9T1G7C0rf6ji1gBCASYaKQFsF8/XpJcBL/RQsI0mR9l4yXCTl7Kx+YADO/eApWndj9kbeYto3sXcHhMjfa/dltFeNNfx4UV4oqsxA/De3groOUMqMJFbUIXVo8w1cSBCrHoCnusFcQyirxjCsLwqbpaQhtAI5ctFI3RKIRoxgWuG7Dx0pBnHceIhwEM/FArL0cgl7M4zsdNCiJAootZT0P/gToq4xGJGvBdNxGoRWmM07VveUI/zaToYSpmMISfYR5aKkGk+W5PN2LNg7V/h7RWEuN9yMM5THFtoCSYqCgmHyTyZSSxlsvm4SXigVB7vTGftHVfmMUWpEN30pzhZ3YMg4Wr4Rv9ilGpI717zc5caO61Io7QBZ8/XwM/fetjSyIfMR6Z5tiM9K9NUqtPjIM/ybWCeBRi9YaVH2TMVO9vsOKA3CtvdXDcheTe46UQ8DaibEq51RsUwKAuIcX/SPv8FBnVMl2bVTufUoJm/RLxNrXCTF/V6jjAzwOswg392OVytGMOKYXtni7SQ5sntsACvMjjQ4yDhFohjG0lbjNE671IeUD+fC7W3ecoC8FdBStHg04fXPAk4AomdAGxTvBk1ki1aLmi9exRVhSN+BjGQ/vmysY+jVGfSj/GYvkeAAoC2KXaeAa+RTJ2F5AKBlM9DuO50ZRJpauw5OCnirD3rMtMkMBgHTfUQwmH2T9aMoTKRoFVUU8c9Vz2SCxF50bfteoyxK5y+8LrSBK37fpoCbkKxqwL+AKHy62s+a6O9Zp8dhFvbXrtzMmT9/VV7VWjvi9kuyVtmNii+k7ce7/ArmVtSsMwDZYQSv2bXZDQAdQ5F0GnKKNWbYKpkxqqO9eR60E42o1WfdbEUxtO4HkeH0VHugI6tfa2QGkomzOkaVIQVLaymVoBQshdunQ78fWltsM5onqU/4YkgopX9asFOjA65o8 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 09641212-ebec-49a2-3284-08dd64433084 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB7726.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2025 04:29:49.7542 (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: kH2pgEg8WvtZEu6xaH2nhUFrZxjrjtg6EJ/BtRVsM/ZSsTXUBd09DGJMjMi1OIT6I0+trsJKEJiA4VUjfJoQLg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV3PR12MB9260 X-Stat-Signature: bskyrehau35nwkuzr5gp9har8uyi37r5 X-Rspamd-Queue-Id: 72114A0007 X-Rspam-User: X-Rspamd-Server: rspam09 X-HE-Tag: 1742099392-425293 X-HE-Meta: U2FsdGVkX1/UE6wcL1EpB7ci2+fDNTUTo5z0sJo6oDKXdK/Srek3LjtLB/3U47ym2RSzF04KqG0WAxpiUSpdgCv5D7uzCHgkp53ErS9A/bK9Sm9DnmC3MXIme0Hxiax0aGJ+Ky8YEVfz/KKxu2DM/4kXovFL1KMuz2aY7acmnX8tUyFRcA+D4KUZkh7HGTyScLpLALOMMzy4c0eAqtGz/Tahji4BFChq2Au9VK0XExhUEP6XCcONUvZgolX8h2DjPhpmckm9y2q4A8yth9KHtldOVD0ThjmzhpxsD0VkMFqCCgZ7XjFQ9no5GkOHphZoLLXoctHC/lFgjG1TbV1VUz0s+gsU7IalqtBE0u2YPjYkBup9MQjbxq4PLXwf41w1Tp/T4puvOpClX6RwL91D/64UzvlmJTLO3pRmxoqoLgSkybPgR/WMZaZJUH9Xr6jLgBlAmBikpmex5cvZ3+9XAf4NHxkVxTNzZt0s8VbEsDSvYtlud4mhddHDyb78OAN5of003yqYFj67hHxXI8Qo+P+F9P4bsFeD4HmbYxHz4ZOVkYw3kMSdnyNk3c8FmYYkLiXNTY7QLi2uX5sFtFV+L9MvzPxslh2iyPSdnnQGrw3rSdAzC0WDHZNhAfK3xdDStZfW2gTQfRnTIPLbJmk8c94Nf7bJlJH7cKMI0YpU+Bv+0WrFEyuhNhJ1Rj5VOgcoGuQTCV6A3zBjsbJgqn7zBGM0FfmshsGxeOOywH63Wdp1WReFQlEVjStPyjoXm1mJkHcRW/CeYhMx9FDCIinPbf+ODS8jEdIh9CRu1bEtc/+7DAflQnLnyZTilq4PfTz7gtFJKINfJpsYymJYNDAcXZYr7F/ClUqs3RInMqTpPNXYlQe82BUEwTiaMN6fj/TTX52OESH4uMHGZl9tOaKcl2RRdnR1SrbPyUWeiAx0USJrfsrFN4PLyPs8RvXoIRGMC+XVE3teQNskln/2mLP kbwU+OeV 64QJVCSBlhrOEE/Rc3xqmGG285I6rSpeHbQ/I/RGGxrTi2evxhTd1Q5Iqp8VrPCBLAqQrF0EfyJrTCmeKB3552UVFFBNpad5FBcksUdt5p4whvF6hKPo00d00RLADRF4OfOEbVtvSYhbPdv51WwFAj0b4DEMOw64XV8eLodTkXbXqCWGftTScJnfGVLrmSbPHo41Y5ztrvdaydO7KTOPK2GmcNqwKLU+9hK7jSp7M2J26wviZlK5JNGs3BXnGbkRyHmH99/iVEAamQdFe9i9YUUD4E/Yqw8/s/ir4ynrgmncgCfBTi18z01OON5hFgqgfdjeeyKc6ldW88fFT9qonI1MnZJvducGXkl9Q5P5yOFXJE+2oaHf7Ovbs15LRxtmbIrQo 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: <linux-mm.kvack.org> List-Subscribe: <mailto:majordomo@kvack.org> List-Unsubscribe: <mailto:majordomo@kvack.org> |
Series |
Allow file-backed or shared device private pages
|
expand
|
On Sun, Mar 16, 2025 at 03:29:23PM +1100, Alistair Popple wrote: > This series lifts that restriction by allowing ZONE_DEVICE private pages to > exist in the pagecache. You'd better provide a really good argument for why we'd even want to do that. So far this cover letter fails to do that.
To simplify the initial implementation device private pages were restricted to only being used for private anonymous. This avoided having to deal with issues related to shared and/or file-backed pagesi early on. This series lifts that restriction by allowing ZONE_DEVICE private pages to exist in the pagecache. As the CPU cannot directly access these pages special care needs to be taken when looking them up in the page-cache. This series solves the problem by always migrating such pages back from device memory when looking them up in the pagecache. This is similar to how device private pages work for anonymous memory, where a CPU fault on the device memory will always trigger a migration back to CPU system memory. Initially this series only allows for read-only migration - this is because the call to migrate pages back will always reload the data from backing storage. It then introduces a callback that drivers may implement to actually copy any modified data back as required. Drivers are expected to call set_page_dirty() when copying data back to ensure it hits the backing store. This series is an early draft implementation - in particular error handling is not dealt with and I'm not sure that the management of PTE write bits is entirely correct. Much more testing of all the various filesystem corner cases is also required. The aim of this series is to get early feedback on the overall concept of putting device private pages in the pagecache before fleshing out the implementation further. Signed-off-by: Alistair Popple <apopple@nvidia.com> Alistair Popple (6): mm/migrate_device.c: Don't read dirty bit of non-present PTEs mm/migrate: Support file-backed pages with migrate_vma mm: Allow device private pages to exist in page cache mm: Implement writeback for share device private pages selftests/hmm: Add file-backed migration tests nouveau: Add SVM support for migrating file-backed pages to the GPU drivers/gpu/drm/nouveau/nouveau_dmem.c | 24 ++- include/linux/memremap.h | 2 +- include/linux/migrate.h | 6 +- lib/test_hmm.c | 27 ++- mm/filemap.c | 41 ++++- mm/memory.c | 9 +- mm/memremap.c | 1 +- mm/migrate.c | 42 ++-- mm/migrate_device.c | 114 +++++++++++- mm/rmap.c | 2 +- tools/testing/selftests/mm/hmm-tests.c | 252 +++++++++++++++++++++++++- 11 files changed, 489 insertions(+), 31 deletions(-) base-commit: 0ad2507d5d93f39619fc42372c347d6006b64319