From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010001.outbound.protection.outlook.com [52.101.201.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A44633CE86; Thu, 23 Apr 2026 15:29:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.1 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776958161; cv=fail; b=s2A8Ga2OplcEkgS1pKUa6Bl01lDs7UNe1mk+qVsopKmfFYjnH357fqv/cyyt9SBqzTC9dAZ6S8eEQtOoOrarVq3rlPuh3XBDsYQJ/i1x5WLHKiEVS5nhuv80kdCvdsxS26cLv+VVoY9+MJ40qmnQtu2n2YrkqpWc7rt8/jMGq6w= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776958161; c=relaxed/simple; bh=ncesW0ivI7ASXwdEv3pK2FnffhaYqNSc2Dn+2AtIka0=; h=Content-Type:Date:Message-Id:Cc:Subject:From:To:References: In-Reply-To:MIME-Version; b=IxHstLpY9noNP1h8IZySvBdZhDenFt6PZoJqH4kPYDSSae8Me9jgLKucEhwqMbZy27cAuokSEPBXoEv6CuHqqveqHgMxqAfyNn2w1fuuPwlsXbmnOaaaWfebVqpOX6ksNGadYg67tDf1L5pOEmLWFEl7+38k2Qn7er2sh7QyVWY= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=GZ84eIzi; arc=fail smtp.client-ip=52.101.201.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="GZ84eIzi" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=g8+8o1GaEY4NBIqYouMQq6L0DYWEDecud1I2d7eAZ5pyfFn2BxgDUQNuxTBMwMV+mxZy0zttuvttCHVrBS5qY/qDHSCRXmn21e0Z2zT571NMbB9lbAkY0I9K9c0MyBKIIQyRX526r6gh8bhpUs26M1bgJOJNeuzGw3HAvUgA0zj4p8sLKz+K1b8vahygkMnzJdPccUqFe78ARdMnzsSoh56417TkIlGe72wozzQLzM2bn+RaIeqYWn3YJxdjJlVZn7qvTXdLaPfsjmJJ70XEGN0tX9pc7ZUveKWW0Zd4aLV6G1wn7DebrZs4mSewdyvMiEJkGNRkB5cnRQeDlLBz5Q== 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=S6ZJfTCMAzUjyli0jIb33VU82mNh0w/YKCORM6mv2UY=; b=WXb9cjoNVP7+3V08KmNV32HHG90V6e+ZNmBJoQeYtRCwm2Xvo1F4xj89qcyVopx3934hlxupVlcnyLclDEFbcmj9V1QBKhVPmv2bUtMwdf+YiHk1xRnckVvcI9VncBmhpCSJPBbaFjjs7KpaoOsJ/EsmsYtynETC7EZKiWggdskyrcy4aKlD5R0p+tRp7wdSyjsAVzAJwShPeTGSt4S5A8J/oQ4qQrK2LPdSLGn2S2JIc2GsXOM7IAGd0CeOmM+oAQx6o1xFuCNxCQFDhuitTpmadZWCCCMNHKBrkIyBBW1H589P6iQXq82DmLYUj8S/4LjcnmjSFZLIqzAaRcja2Q== 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=S6ZJfTCMAzUjyli0jIb33VU82mNh0w/YKCORM6mv2UY=; b=GZ84eIzivEtk//jUKkHCPUCwOcpkfaPTHBX4P7ZR6TYdejOVvWOaNSAzdqgHEIlEUmryesviz/L/iehxkkUbbNiRgFE3uL0tuzPIQbSwHuJmqUbo/MtmAUHFWo9hd2UPyxVlUS8e4/Bc2S1eVo69BdSqbq/oijxUwzUd4p3Ghb1wHLOdyK2kpcz2V+XHWCDLQJJsLtzqafjabcesz3NWcA3dq7D7lwMOvn4yVBdIH/gODNiSfoORs672bMzoLA+TXT0wHzRgOc4bgmx0Hs/BoOjIDMIcsjQlIDdiPUtZYC1DMsOSbJ6t2gNHuA4YiWo5FcqHBr9YjVOS6jHTihOnRQ== 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:29:09 +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:29:08 +0000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Fri, 24 Apr 2026 00:28:59 +0900 Message-Id: Cc: , "Gary Guo" , "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: "Lyude Paul" References: <20260421235346.672794-1-lyude@redhat.com> <20260421235346.672794-5-lyude@redhat.com> In-Reply-To: X-ClientProxiedBy: TYCP286CA0245.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:456::13) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: rust-for-linux@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|CY3PR12MB9680:EE_ X-MS-Office365-Filtering-Correlation-Id: d74055e5-6319-4fe8-bfc8-08dea14d100e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|376014|7416014|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: A8NTlbHZtIzVwMHPJSUJzsrYdQT2U11H4Ywp3muuskoxwJXgCPakZ66M3XROeDgqsd1PbNouZwNS0eaoOWwmCitmBJKsALVVLldOyE8V+7c81Xy6wk5P+x0eMabygP+Iip2GlVQT5CB04QCYd5CSbejBdzUrEcHCEx8T61bjZcDRdCItkvIt3zAECwoCXwwUomBCm3MRaN5Wu6nqIc1VWQU/pmb4DDQA21EWcR1X4kem1r5/Kd+cqM4yYJxC2b6sA5Raxf4OPyjDmDLl7U1i7E0mAfbjl1W3PFMxhVkQMVyHAqGs5w+jjFvz6qP6QsgBocFL5t04RV7FyT2+b5qZsYpYLR8PkDfiXx4T6KRV7YnHf4Zxc+NLy8Wc7IXrs4n3hvSe/sLxnXVg92OVLjwncW88CtX4lm+EktGT+bqihB1x6Ky/QyBCjadYdvzdRAppbeuSxfjbutd9V2jQQdwaLMJysUn/Zq/vSBWPgIbLcx2k5U63IYl/MNZyCRHWVvsslz39V7aFZapSv5/E/LEyQmkP1KHGBZy1i+6cbTEWbUJ36ZMzrnxgL4lbrVT9I2nGZ7cKRgZvNjjYe3A4IuOxqDSY4fjUSDFCeWvt7VdllN9SLINQHStu9dH/14ogrmnM+K2aoZ44xwUhPqJXfOh5kR7IK2JEWL/+5YALaSV50r3Muv9m3+kQ/8L0r6piBkqlv0JsyLzDIKMbmDa3RiadHPFTPtkiVUXBIVASX1NdDY8= 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)(1800799024)(10070799003)(366016)(376014)(7416014)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S0REUFI3bitZN09nWlB5Zkp2bGpiUTYrVG1DZm9vTU5RWnp1N3AwakthOWt5?= =?utf-8?B?MlNnUnBXSGhXc2NSYllLckZuKzYxeXd4aHJCQWYvN2JJZEMzb1RraDlYYk40?= =?utf-8?B?TEVDVTZMVUtrUVFQS2xqZFl6ZHgyK3R4ZmxpTkd3R1M4VWZGRWU1ODdTNHMr?= =?utf-8?B?QVh4TElGenlwbm1ialhaNlRMZGMxNFdRVThMelEzcGZxNXU3ZVE5SHNDd0oy?= =?utf-8?B?amo3bjdxL0ZLVjhieHlFK1lTbmNzcC9TY1NpVW9uWU1ERTBIZnRpRnM2T0VD?= =?utf-8?B?UWk4SnhLem1nWkRtOWJNKy9mc2NhclBRQ1VMVVJFY2hscXRxV1VTb3lGb0pM?= =?utf-8?B?ckRsWUFLT3FuZlBKbmhUZzFTWlBKTS9KTVljMlF5YmxjMExlOUZpcnlzWW5R?= =?utf-8?B?QWhtUURUSzhkQXZDTjNwaTRGNnRKU2U5Y0hmcHBFY1R1bGxpbGpxdUhXbyt3?= =?utf-8?B?aHBUWlo1cCthNmhwdnMxTVZoSzNYRTQwNzJvODhKQzl4T2ZMeHZmY3ZRZ1p3?= =?utf-8?B?UlVrak5pUDR2QVdaQzVJMWhoR0UwVkRiTGJPR1BUMFdVUW00SjF0RVF5N2sx?= =?utf-8?B?cUwvQmQ1YXFLTG5jVlBPSkxOUXZmT2hvbThOK042WnBNUm0zcjFJazdLRnBK?= =?utf-8?B?V2tlaCtBMTlLUVAwL0tnZFFjZGkwbUxpTSthaTZUOTl0M25ESHc3bzJGVnQz?= =?utf-8?B?QjdkNUpvVVNZZVREdzRLUnowMXFZZVFiL2VoL2p5MzNqbFhobzNienVpRkJs?= =?utf-8?B?YkFWSGRIdzVsYno3ckk4QVZtb0NkVHVQaFdNdGVlUWkxejMwSTV5cURMdDBm?= =?utf-8?B?Mk5LU3RFaG5QdzQxaDhVNmFDWkErakViV2JOd2dhOWFRNkE3OGN3UFY4QWlC?= =?utf-8?B?eGxmVlVxMmdabUZ1ay9kbzBzbGJzU1psbElMYy9xVmlBeDVLVnowVlZ3UGdQ?= =?utf-8?B?WG9pei94ZWIxRVRIVnczcFVBSW43QkZTb2hZUk9hb0hRejRLKzFMc3J4WVcw?= =?utf-8?B?bE80ZEtRYnVCZ2ZxUmYvL1M3bUhUSk1nVVJjS1dSdFNqTEQrb0ZjQmQ5OC8v?= =?utf-8?B?N0RmalhYSmtrV04rd2JNcnU5Y2dvOG1zbG5sejVpbENPM0U3eDVZUnpaU2Vo?= =?utf-8?B?SzdpY1VpeDR3M2FlZ3RKYzlCR3FldDB2Tnd3c1J0em5HZlo5aFRsK2lVTUV1?= =?utf-8?B?bDU3VGNKZEtKd2JOMU53c0pJc3dPNGdsWmtzMU5vcEhFN1ptazVCUzJGaDd2?= =?utf-8?B?Q2xhN3pYU0gvWTRyd1NmenBKbHd3NHd5b0NrOUZJNWN0SDJhVC95aW40Vjlm?= =?utf-8?B?STk5bjBCV0VoLzF2WlQvRlQvTVluK2tSdEFCRlV2cktBMnNqZzRPSUVXNEFL?= =?utf-8?B?Q0JPbUQ1dGdMVWtNNXgrQ0ozNytCMDBjWkJ3U1FWZ0hCdWxXRVVMVnJORFB3?= =?utf-8?B?WHlObTdVa0J2T0tSYUptVkUvWGsyM1k3OFc4d09IMUZYWDl0UGdoeTFrN3Nz?= =?utf-8?B?OE1SNjhxMm8ydTdHZHVYcy8rLzNxUjRGengvY1MyVE9NbEtCYWpYc0V4Y2h6?= =?utf-8?B?bU9DRm02UTE1VFNMM05EWjUxV1hEeWpyeTlFQ043K3g2UXllTml4SWkvcmlQ?= =?utf-8?B?QzdPb000VHNNVkgwSXJxeUYweXhRV1lLbE92RWNRc1Z3c3NwMU1HNHBZM2hn?= =?utf-8?B?NjYvVGNoMWNsbjM0elZBZWtUTWpKRDdaTjZlejlUTUlEZEYxc2FSbHV4L1ll?= =?utf-8?B?R1RTd0E2ekNZTjBXNDVqRmlBVkxZTFJyMlp4U1F1NjduZ2VGY0lDMmQ1NDJU?= =?utf-8?B?NHBaQlZnQ0Jka3pMaHlDSHZEWXZaQ21zVThyZ3V4OWkwQ3IzS1FBSW1ZUEZK?= =?utf-8?B?VXhEWm5yVTdpQk5Nam9tUlRwdklSVTdiWGwzRm8xZFdIazFFN0tGOHdpUnd4?= =?utf-8?B?SWYzVC9PaWRJWitPdHdXTG9BUnl3emRNaVJkcWZPQnBTVGhTbnQ5Z0djTHFL?= =?utf-8?B?aGxudUVjeVR0SktMOGdsekFwT1ljVDdDT3NaVlJPUUxuNEkvbTlpTkREcDdS?= =?utf-8?B?UWJqY1NyL09WUUwyL0ZZcG5nc0l0M2VFampFNDJYNWw4bFYvNVVpbzBGQmR4?= =?utf-8?B?SkZKSitsS1pLdCtSRkRWRTBCRk8rYm9VV2ZkSjQrenhQRVkyWW9ZbGtoRi80?= =?utf-8?B?RWhtdmdIUkxiN29IU3ZvK2dGMjZ2eTlyQ2pnMXZQZ2t2d0ZKMVpCaXdQWFNl?= =?utf-8?B?dU0zS0dzZFkvL3FjQ0dFSWhLam1oUnRzLzFTS0xMclFPN0dwVmExcUhkdzlX?= =?utf-8?B?cmc0L1NxUGFUR3dmMU5lR2EyaTdvc1VFTUJKOG5nKytRdW82NHVmemszcGtY?= =?utf-8?Q?3qhxiHWw1XYtzsk/zcoGIcmBtdDhv3AFTxHcMChz6iEY6?= X-MS-Exchange-AntiSpam-MessageData-1: OPJrWlpaae7gfA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d74055e5-6319-4fe8-bfc8-08dea14d100e 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:29:08.9085 (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: F8Sw8cmtNUWsQz8YypcXySCZozNRi2hJwuRB88ZniHcGP6XqkQaf/M748G5Pk9OG3vdfjtHSCcDpn1akosGHRw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY3PR12MB9680 On Fri Apr 24, 2026 at 12:01 AM JST, 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 i= nto >> shmem::Object that we use in order to ensure that we release any SGTable >> 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 shmem >> 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 th= e >> SGTable abstractions now has a `Owned` and `Borrowed` variant, I think >> 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.rs >> 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 be= before `obj` to ensure that >> + /// it is destroyed before `obj` on `Drop`. >> + sgt_res: UnsafeCell>>>, > > I didn't like this `UnsafeCell