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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 62C98FC0342 for ; Thu, 23 Apr 2026 15:28:06 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id B2CAE10E34E; Thu, 23 Apr 2026 15:28:05 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.b="OAloBMss"; dkim-atps=neutral Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010042.outbound.protection.outlook.com [52.101.85.42]) by gabe.freedesktop.org (Postfix) with ESMTPS id 86DDD10E34E; Thu, 23 Apr 2026 15:28:04 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=hNZK948Q0/ZqHIHS6IPQ/brAULkHrvIu/+60WlPqXeuwt0CdfqToNPxqNEe/RDmbPPFln+UPLRhRoL0YzVwLgxm9CASkxG60llIA8zGSY2KzJ+llrp1AKuHZPbvEEy1vkj4gLyd0EbTM9RhsHBF/SmfLslx+NSu8HnWM/Lq6htOTlU+6zFAIYB/Er2M1VTRPjOvrtHiTDzlLvQ/S7zR9THDDwIkbVQ21TNpKyvXuEEER24SFha3yaX8e2Dfolyty5450rBtzTYik82/3OL/u8669eVjVIzZSQO/z2rccD7jrEvYqsmJfMwdLui/RLVXWcB+QVha+RqK/WQQpgY+d2w== 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=JPvssGjHJ9jeYuJ6i0aenHUJ/YEeN9RDC/Q46n4NE20=; b=UCqIe1iWgJoJreibs08s6MacXp5nVPcp4La5gsundqkbfnSTqgNjTTvvod4Z3zhZRBoaxZkhaDoAkOaZ+NIpdT5UvLWhSsWmTAT4FqVn6KHFPD93hQCqTrRmSFX2rARg6KuDVevdJxZw/rj2qdmH8enrwTEMd25WRPfp0lKXv15I1jRmAlPu1IfAanoq89CFvJGhsDEU63xHeovKMNbGVFWtnVJ7herJg+qaYwZC09A9MRzqRJMOYBbxZi1Zp0N5uWQg1ttb9S6T6Uep7tElYvSwUGiXbSwBySic0GgcgSHf3sWmDAW5BRn3RRjwILLdCmr1SVvzxNX5q0+gDj2tRg== 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=JPvssGjHJ9jeYuJ6i0aenHUJ/YEeN9RDC/Q46n4NE20=; b=OAloBMssa+gKMvOtVYu/H3Mcov29acipxHMV+vybG+HJWkKAQ5OPvvm/E2lKkZwWyUzWg6wJk4KERl8XaOrrUCizHH+wDCh6rlGcX4j3mVnyuHcX7Kdse58GO1r7+VnlnLJxWY1aMA4+YiDT21EJusqmXzveWXEek9W9BblWJL10j92Njvp6jfnrmSaMf9Zqm1aYZh2WCBsMD1htE7/EhikVR1hnBCzuy254+lyByM1uJbIMgHOBxw2e3fbzbJIIQoRb/OFT47+R5qIixEaTIcaQy6tdlYBL8dGDInpwYuH8w7BXkAlamHCSaKB9+YWru4f1L0gCMltED0tw1cYFIw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by CY3PR12MB9680.namprd12.prod.outlook.com (2603:10b6:930:100::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.20; Thu, 23 Apr 2026 15:27:59 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%4]) with mapi id 15.20.9846.019; Thu, 23 Apr 2026 15:27:58 +0000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Fri, 24 Apr 2026 00:27:55 +0900 Message-Id: Cc: "Lyude Paul" , , "Daniel Almeida" , , "Danilo Krummrich" , , "Matthew Maurer" , "FUJITA Tomonori" , "Lorenzo Stoakes" , , "Asahi Lina" , "Miguel Ojeda" , "Andreas Hindborg" , "Simona Vetter" , "Alice Ryhl" , "Boqun Feng" , "Sumit Semwal" , "Krishna Ketan Rai" , , "Shankari Anand" , "David Airlie" , "Benno Lossin" , "Viresh Kumar" , , "Asahi Lina" , "Greg Kroah-Hartman" , Subject: Re: [PATCH v12 4/5] rust: drm: gem: Introduce shmem::SGTable From: "Alexandre Courbot" To: "Gary Guo" References: <20260421235346.672794-1-lyude@redhat.com> <20260421235346.672794-5-lyude@redhat.com> In-Reply-To: X-ClientProxiedBy: TYCP286CA0285.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c9::20) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|CY3PR12MB9680:EE_ X-MS-Office365-Filtering-Correlation-Id: a379d55e-4692-4184-501a-08dea14ce648 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|376014|10070799003|366016|1800799024|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: BiWXR3W338mUTw5RJ/EMzK3yYLKKyKdRdBJmEzSRnbkwsXjhGROcDoVC+5cW36QWSwfsJ/v7kUOPkHC+Fr3Qmn9qWDK6uWFVuqvA5Y4Zrx/LCKNKZIvwYHcDxq+Bz8IRbDJ+7bdmVwElj3ZypCvjuLx4LPEPoeRFBWpl9x049EA2gJ0VFRGOcCUajPOUrR7U4fdYnsagw3oIzW+sTyMURWE3kemQA/yX/mceeVKzTSmoYPHnQfARL0nBDGv/N52AUlajCp3q5wnm4ZOCFRQ1FxB1pyu61rjZHJ140/YB/hLeJVo9RUOXPI3tiPCs27QDLBhB13myc1SbTzPNktyleGhe1wP6h9Wl87ANEcJFsglPT9+MtX+cUMDb/bvDJMIaiq+dYncds/qgPmevLrDdXQr/9rwrAkVh9BhC0yEvSL93IFWGjPBehMHjqeBaD1sjLfvcNhVecz86+oNb/Pjq2XpaX3t9A0EMXpXKYu9h8nC8274QGWaLYUqMalL+g7jvmEtmGbZukHaDK4TiDy3B1TUKg5/KykKLG3nZzazn6e16VGLp8caTyuDG48nqknJhqqWkFz0APlxSHhBqo6jGMSJhdUky+vvl1ZXgWzfjLJWhh/AnClu9LFfbigXQCgqrB6YUGsh9oBSYSRjwZIQutZuKzwaSZFVbXm+LIdEtxRL/5BxskMmpmCtOHRMo7dNxZ/vCnvP87YteHRogS6EY/KB7R15iJFKZh+vCAbPhoY9bW9jd+fz2UAllD/VkPv4B X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR12MB3990.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(7416014)(376014)(10070799003)(366016)(1800799024)(18002099003)(22082099003)(56012099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cHA0MzRYTUVUQitHbnFwYzNPVGtCOEMvVmM3MUZuKzByRFJ1L2dYMkJibHFo?= =?utf-8?B?MnpkM0s1QUs1c21nTEVIK2h1MC8yMzYrdkJndFlocWJmOE9KU08xMkZJTWRS?= =?utf-8?B?VGlCMzBaaFQzZko3WUJITnQ3MGVjdG1NVGI4LzJnb0Y2MEZBeHZTN0JjaW01?= =?utf-8?B?d0xqU0FKYnEwdWhqQ05BNVBOeEVzMm5NQUs2Yi9xdHk2YmRtdytmTU5CV1FX?= =?utf-8?B?V1IweWtrRVM4RUNsc29IdGd3cTNkb2ZBek9LWXlLUUIvY2g0U1J6blRLU0xB?= =?utf-8?B?YlorRWlNSzBFQ0FXTHVaSFArekFVUllTcGV6dVBpUkc0ODhORXBQalQzTmVG?= =?utf-8?B?ZXFyWlJxRGYvUmd0MHNtaXltcFdsMDNYWGIwZlExam5GZG52RVg1dmdXNDl6?= =?utf-8?B?Znl3NkpoQzhpSk1nOWJIZm5WdmM5MjZSckdRM284dHA3QnQwaVk0ZDZwNzJp?= =?utf-8?B?a3Q3Z3MvRTBiZ0EyNjhHK1ZWQmJWcXVNMlFPVW0vN0RzZDFYQjUwQjBlMTd5?= =?utf-8?B?czd5RFY2SWZVbVpCeUJzNk9WWDM2YTVSSkJLRUt3U2ZycElWRU44TU5hdi9Q?= =?utf-8?B?SFJibkt4VEkrVk4wWVB3S3BtWnZocFVwV3JEOXI3N0lmSlJLVkhxWU5tYWY3?= =?utf-8?B?V1I5QnlGTVBBOEFUL0hkT3VoUFZnT1dGVk0xdzh4bjdPL2pyYVJWOWhkVlNa?= =?utf-8?B?YXp5bWRKNXdQL29UTzVjL2ZVNTZTdFpSRWlRcHRUK3FzazkzbTJ0elhjTXpJ?= =?utf-8?B?SVNIdENRczJwNk9UNk04V1k5endwc0I5THlnT3llaGl1VGtaaXprOHluVTB0?= =?utf-8?B?M3lOOURnMVNCMnJoWFNCNVZxbmlyc2YwNEI2a1JlTWhGNTcvYmtNeTJIRm0y?= =?utf-8?B?c3lwMyt2MXlzbnVsemRackxoM3NaeXJKSjZndWdtelVWZ2JON2U1NmhXR2FV?= =?utf-8?B?TGdnSDROQm5JNzNnWUlyY0gwTGw5bFlVcGVKMWROLzcwLzVhRjM0VCtvVm85?= =?utf-8?B?NGFRUnZYbFpMTENLemlBYVF6QWx3dHlXTkJJUWVlQ0Jad0w0R08xWnd5T3di?= =?utf-8?B?VWkyWU85QTd0KzlTUWhKSy8rZUlJMEZrd2YwTnZ1N2llUElaN3VtVlE3ZzZp?= =?utf-8?B?QmZuRTFFWEg1bkk5S096QndCZCtyK0tzRFU2V3ROVHcrN0VDY2FnSXluaEgy?= =?utf-8?B?U1JhTWFBSlhWdTZFNktmNG9RbGQ5VlVhRHVjc2o4V2x5MS9yVHgvRG9NRTRp?= =?utf-8?B?WTdEUFpPSXBWd0YzWDk5eW9kcWpMUFg0NVRyUjVJbmJKOGROQ3IxRjYycVc4?= =?utf-8?B?WXhYQVBTZUt1aDhGWjBETFVSVmhyekdwajM5elRjQXdFNXIwVkRNc056STFP?= =?utf-8?B?MVREcGFiMlA1bEN0YTEzb2R5aHpsZFVnM2dMV1NwdTZqM25PcmR1SXd4K1BW?= =?utf-8?B?Q2tLVDN0RDU0TEI0UWowb1lhckpXNkh3akNjUmp0WFhvZDlqelROSzJ4VDlp?= =?utf-8?B?WVM4dkg2WS9iVjdPLzVUVTk2ckJTU2RzWStoaThmQ2E4WGdORmFRK0MzbWRy?= =?utf-8?B?czBWQ1NqRm9aR1EzOFpienBHVFAwbWhrTHVsSWlyU1BQTTdJdFdJdzBDcTRT?= =?utf-8?B?WHd0RDVpdlN5d0lXWVVMMnhzZStXUTdTQUJKR3krcmFnQlQzdTdSbHdmK1dL?= =?utf-8?B?cTZhUjFWUEpEQkRYUXhRdHZJS1N4NzNVdHE5QWRjMUZZd2RYa1M3YkNNSEJk?= =?utf-8?B?MU52VXJFYSt6Yit3TnZuRHBhQmdvQjZnN0E1ZDZNNjAwcE9MUmZ5S1QvY1FM?= =?utf-8?B?SW43cE5FRVhIZGdqVmhOSXRnSmh3YWVBVm5wdmExZjlhYk82Q3lUZTlzMk5E?= =?utf-8?B?ZVJjS1hjUElXWjFUdWVCcW5FOGdrTlBaa05jcHJ1TzNSQWJ6Qkp2SDZMd3FG?= =?utf-8?B?ekx4Y3dDanN2RFFSUjBWbzNCb0NrdS85UElkUXVPUzMyVG9URmt6YzJNU1M1?= =?utf-8?B?bjNFTkhsOFM3K1ZoOEhwTmk5aVdqcDZhamRGMk02a2h2WVdHNnlsZzBTQ3Vw?= =?utf-8?B?aHRTaUFMbXBHb2U0S3ZGTzdLeElwejIwZ0dodU5YZUZQWFNXTm5DbTFLUCtJ?= =?utf-8?B?eHhHNG1QQU9jRjVFNkQzcGhEQmtpSlJQM29BYVVVUU1BMk9yK3Nkd0VGMHcw?= =?utf-8?B?b0hBY3ZObGdnblFaZlp1R2tTVEdYS2Q2NnRPQTl6TGkxNDlKOVYwd1pnTkNU?= =?utf-8?B?U1ZNYng1T2ZXWkE1eWpjVE81aUN1VGR6Qk42WXdGNys0M0o2UjYxTWF6eWty?= =?utf-8?B?UnBSOVNla1Uxc0daWEZYdk9PL1lBQnBRVGtHQnF1OWRoRlgxY244NGpWei9u?= =?utf-8?Q?Gh3cXgrdtPIiM+bpOPnytDcHMXs9VlwFvDUgZFupJ0ePU?= X-MS-Exchange-AntiSpam-MessageData-1: vwPhM7V9sliNCw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a379d55e-4692-4184-501a-08dea14ce648 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Apr 2026 15:27:58.8096 (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: nue/VyjnJ2Tb/qrGn6z3gnD1QGqhVASCpg/MSRqWFaIzb2pFrjoXS8I/Sr4SmjY0FbOK31EEtTuxvNpkCS2JIQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY3PR12MB9680 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On Fri Apr 24, 2026 at 12:09 AM JST, Gary Guo wrote: > On Thu Apr 23, 2026 at 4:01 PM BST, Alexandre Courbot wrote: >> Hi Lyude, >> >> On Wed Apr 22, 2026 at 8:52 AM JST, Lyude Paul wrote: >>> In order to do this, we need to be careful to ensure that any interface= we >>> expose for scatterlists ensures that any mappings created from one are >>> destroyed on driver-unbind. To do this, we introduce a Devres resource = into >>> shmem::Object that we use in order to ensure that we release any SGTabl= e >>> mappings on driver-unbind. We store this in an UnsafeCell and protect >>> access to it using the dma_resv lock that we already have from the shme= m >>> gem object, which is the same lock that currently protects >>> drm_gem_object_shmem->sgt. >>> >>> We also provide two different methods for acquiring an sg table: >>> self.sg_table(), and self.owned_sg_table(). The first function is for >>> short-term uses of mapped SGTables, the second is for callers that need= to >>> hold onto the mapped SGTable for an extended period of time. The second >>> variant uses Devres of course, whereas the first simply relies on rust'= s >>> borrow checker to prevent driver-unbind when using the mapped SGTable. >>> >>> Signed-off-by: Lyude Paul >>> >>> --- >>> V3: >>> * Rename OwnedSGTable to shmem::SGTable. Since the current version of t= he >>> SGTable abstractions now has a `Owned` and `Borrowed` variant, I thin= k >>> renaming this to shmem::SGTable makes things less confusing. >>> We do however, keep the name of owned_sg_table() as-is. >>> V4: >>> * Clarify safety comments for SGTable to explain why the object is >>> thread-safe. >>> * Rename from SGTableRef to SGTable >>> V10: >>> * Use Devres in order to ensure that SGTables are revocable, and are >>> unmapped on driver-unbind. >>> V11: >>> * s/create_sg_table()/get_sg_table() >>> * Get rid of extraneous `ret =3D ` in shmem::Object::get_sg_table() >>> V12: >>> * Actually move sgt_res in this patch and not the next one >>> >>> rust/kernel/drm/gem/shmem.rs | 192 ++++++++++++++++++++++++++++++++++- >>> 1 file changed, 190 insertions(+), 2 deletions(-) >>> >>> diff --git a/rust/kernel/drm/gem/shmem.rs b/rust/kernel/drm/gem/shmem.r= s >>> index 11749c36e8695..a477312c8a09b 100644 >>> --- a/rust/kernel/drm/gem/shmem.rs >>> +++ b/rust/kernel/drm/gem/shmem.rs >>> @@ -11,25 +11,38 @@ >>> =20 >>> use crate::{ >>> container_of, >>> + device::{ >>> + self, >>> + Bound, // >>> + }, >>> + devres::*, >>> drm::{ >>> driver, >>> gem, >>> private::Sealed, >>> Device, // >>> }, >>> - error::to_result, >>> + error::{ >>> + from_err_ptr, >>> + to_result, // >>> + }, >>> prelude::*, >>> + scatterlist, >>> types::{ >>> ARef, >> >> This fails on master: >> >> error[E0432]: unresolved import `crate::sync::ARef` >> --> ../rust/kernel/drm/gem/shmem.rs:36:5 >> | >> 36 | sync::ARef, >> | ^^^^^^^^^^ no `ARef` in `sync` >> >> Importing `sync::aref::ARef` seems to be the correct way now. >> >>> Opaque, // >>> }, // >>> }; >>> use core::{ >>> + cell::UnsafeCell, >>> ops::{ >>> Deref, >>> DerefMut, // >>> }, >>> - ptr::NonNull, >>> + ptr::{ >>> + self, >>> + NonNull, // >>> + }, >>> }; >>> use gem::{ >>> BaseObjectPrivate, >>> @@ -61,6 +74,11 @@ pub struct ObjectConfig<'a, T: DriverObject> { >>> #[repr(C)] >>> #[pin_data] >>> pub struct Object { >>> + /// Devres object for unmapping any SGTable on driver-unbind. >>> + /// >>> + /// This is protected by the object's dma_resv lock. It needs to b= e before `obj` to ensure that >>> + /// it is destroyed before `obj` on `Drop`. >>> + sgt_res: UnsafeCell>>>, >> >> I didn't like this `UnsafeCell