From nobody Fri Oct 10 09:36:29 2025 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2082.outbound.protection.outlook.com [40.107.223.82]) (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 40F10265286; Sun, 15 Jun 2025 12:37:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.223.82 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749991047; cv=fail; b=CAjld5OD62Lqcclp0vzPXp/PI2rNfl1zYjJWtjccaD6EX2EwRmRqm/mX98U0PS0ZR9IVNRcYpVZCxD4TsqwE4J1AL4FSwUZjIdh4Sk4OvihQvTGKwU2UHsj7nlyWRpWDQcCTI0T5Qr20PP2X2EgvDt6AG8ZZa9bZE5pomLmz0WI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749991047; c=relaxed/simple; bh=0qcaxHYbHNLPOTsHhaTlJX2BljSDY5zeQ3iD9VHENwI=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=eqKYRdUqFQsXAiV6dSIpwOGGSOXxey1UsiAek2k+TahNtlNMYqyimLQvagESeoiRmjkRBdMwzoJjRyYOeI2qK6C9fWq8NPpSmLxCneh2KQKWnN0lvUPzqDbID5nV8+1NCYO+tWjjQ5MgtMxVizotAUpreO2ayBUNZ9h2IFfvRsU= 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=Z8x1LWn1; arc=fail smtp.client-ip=40.107.223.82 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="Z8x1LWn1" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=X03PKvwcoLYPrehdECtQXIf+Pu7ag8lYgFV02ikgX3/f6sYLV25pbvfSPFAl8BYrjB8KUhwhL+d8Ey+sWJwx9zmzqygMonWR0NOsLs73DuxyZjLP0suOHnuicw/IrrsNOY2Q+8HixIKjapwrT6iR9490zMRIBPQUK+esSdT9XC61LBIFU6duwDPS+Lcvu0PD2WdYO3iI1LNQH9zYt4cT2l85+FZBuh+QSEEtrzdq2wkehuRqwWgsapyKX8l0k5CSilrhO8/SsmPQJt6MJZGOgQAo3zJuQUpY/U8u+mHv02XE9T2iWWJU1S6eBKCRrU4G+7l2luFHWXHH+35gUwXo7A== 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=oDHpQK2oqEIgboVrFKNl31EYhLgFoVBR1H4T6J785lY=; b=N9i61DvmpyvoO+swBGtJnidIictwyvMTli4Kqajvfx67rQvajaHQLFvdF+y/EwZgkBHfGe45uOf9Hryhz2cRHNjYFxrHVO5JQ8RO577d0bVaMIkWjzQn+tcYrzjXb1ArAPorTC97lZfXlrEW+miZROJSC9Xbo86ifeEPI+s9xEk4MtQlxVFfKy4lk8j7g5rrdbA5G1EIBon0r2mQD5AETLBgt7lLD8hreSEr4BYdMbPlzSw2A7hMFEHRz2D9MJnml6YyUbXL/q6sUvJQODt+sJQBCl9Cb3rtGNoMeIdatesMPj9v4GCa8H/w40bRIzeQ0rrTnsyt12tArhWoe1CbhA== 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=oDHpQK2oqEIgboVrFKNl31EYhLgFoVBR1H4T6J785lY=; b=Z8x1LWn1bJpR7Q+9Ru6Vrbi1JwHVPGtPVOR+WwR65l9O7AsefwhUYN4W0aMPaBJ+cZoktMq6PZ3QS5A30gaUD902EVMShnM+92/8LNR2l3ZHv2Mu8PbiyN7LnBo8WWtK0uYdzPL7lyaM3U5X7JtyWme1db4Vj00sw2Cu4N/7FfWWJaVemcWbfd3epr/0/ZG9lJx902Rag403xo/FkzAQyI6ey6HVzXPfMju7qm1anB+NGgYiEe9aOXsbAMuE6Zue6jQr3c3j24MAcZuw03l/Nt6hEB4KvP8XUqg+QJPaxN06mXd14gTNaNNui6QqCOwHI7q9fqG/4FWuZzxwCmJj2g== 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 PH8PR12MB7278.namprd12.prod.outlook.com (2603:10b6:510:222::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8813.33; Sun, 15 Jun 2025 12:37:23 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99%4]) with mapi id 15.20.8835.027; Sun, 15 Jun 2025 12:37:23 +0000 From: Alexandre Courbot Date: Sun, 15 Jun 2025 21:37:09 +0900 Subject: [PATCH v3 1/4] rust: alloc: implement `Borrow` and `BorrowMut` for `Vec` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250615-borrow_impls-v3-1-621736de7f29@nvidia.com> References: <20250615-borrow_impls-v3-0-621736de7f29@nvidia.com> In-Reply-To: <20250615-borrow_impls-v3-0-621736de7f29@nvidia.com> To: Danilo Krummrich , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, Alexandre Courbot X-Mailer: b4 0.14.2 X-ClientProxiedBy: TYCP286CA0274.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c9::10) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|PH8PR12MB7278:EE_ X-MS-Office365-Filtering-Correlation-Id: 45460e9a-ce6e-4ac4-2fcb-08ddac09606d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|10070799003|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?SnYxZXYxL2UrOEJhdFZGVUhSckJNVGppKzd6Ti9FQlduQ1F0Rks5RG5mZGlt?= =?utf-8?B?aUlVOFpQUTFRUWJYcUUxUVZyS3cwVjlmc2xQazMvVjREMUowYlY2ck1raUk4?= =?utf-8?B?Z0M3NXBTa2tsdS9zWW5vL3VGNVBFUEYzWWdoT1ZoK0x2dmJaakZ2Q1AvNDY5?= =?utf-8?B?Z3gvM3hBY09ibTB4dW4wVGFhcGY0UEJQQUFLandYQXVkVWxQb2dJdW5lSmIz?= =?utf-8?B?SnZOR2kzcHEwOVh6V1pYSmY1SGlNVjYrMnE1U0QxNjlsYTNVbzNTdFFWNElU?= =?utf-8?B?dzJOdy9BYW91OEVTekp4K0ZVWXBrQ3p3MWJDVjhKMHdzVUd6c1N1RVlEWEVm?= =?utf-8?B?QVBNVDlpb0l2cXlneHdoWkdIOVdyY0MraERoZUFETFVKRXJkYlJXK0dDcEtv?= =?utf-8?B?aEN5aWNmaDdqaWxJSk5kcDdwQ0o3TU5UL0diQnNmR0Y5TGUwLzNoZHorRklU?= =?utf-8?B?VHA2UlhNa0JKNUtEU2JaN1NqL0d5aDU2K0FRZ2xwZHlibnlqemFMdmVOd01F?= =?utf-8?B?THFxNGVhR2xkL0NjTkFDSHE4Vll6ZHhROHg2ZlkvYnhQSWtXNUsvVHAzVlhP?= =?utf-8?B?OVdPVXlLbTMydWxyNlVWak9SaXVEY2FMRDdkOHdrd29PSDJqakVFcTl2aVUz?= =?utf-8?B?Q1huaTR6blNoK2tvRVAxRmVVUUF1S3lhZ2IzZkZkalpiV1ZWV2lFQ1NvSldK?= =?utf-8?B?SktVcGhpL1JXeSsrRHZ1aFRtTHpNdTlLWkVnWWNVWkJXSlE0WkUrM2lBbHFh?= =?utf-8?B?d3IvWGVseU4zcmVCM0hES20rQURCQ3gwZmI4WUVUeFRjUE1IQzJNUmpVTDFl?= =?utf-8?B?WWx2Q0JWWFF1S2ZFOVZaczhudVVjTHV0UXJwSHRMVTNjYUpTUzRzT2ErdTA5?= =?utf-8?B?N3R3MzFnN1JzTm45ZDh5WE96TE9TZEIrczExeUV6djUvRWdXVkNITGZTS3dl?= =?utf-8?B?UHZ6TC9VR1dueEtlNmp3NUVUMUpPZVpEZFhUUm5QMG5KcCswS3NMdDYvSUJY?= =?utf-8?B?Qm5kbm5uOHR4NlBiam44V2FsQnFzcnZ2ZHBoWFRhdHllZ1ljOS9wWjljL21t?= =?utf-8?B?Y0RHZjV2eUVOVUkyaGhVWGNSR1VMTE1yQy9XeDZEU3pSVDk1Sm02MkdlQTFH?= =?utf-8?B?aVdFN2VwbXFyK29acWhMMGZ1ejhOK0Era0Jqb2xhdEJhTWJiVXVHWnlNTjZL?= =?utf-8?B?SW13TzhVRXFkb2JmVTF2LzNCM1p2ZlFXY2ZiTEJiYldCcWRYNlREK3ZWWDBk?= =?utf-8?B?dW1zRlR0VGRmcUtGNkRVUDN2eDJLRFJ5eGhDd3ZXbUVvWCs5Wjhqc254cW1k?= =?utf-8?B?aHVMd0VkZHphSmlIdVRCSk9PZTZjVlNuUVdoNVJBTmRYbVpSbU5ENDdGZTUz?= =?utf-8?B?aEJCbWZaMTVLNlNhRHhnR2V1ZWw0TlhOY2xySXVaTkE4QXNRVi8rNk8rTVhT?= =?utf-8?B?cTArTWxuZjdaeVRYMjFmYzA0Sjl0K1Z6MVRsLzhITWZ6cm16VmJFMHJlaStE?= =?utf-8?B?eEdyOWNtUlZObTRIMjJvMGdZeVVzSSt4T2IwR09ybDVFUjlHRWpYSGduQ2t5?= =?utf-8?B?VksvRnlmKzZxYllTYldWTUIxOHJscFJGaFo3T0l4ZUFrclhTUGlPTjhqVWs0?= =?utf-8?B?akU5Q3BRYWVvNEc2U01LYko5S2hKRElFYU1PbmdWRzFqUEtHaHZXM05XTXJ0?= =?utf-8?B?R2lKQWpPQkd5VVlOVzNYS2JWNzRlQVBrQjNzdnl2SkRSU3piSkNST0QwRVU1?= =?utf-8?B?N05XZUtuTGtJSlQ4elpFUDlXK1VNVXZFTy9pTFZia3U4ZUYvcUpVVkRSdVly?= =?utf-8?B?M3F2Uk1DVXBSRGsvaXBYNjFmSG45aTEybFhLeVZLRm8vdHB3Y0hvazF0K3Fj?= =?utf-8?B?RmtIdTNlZ21MZFhJOHlFbzlabnc4RUNUQmxWa2FWa3JhQ3ZsN2pvOFJlK1ZB?= =?utf-8?B?a2wzRHZwbWJMd08zMTREbldJNGNzWHVIUHYzR0JzWlJhY2M3d20wUjk4dDNs?= =?utf-8?B?UG9VanNwQXhnPT0=?= 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)(376014)(7416014)(366016)(10070799003)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NWhTMjNtcjNCYTZ0VS9sNlJ6SktlNzlRSUxxbkY2RE50aU9uWUk4eSt0azV2?= =?utf-8?B?VmR6eEg3TVBaYVd2NDg5TGE3TC9PeHA2U1RnQmNDSkNCWmlYRjBDMFEyMHc2?= =?utf-8?B?Q3IvaWJ5R3BSVkhoWE5VblN4aDJYd2FOKzg0Rm9xUUoveDZydXY0Z05ieFlC?= =?utf-8?B?QkFlM0pxQ0t1STRhczRsYjAxVEtSVjVhNVRnZzY1WTZMZWhRTkJaclZmOVFZ?= =?utf-8?B?UEZjZktqaVh1Titvb3czTVVJeFFHajZFM25GR2hxMVF6VG82anl4ankrUnd1?= =?utf-8?B?NWpMb2JyTkpHSUhFQm5OQzQ0NloxL2NROXhpM0c0dEdZdXFmUlFERld5b2lh?= =?utf-8?B?Q2F5clVHMlorK1NrVmRLMjVPVzRuVHdtOGhuY0lmdDhqQXBpNnJpTVJERU82?= =?utf-8?B?SHhpV2wxak01RkFsNWdiRkRaQllOWEY5eEQ3ME5JcEpoazhjdDYrUVkzTEMz?= =?utf-8?B?K0hpUWZNRGRINXRCT1Q4cEEyYlZnUUtmOUJPUUtOazVWODUrbzVseVhyVjdG?= =?utf-8?B?djMxL1FUM3JqNnpxUzFWQXM3UVl0cVdSSjJpQlczQXRPaklzcWdXclpseUV5?= =?utf-8?B?ZUozOXlLdlpTWXZOaTExTktQbS92U0pORkFHWlgzTnNDTmtIWndrMWlwUUZ4?= =?utf-8?B?dElSTU1DdytGVGxQZHM4anBSaDB5VXRoQ2JNUG1nVXpOU0FmWkp6L2Y0cVRI?= =?utf-8?B?cC9Ic0NwcnFOdnJRdzlDSU8xMW4vdjY2cWpneUhtN0s4c1VVV0g2NnFIU1BW?= =?utf-8?B?K082YzdMaGtoTDNvazBuWUQxejcreWRPVWtGMHpTdExkQUpEOVZWRkhkeERI?= =?utf-8?B?Y2Zsc3hzUzBlalNJcW90M2lsTGlsbmNPYzV1T0xoOTJlMmUrRVVISGY5T3Yy?= =?utf-8?B?cjBQNjhCNURvVUFJSkRxRVprVVdaZEJBUFNybGZRbjBSSW9yZUtsNWp6TTNv?= =?utf-8?B?MzF6UU03QkVtTVRkZEZNUVNOTEhueVVDKzBRam1FVFhkUHZWamp6ekZIRTZP?= =?utf-8?B?czVOd1Fub0JWRHdmc0RTaTdXd3ZRck5rVWgzUTRVaUtWc0pST0h1eVIxQVVX?= =?utf-8?B?R09Xc1dhdTM5bmdnMXRoaDYwbk5wMENmelJXRkVlOWwwYy9FOUlKUEZSZmhI?= =?utf-8?B?VXRHUlBoMVlsaGQzeFpEdWtFRXNUQUdYcG5GaDN5WlRIOHhhbkZQb1JmMzlB?= =?utf-8?B?OEo0ckpacC9vSEd6WFdMWFo5THRDWWpPMFE0NHRjbFN4cmJlcUoyQUVPTzFz?= =?utf-8?B?RmowVjhQdGNoOXpjeWRxc2JFcFFyNmJjcmwzczB0ZCsxR3h2bzFmcUZKaFFt?= =?utf-8?B?TDlKd3lKZ1hBNGxPUmtTa2p4ZEx0V0Z1ZmFGRmtibFFzTXNhRXpVb3ZwZlg1?= =?utf-8?B?VEh2TjRTVkk2VW5GVWpyNXRRRTNHT2d6blF5SnlKRmgzV0NpVURhU2trMFZ2?= =?utf-8?B?WWg3QmlrQnRyQlRjOVovTUlaNGQ5QXlyRC9FM2w0ZkxBb2VRNGNNK3VGY1Vw?= =?utf-8?B?WjRXekFQYy9uZHJYZmJtdGVjaE1HeVhmTThWNzFGMTB4TWo0UkRSNHpWeElS?= =?utf-8?B?WGZwRHlXNUY1d2p5NGZFWkt0OVlCK1dtenczaEc2U05TMzlVaStzcGpTMVdB?= =?utf-8?B?a3NHUlBYa29FdWlSWTNWUE1ZNkRzL1R5cVM5UjhnMnNvTUM2OVpxMjNUV0x6?= =?utf-8?B?RTdlVjNNUERMLyt3bU04NWNlbTN1NWRTUHByeXpWS2x0K1VQcmdNWHlkdXpH?= =?utf-8?B?eTRCWkNCQjZUU0xmaFh2NVYvcVdXMFJ6UmhvUDBBak4vYkVrTzFGRHBoVERl?= =?utf-8?B?VjFXSzhxMU5BSHZtb2NUbXhJU2dJY3dQQmZucVF1aHk3NEkvbDZTK2ZWall4?= =?utf-8?B?eUxrNHZXNzRIa1F4UnpzWmt4azMwNUJPcVZCT3hIdFN3T3VlaVZsZ01qc05x?= =?utf-8?B?VWxGOXpQUHBBL1F1SEdwN0JUZGZydG16VlFUL2FxMjM4V1I3RjJtWFVWa0JM?= =?utf-8?B?VDRWazg5NG1ETHQ5YTI5Ni9XTithSi8rb2VZVnBDeXZzdnFHL0lTSUVZVFFw?= =?utf-8?B?cmFuLzNaVkNtQklXWnBFVWNOMUhJZWRvb0RIa0o0MEtPNXZCcUN6VzZCTTFW?= =?utf-8?B?NFhxNHMvTVlCZ1dEVTFadkEvbGxseko4SklGa1ZBY3RzR1FBL0daU2kwVU02?= =?utf-8?Q?aSbHQX8rfpo7armDIle83WEWzlDJgLcqj++IjJxF1Aeo?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 45460e9a-ce6e-4ac4-2fcb-08ddac09606d X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2025 12:37:23.3106 (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: wJVp0B0I7jfxbb9BjnH25t03gIclPw8o5D2Ff6urllVXJYvaJHtpLt0yKHGAjsaj6l8b0FRoKj/pCvVV7ZBciA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB7278 Implement `Borrow<[T]>` and `BorrowMut<[T]>` for `Vec`. This allows `Vec` to be used in generic APIs asking for types implementing those traits. `[T; N]` and `&mut [T]` also implement those traits allowing users to use either owned, borrowed and heap-owned values. The implementation leverages `as_slice` and `as_mut_slice`. Reviewed-by: Alice Ryhl Reviewed-by: Benno Lossin Signed-off-by: Alexandre Courbot --- rust/kernel/alloc/kvec.rs | 53 +++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 53 insertions(+) diff --git a/rust/kernel/alloc/kvec.rs b/rust/kernel/alloc/kvec.rs index 1a0dd852a468ccda6ea1b521bc1e7dbc8d7fc79c..cc8e7499427181e79af4a54576a= 7af23ac8b1bb9 100644 --- a/rust/kernel/alloc/kvec.rs +++ b/rust/kernel/alloc/kvec.rs @@ -8,6 +8,7 @@ AllocError, Allocator, Box, Flags, }; use core::{ + borrow::{Borrow, BorrowMut}, fmt, marker::PhantomData, mem::{ManuallyDrop, MaybeUninit}, @@ -890,6 +891,58 @@ fn deref_mut(&mut self) -> &mut [T] { } } =20 +/// # Examples +/// +/// ``` +/// # use core::borrow::Borrow; +/// struct Foo>(B); +/// +/// // Owned array. +/// let foo_array =3D Foo([1, 2, 3]); +/// +/// // Owned vector. +/// let foo_vec =3D Foo(KVec::from_elem(0, 3, GFP_KERNEL)?); +/// +/// let arr =3D [1, 2, 3]; +/// // Borrowed slice from `arr`. +/// let foo_borrowed =3D Foo(&arr[..]); +/// # Ok::<(), Error>(()) +/// ``` +impl Borrow<[T]> for Vec +where + A: Allocator, +{ + fn borrow(&self) -> &[T] { + self.as_slice() + } +} + +/// # Examples +/// +/// ``` +/// # use core::borrow::BorrowMut; +/// struct Foo>(B); +/// +/// // Owned array. +/// let foo_array =3D Foo([1, 2, 3]); +/// +/// // Owned vector. +/// let foo_vec =3D Foo(KVec::from_elem(0, 3, GFP_KERNEL)?); +/// +/// let mut arr =3D [1, 2, 3]; +/// // Borrowed slice from `arr`. +/// let foo_borrowed =3D Foo(&mut arr[..]); +/// # Ok::<(), Error>(()) +/// ``` +impl BorrowMut<[T]> for Vec +where + A: Allocator, +{ + fn borrow_mut(&mut self) -> &mut [T] { + self.as_mut_slice() + } +} + impl Eq for Vec where A: Allocator {} =20 impl, A> Index for Vec --=20 2.49.0 From nobody Fri Oct 10 09:36:29 2025 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2071.outbound.protection.outlook.com [40.107.100.71]) (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 6262B2676FF; Sun, 15 Jun 2025 12:37:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.100.71 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749991052; cv=fail; b=pSxuGwTMXPCqIzjMoGL0pcacedwER9Nu5h2amZP9oMcAkoyjuEs2935jMFMVlnDlK5o5jmg8QWEBKcB/oK38FthNWxlPyetyfeaI+NUaONdJOXW4JiJxnkqTX1Nm7kuJzz+uGu6MV9TP0N4kWlk7v12ZADDNykzUVAHMCLOeqh8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749991052; c=relaxed/simple; bh=s+BXPKlarqlreEA5eVRW2UdjHNhQ6f8B7ZGVWSM9EdQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=TyAzCmkq2IVeYebuLA2UipjPWL9M2xVQAt6l9BazOL4Gb3HOfTatg88QYn3+IMcDoPGqFtoaYVdz13rWPXHG6HKfwPVki2wGMakVxztwmcTaBGGBYMv9ipqaBD1SgBvCXNFYWm2k5Xi74666vJ+qdFVnTW0IyU5MRdzAITsjUB4= 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=UWBvrrAL; arc=fail smtp.client-ip=40.107.100.71 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="UWBvrrAL" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EAau1n8Fq51e0+qfO0w+ZledL8Cf9V3LoXYUUiUJlaUFyolFX6YvA+zn/t784+cV+5lMLurlroqw5rlnazoS4GsgKiTCNiLVhdAqw8wokWHkC1+eql1QOrvo51vC+Rk9NDN4IzUlP3EFGxDdt0LL+DPMvs/EkkXEUZfsnDN999vAt1RBQ/WSqZeP4+TAttvofVwY8/hTAb/rXYE5nLgLS613AcgvNXL5DKNGbDDROoMuhY/C4WR7kA7NXgyaqdMYsMMCCSJ5KBaI9beMNF5dYfs6hUAUEgFIkIEKY9nUoJWs6/s+R++J6gTekIBH6nJNsCoL5/rICGuiAC8PN8e5KA== 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=U/s8a1Xq3bRnL6zsjuEcTB8EjM+t3aWhz2UAznp3Wnc=; b=TFP0CDhIfvgL0T7g3+NNoE95T6UC89lP1fjB3e7Gi4cgkrB35ivtBsgxrlLyWIB323/ITUod7XLmBEj0s351+83pQ+wR0hLOxi1DrI+5ugD7HYbpdNaf7Uo1hEF+WTvZ74oAgr6F3MoiZibxAVwDYslbnHBq0fQiacpPowcU1kt7jgyOtClrIN0y1eWheMbiR54xmrHEvM/2yt9ebzPBs/LInSSASJKtfnDl5KzZOjr3Ib2CQJgZx05Fja9joIpgYHM+Ht7SaGbdHVOOxkhPQ0dVBMnO6eUlr2fud+U2SvUXlIs0gz3GCVtldYvyw+t5eZ5cwZweSr3aHLhsjTIlFw== 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=U/s8a1Xq3bRnL6zsjuEcTB8EjM+t3aWhz2UAznp3Wnc=; b=UWBvrrALkD1qHeq9A3tmPli5RwmkucHpbaPe1vGQf4DAExZnA3nm0popjGmjknmIwCy+7S0vYnhFEtC3ldAJTi4JF66VELT2stfOlJ++ZJb38MNg2FgRSy1DCE5rtwLr+VQGY9h1v9JtGUcS3NCeR2JgS4Mia0IJ1hSoVqikgAmi+ctZ3TPCho0XkqRvCv/GcddN3g+aHcEuqPrwS6TApkHV0bM8+tBoBF2OUiQafSEQhohgaIIadiTG3nUGnRkYBzB/DZ9aKUxY1sN+TBS7DLCPCPa3+h8O8T2IUBOo0sZA86FAT+7Dl7c3EIO5BmSaIqDlJ7bt1TueQqVN7ovb6Q== 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 PH8PR12MB7278.namprd12.prod.outlook.com (2603:10b6:510:222::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8813.33; Sun, 15 Jun 2025 12:37:27 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99%4]) with mapi id 15.20.8835.027; Sun, 15 Jun 2025 12:37:27 +0000 From: Alexandre Courbot Date: Sun, 15 Jun 2025 21:37:10 +0900 Subject: [PATCH v3 2/4] rust: sync: implement `Borrow` and `BorrowMut` for `Arc` types Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250615-borrow_impls-v3-2-621736de7f29@nvidia.com> References: <20250615-borrow_impls-v3-0-621736de7f29@nvidia.com> In-Reply-To: <20250615-borrow_impls-v3-0-621736de7f29@nvidia.com> To: Danilo Krummrich , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, Alexandre Courbot X-Mailer: b4 0.14.2 X-ClientProxiedBy: TYCP301CA0021.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:381::18) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|PH8PR12MB7278:EE_ X-MS-Office365-Filtering-Correlation-Id: d0ae2f26-ee21-4367-a2a3-08ddac0962e2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|10070799003|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?MHAwd1lWZEF2WWJwNU84ekpzQ1VKYVlEWmJlTGZLa3hkc3R1NExoSnBCSG9M?= =?utf-8?B?WmthU3dTY1VaOEJmdVZKR05uOGtnR2pPNlo0Q2VwQThVVFVraHQ2aW5FZDBl?= =?utf-8?B?cGRHNU9XajByNWkvd2Fra0krY2d0U3BycDdhSWNZenRISC9GaytUd3V0MmVY?= =?utf-8?B?amtzZ0FEZ2dRdGpjdHREdjFENWxSMTNzdVd5aEJWUW5vYUJXc3RldGZOME9Z?= =?utf-8?B?Skd1cDNpcHFRKzYyd3lJTjhpUk9FYW94VzBEOFdNckNZOG95VVFPQ3dYT3FT?= =?utf-8?B?ODIzQnVnUGhOQ1BsdlgyamhiQ2ZzNDh2OTZxQUtJcXRWckNlRzB5MStEZGw3?= =?utf-8?B?d2hvN2hFTHFnMFduTHRmTVhkNXhMaElIQVFEZVhmUVRBSXB4SFhZVVVCcmdL?= =?utf-8?B?YnZ4RThwSmgzQ0liVGs5bHhxWW5VNUpvL0ZKK3p3U0d6VDArMnpOd0xjd2hx?= =?utf-8?B?R2doQnZrb09sV3o1M1RUVnJOTGdWd0FkNy9IL1ppQUE3WW1ENVVsQk5yaE1r?= =?utf-8?B?NEI0VC90WWZGNkhlaGFlY2ZOWG5KYUY2UG1vajYwYncvamlyVkowdmkrMVdN?= =?utf-8?B?YWF5ZlNKYWZUNnJPM2pqSWdtRk9kUWpnVnI5TmUzTWt5bk4xK3lGSENGNDJH?= =?utf-8?B?OGkzQVpFcWptWTNwME1tbTJEQ2U4VGx4V3FLSXhPTjI2czlzeXdCMGh4REp4?= =?utf-8?B?cVUzN3QwTWZrdlQ2STVVdXdMcHJMb3F3cFBXR3V2cHdwRVA4a3RaNHhjU3NB?= =?utf-8?B?TVF1U1daVU1PK2tVbFJ6YUdwVkVuWkJOSk9QKzNVbjZYNEw4N0xRdFF6UkFv?= =?utf-8?B?a3RXcThMNkJzbUlQeWlORXdSanVULy9WU1h5SVJaV2o5TVlRZ3NOaThNT09m?= =?utf-8?B?cWZFcFU2d2hUdUxqOGpYaEhOMkJpVWM1dEZPbURsODI5UTRBWWM1ZXFtNlhv?= =?utf-8?B?RlZaMnN4MGFJcnZBSCtSdGJ0V3E4djFzdm9URndDY1ZzU3ExTUZiSDFLZFA2?= =?utf-8?B?ODFzZkUvQ3cwZWhvam15YUJpbWRBQ3NnL0hNbWRSZUZ5K0VlQjdEaG9vSm1i?= =?utf-8?B?RGRMZGF5UFdZQ1UzeFNwL1k1NGxjZjhFUWYxaG9kbHdjM0htMWhMc3JyUEFF?= =?utf-8?B?RitnMGdjZis4dGJmM1ZCTEJzRFpoZ2dUK3NCb3hOQTVVRksva0N3MDJieWxv?= =?utf-8?B?RzZ0aUFwY05JWkY3WjR0R21jMUx1Ny83eE5jTjc1bkRoamlIbEt5QTRXei9B?= =?utf-8?B?ZFJnUFU5TnRDaFpvY1dXTkV0YW80anpHbTBZOGYvMmRJbHp0Q3ZObll5SHR2?= =?utf-8?B?TWdhaVJqSXpOZkRyQk8zbFduQ05XS3lMT3NadFBZY3hXTGwzR1Z5dWdnQjVX?= =?utf-8?B?STdNcklTUy9Vc0VCYjBsL25PS3h6RkswaUUvRzRLWDhyYURqZTBockZvcFA5?= =?utf-8?B?WFRQeVdzcG9VRzV1d2kyd05qT2pQLzZ0OFpkYTk3ZDgxL1Zjbm1TWTBKWHdF?= =?utf-8?B?UUJxeitVcEdEVGU0RitxL2ZGOURBVE9HWTVwSitEUG9VZWpsYyt3M0tqRDhX?= =?utf-8?B?enFNWWM4aTVqelVvVHlKRVZuckw2WTJEMnVwNUtyTnUvdmptbjY3YWdwSnFT?= =?utf-8?B?K29wbXMwUWpQdE9hb1MwOGhEK2QyWHVRT2M3ZlRoaTdob0hyc0o3NUZmWHo1?= =?utf-8?B?cE0vT0tINk5lVUI1cXY2ZyttaWFidklCYk9kdm93OHRiTEFZeUhLaHhVWXcz?= =?utf-8?B?RklmUnNMSUZoSnVyVk8zMkNFb2RmWFhpY0o4VEhPY3FqajRQYkVLM0tSMC9I?= =?utf-8?B?UWZUZWJEOEd6a2JkVDgrY2J6NjhtdjRPU3h2UHp0c1ZLL2pvejdWaUtEMnNh?= =?utf-8?B?NHpIYnVid0wvNndlYSs0YytQUEtZVXg3aUMyWTF4S1JIZkRndEZhL3FKbngx?= =?utf-8?B?am42dHcvdkJnZnNMTzZLeXRpM0hTbXZwN0lUUGltWkRwVG1Vb1VQaDZjWW1K?= =?utf-8?B?dkpaVmU4YjVBPT0=?= 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)(376014)(7416014)(366016)(10070799003)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?d21UelVWMy9yUXBDQnlPdVV1NHJ4WkxvemJWMWs2K2NWc1E0eXZEOE82OFJ2?= =?utf-8?B?UXFRWE12VytuRGd3bkxJNVYrTkMzUDAxdXBoUUZUakJRbWdKMjdxNjNHeW9l?= =?utf-8?B?Y2NxTlRzTEYzSldQdnZDdDRldjQ4QitHb1RUT2daK1lJcjRsT2szY2hyQmFa?= =?utf-8?B?Q1VDRVhqYzA5cUt1d0I5aVZRTytNc3cyc0lsMEs1eUhKQWVYVkFZcHEyQTBL?= =?utf-8?B?SDc3dmg5anozeVN0VTNYekFsZ2JrVjZKSWJvSnYxREhpQ1ZuQU5BUHdEMGVX?= =?utf-8?B?Q2VMQk1BSkNaZlNHbzhnSW5vbktsOFE0Y2JwT3Raei9jaWVhbmM4N2xLSGg0?= =?utf-8?B?TDhuMmtoaXl4NVFGV2FReU9Cc0kxbFQ4MStyandyVWpxeWhJUkoxWW1jWEs2?= =?utf-8?B?R05HRExKNGl4SW5jeWpzUmhYQkNyMWRReDcvakNOQ0h2dnJWWjZ0OFZDL1pp?= =?utf-8?B?UWtDUzdFcUg1SU1LTHUyT2U3ME9VN3RUOGlCUnRubVdOaFdWY1N3bmxOdkI0?= =?utf-8?B?SmdHUzhxNmRGMkJrRW4yQmd5Q3EvUWg4WWIxT0RsUE1HVHpaSjh6TDB1eW16?= =?utf-8?B?TkZRa3A1TkNNaXlCdEFGQ0dwVExjN3Z0YjVLbTk3QlYwNzdhdmY1OW5JdFFl?= =?utf-8?B?STl2Y0p3WGdFUDFrUWF4WjdzaWxmYWlhYndQREFvQlZ4bmJlb0tyZTg0aXQw?= =?utf-8?B?b1dnMGhkb3lOSWFvbTFITWdibVZqRU1VcytVd1doQzlRbGxGSTh2SC8xdHM5?= =?utf-8?B?RjEySzVhNlQ5c1l1TExLRkVjd3V6QU5KYjRncTI3ZWNHbklNRzVSRmtHWmI3?= =?utf-8?B?dVFjVzBxaUNrdDJjNDMyRGtVQnJVOEF2Ykl6NHBKZTNVOW5IbWRuS041NDhk?= =?utf-8?B?WE93OXowdXYwbHZKaURjdERMRFkydHVNbFRWcFpOaG9qNUlzTElkVE1RZTQz?= =?utf-8?B?MUdqKzJTcTBXQnJFbWF5YmkrL05waklBWXAvakVyblNETzNVVmNobVMveHAz?= =?utf-8?B?QjlVM0VNblNhNEY4SzFpVG1NZzFNVDdML3ZSbVFYeXVjSHBPRWF4L3ZoTThs?= =?utf-8?B?UDFSMFVRUm5JY3JtWjhXNWRNemovVXAvcGZZVWZnS3BEQnZ5RlRVVVhpS1Yv?= =?utf-8?B?VXJOKzV1MGsza1hpcXQ1bzNoYkVnZTJBY3lmcU1oR2J3djhKU3doNDZxM1JX?= =?utf-8?B?Q2dnRWdxbmRyV05CL1E4VUhYTjNKKzZFT2EwUnphS0dYRnB4MG1hUDVGcm9u?= =?utf-8?B?bDdHVFVjRW9UYW8wcXFkRkZQL1IxSEIvQWo1anF3TWhHVU5tT0tmd3FteFFw?= =?utf-8?B?T0JVazVubm9wVFErelFZMjgvMlVaTElKaXB2dkZDY0dmcHFyZklnNUxoQWV4?= =?utf-8?B?N0d3MklMTTJWUzVNdE5sNVRZSEI2UDZyakNEKzJ6Y1pZZHdTU3MrTTlHWmRC?= =?utf-8?B?KzFJRVdjMnNRcTI5U0hVdzFDaXlEcXo0YUpkR2dzOXNoalkyWTdCOGwwNzQy?= =?utf-8?B?ZHhhaHJRWk5maXlDS3p3VFgvejN3RlQyWjdWNkNQYjVXcWs2OGMxWmJ4SUps?= =?utf-8?B?YkdLYllSZEx1UmtYbzhYSldhSG5iUStSa09WTDUvdDI3YUM4cHV5VXpUbXQz?= =?utf-8?B?bzZXNEMyZEJkTUwzbHlUUXU0YVFoR29uSVZPNzA3MHFkd0VXRHNQZWZGZnI3?= =?utf-8?B?ZWl2SHE4d0F5RWtvbnhNNjdKZzVKb1gxa3R4TUxJY2pyazRPK3RickFWTk0y?= =?utf-8?B?YklzT0E4cHJKS0crVUtHaVBEREZlYlU4T0FIY1RYRFVsK1lnc2ZXUE5zSVhU?= =?utf-8?B?WjNpM0V1S2dUcE9aYTlNWHFnRWprWWl3cFN6SGl3cC9yWEZ1VWFac0ZyM3hG?= =?utf-8?B?bGtQNWw2VFNLZGY1Nm5rejU1b1NuMWxac1BxUW9YNzNaazA5eW43VCtWSnVO?= =?utf-8?B?eXFqUnp4anYzNFhGZHU0TFFqdGxGUzBOQ1p3V3dvZXFsNzlFZkdrQ1JReXdM?= =?utf-8?B?cW55VllMMHFyN29zUTI3K2RCY2VKU2Z1TlJkV3JqWHdZQW1JcVRQRDErb1ZZ?= =?utf-8?B?cC9VREFENUdCNHhiODRrTitOeE1rMVZhamtmVHM5ZXc1b3Q4ZkpEaVg1NUt5?= =?utf-8?B?NXZSVlljaVdld21LakVJZ0Z1L3V1OHh0aHlwNHhKREtMdFpwVFQzYkpaUWJ3?= =?utf-8?Q?po+6fCtWVksLcIf4vFfOyrv/pcySVkdrjem85VYRBbWO?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d0ae2f26-ee21-4367-a2a3-08ddac0962e2 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2025 12:37:27.1298 (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: Xf7ROGBlFa+8gSmKgupkuNej/uSiS1lldCD1VwShdUUAUokCHJKRk/S021u3TLJE6LzvR7n72VxqAtYNvTAKmg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB7278 Implement `Borrow` and `BorrowMut` for `UniqueArc`, and `Borrow` for `Arc`. This allows these containers to be used in generic APIs asking for types implementing those traits. `T` and `&mut T` also implement those traits allowing users to use either owned, shared or borrowed values. `ForeignOwnable` makes a call to its own `borrow` method which must be disambiguated. Reviewed-by: Alice Ryhl Reviewed-by: Benno Lossin Signed-off-by: Alexandre Courbot --- rust/kernel/sync/arc.rs | 78 +++++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs index c7af0aa48a0a049bfeeba3a81080355f4d381738..31d6f5946d554602ff689a452df= 7f2b229eeef71 100644 --- a/rust/kernel/sync/arc.rs +++ b/rust/kernel/sync/arc.rs @@ -25,6 +25,7 @@ }; use core::{ alloc::Layout, + borrow::{Borrow, BorrowMut}, fmt, marker::PhantomData, mem::{ManuallyDrop, MaybeUninit}, @@ -406,7 +407,7 @@ unsafe fn borrow<'a>(ptr: *mut Self::PointedTo) -> ArcB= orrow<'a, T> { unsafe fn borrow_mut<'a>(ptr: *mut Self::PointedTo) -> ArcBorrow<'a, T= > { // SAFETY: The safety requirements for `borrow_mut` are a superset= of the safety // requirements for `borrow`. - unsafe { Self::borrow(ptr) } + unsafe { ::borrow(ptr) } } } =20 @@ -426,6 +427,31 @@ fn as_ref(&self) -> &T { } } =20 +/// # Examples +/// +/// ``` +/// # use core::borrow::Borrow; +/// # use kernel::sync::Arc; +/// struct Foo>(B); +/// +/// // Owned instance. +/// let foo_owned =3D Foo(1); +/// +/// // Shared instance. +/// let arc =3D Arc::new(1, GFP_KERNEL)?; +/// let foo_shared =3D Foo(arc.clone()); +/// +/// let i =3D 1; +/// // Borrowed from `i`. +/// let foo_borrowed =3D Foo(&i); +/// # Ok::<(), Error>(()) +/// ``` +impl Borrow for Arc { + fn borrow(&self) -> &T { + self.deref() + } +} + impl Clone for Arc { fn clone(&self) -> Self { // SAFETY: By the type invariant, there is necessarily a reference= to the object, so it is @@ -834,6 +860,56 @@ fn deref_mut(&mut self) -> &mut Self::Target { } } =20 +/// # Examples +/// +/// ``` +/// # use core::borrow::Borrow; +/// # use kernel::sync::UniqueArc; +/// struct Foo>(B); +/// +/// // Owned instance. +/// let foo_owned =3D Foo(1); +/// +/// // Owned instance using `UniqueArc`. +/// let arc =3D UniqueArc::new(1, GFP_KERNEL)?; +/// let foo_shared =3D Foo(arc); +/// +/// let i =3D 1; +/// // Borrowed from `i`. +/// let foo_borrowed =3D Foo(&i); +/// # Ok::<(), Error>(()) +/// ``` +impl Borrow for UniqueArc { + fn borrow(&self) -> &T { + self.deref() + } +} + +/// # Examples +/// +/// ``` +/// # use core::borrow::BorrowMut; +/// # use kernel::sync::UniqueArc; +/// struct Foo>(B); +/// +/// // Owned instance. +/// let foo_owned =3D Foo(1); +/// +/// // Owned instance using `UniqueArc`. +/// let arc =3D UniqueArc::new(1, GFP_KERNEL)?; +/// let foo_shared =3D Foo(arc); +/// +/// let mut i =3D 1; +/// // Borrowed from `i`. +/// let foo_borrowed =3D Foo(&mut i); +/// # Ok::<(), Error>(()) +/// ``` +impl BorrowMut for UniqueArc { + fn borrow_mut(&mut self) -> &mut T { + self.deref_mut() + } +} + impl fmt::Display for UniqueArc { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fmt::Display::fmt(self.deref(), f) --=20 2.49.0 From nobody Fri Oct 10 09:36:29 2025 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2046.outbound.protection.outlook.com [40.107.236.46]) (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 68111267AFA; Sun, 15 Jun 2025 12:37:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749991056; cv=fail; b=lBBcY30kV/LuYlTInwukY3rc2dZD/o3piiA+Mr+7oBwqIwXfISJy/+FnmdtovMUXWE2sCglgH4tHoI4aMTBfJLm0pbaesSQbk44q+FIo3gcEcgeFE7dZh1zzqKQUaJ9bl3SOyYaXKOFdgBR6axlopEp1n8xkwEjq/SCNcIsJvdI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749991056; c=relaxed/simple; bh=IJJpl/I7rMxRi2GCMEY2jIK/MOxAHQGh6N+4uWuVV5U=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=APrADNaGlLIKYG9gAudmqY/sfVjuX7DTtY9/pE6vNEuU8hLQwlmdkKf+mtXjtd9TO5MbiuTaLHrEJJ/CZOaGjim4XLu0hPrXHvqPrPyFFrF6KWGYnMpxoglhsm4IoP8LVWfNzWrBIqx1Dfk03bCOpKsFE7F3VrHRVDfkdnFh7tQ= 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=SjH6PyMt; arc=fail smtp.client-ip=40.107.236.46 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="SjH6PyMt" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=CGViOnJQHt+0o4nG8RHi8lcQZwIjJGYYxZdC8MRQ8laWBUg9MqqU6MuB/yOy3Yb5ZdAzll/OzIdzDe6HstJ0qkuGMdyB1qB3LIv7T/JMfIdKKnAg2KVDN1B5zj50FJ6X26cXRXBTC3USHziWxJ8ryRsgkGOaX6RnZVQReNzvULMyCRtlkT116Z+gTANRGirWyvrHg4OXp2OVVxAASCwyX5ofalmQy5j4Rl7iO8ZgfoPaTybX8v0QNKLmgcxVaNilRh8EYlrDDnbfZ57wudkfyui03LYqywS2z/7U6SDQ3dv/dJqmxDXc/6XJKTimHEGe825PUbcwXY7zyH0OgNmm+w== 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=eiOURGfAUwarW52hPXPq5a9fuMvRb35ml7CVBLbu8V8=; b=sK2FAU52NAeYrg202TMYVJS7iC2fkpWpE6Mn1l9HF4rPqO45lJw3K0HozfDTlQlWLPCCjqLWwaYLzkzQXWxxx2ei9pkZxfdiD+8MmHs1gkSkLf+yqoFEA/ISkCfEibuADEBjKg0bV8ONZdOPwdEYVB0t7RYsxLhh5+tFSBCDuqTgkH4cEvz7BLJuqitIfuiFx4CjINA123eJkFQMRwmipQnXRRe4KoJWuovc7bdKgbJT6wOLGQdNYQiO4l0BCk0PS4eebkJnzeGKB4e1hzE2fV4eF7OOYX6eLTM97byxN1Zet6Cag6Ax5kAPRlp2W9yvDkJUlues0YXj8y8hQTfEPA== 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=eiOURGfAUwarW52hPXPq5a9fuMvRb35ml7CVBLbu8V8=; b=SjH6PyMtLuHRR0EcDHN+BAXnk27mH5UqvC6uZHPktTKJ4xFlKCkxAC4B2AG8C5/jCnDgu8hnLtzjtpnXw0Yusf4A6wOqf379Nkz2X0vvCuCswnRDpETGIN7qezyW4PCR7jwhx8vh5/yXd84FaFMPbzl4Fl38zqGCZMt5QhV7x6ByDuwfeKpCz9M7jN19rjVXODBpNptZqrQTkHB/15KfgLc6TaENuZhSAG5XEAWsfggjxnFekd+rp2c66SKgEZzJIWa0MJIePoJv9dCuhf44FubtV69KKS28p0RJ9SvVsxFFdmRgBZEtCl7cpMla8nF9r0V3vk9Ed2yWhQZd7dghQg== 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 PH8PR12MB7278.namprd12.prod.outlook.com (2603:10b6:510:222::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8813.33; Sun, 15 Jun 2025 12:37:31 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99%4]) with mapi id 15.20.8835.027; Sun, 15 Jun 2025 12:37:31 +0000 From: Alexandre Courbot Date: Sun, 15 Jun 2025 21:37:11 +0900 Subject: [PATCH v3 3/4] rust: alloc: implement `Borrow` and `BorrowMut` for `KBox` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250615-borrow_impls-v3-3-621736de7f29@nvidia.com> References: <20250615-borrow_impls-v3-0-621736de7f29@nvidia.com> In-Reply-To: <20250615-borrow_impls-v3-0-621736de7f29@nvidia.com> To: Danilo Krummrich , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, Alexandre Courbot X-Mailer: b4 0.14.2 X-ClientProxiedBy: TYCP286CA0262.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:455::9) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|PH8PR12MB7278:EE_ X-MS-Office365-Filtering-Correlation-Id: aeb2c3b6-7b1a-4bd5-bcf9-08ddac096533 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|10070799003|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?c0dJSEl3MEw3WjhRbXNaVHBlSXZLaXBQR3B0SzE5ZDQ2ZklFMzZOYWllOTNo?= =?utf-8?B?WTFZVyt0MkV0QkJRWFBNcW1qUUY3bm9jNERocFNDeWxiRjdOK0xpQmhPSTRu?= =?utf-8?B?NnZXZGRzRlBpN0lsdmhaNnlKNGNMeGVPd2lHZEdLMTJ0NjVKNkc3OThFYmlk?= =?utf-8?B?T2hrc0Q1WmF2bkZmSGJiRlhZVU1UUmVwRjZzMityTjRmTEpNOHlJVHdXNTFY?= =?utf-8?B?VDFDMGNLSHIvcWYxaTArd3ZSQVppVk9EaDNaTXRBZ29DSGJmQlJCb2gyaVdv?= =?utf-8?B?ajhRZ2h6eVRXTnluemNYVWx6YUUwYUhiM1BWVFF0T2Q4QjhhZi9nZUR1OHo1?= =?utf-8?B?OXVlckVvcGZldFZGZngwSDIyM20rK1pXSFFvdjVHclpNM25Dd0xWbGxmQzNj?= =?utf-8?B?NDNBUTFRcUNjTm9RdjhUU1NaYThKK2xQQVFWa3VjdEl5bFBleFJwVHNGQmw4?= =?utf-8?B?bVdNU2J6MEdUODR6dkJwck50dFc4bFRlWUI3STRrYy9ja2RMNG5HbkNaY0dZ?= =?utf-8?B?OWZjV29MeEtFQ2txZ0VraVpudkZaK2ZqQzdVUklkYWtRM0I3S29GUEl3OXhM?= =?utf-8?B?QWVEd2lEaW5lQU1ZVjhkb3FBSlVGU2syeWNPbnEzSU9WRDFDejl5RzlwRHVa?= =?utf-8?B?RjJlVVZpekhTNFZhSGZUaVEyeitQaE9OV2Rkbi94dWhrTk9JaElxVDl4NDNK?= =?utf-8?B?aEhjMjV0MkdtNTdPQlpFS1VmMGZ1bk1SN0RUZHF2d2l2ZXhRelZSa0h5dHRY?= =?utf-8?B?ai9FWXNpa0V1a2d2N3NNNFVRR20vMkRRV3BFR3ZKWjVQMHpRbUs1akdqZTNB?= =?utf-8?B?aDQ1N25KVTZLRkVpT0pQUVN0Tmt6OFZyKzBJMDZnT1l6S3RmKzE4ZDMrQUNR?= =?utf-8?B?QzZPSFhtd3A3OEUxdjE0clZRRnR4SXJyVHYwSW5SQ3M2cW1CRDZMTnJ4QktK?= =?utf-8?B?SE1QWXlZa2hYQkVoaVg3UGZCTmI1eHdDdmJIZFQxb3Y1UHRGcTU5bHZ4dVdG?= =?utf-8?B?eTlWNEV6YUlJQzFYN3dDYzJQdC9TZkg3Nmw2NElldWQwbC9DdkY2dWFVcHMw?= =?utf-8?B?YmxyUFMvZFNpdzd3dlVkais1QVZ2UnhXN01sZDFMYS9rZXpsaFdoNGhsaXlq?= =?utf-8?B?anF3R1djOUdtNjVUeERrRG1ybmtqNmpxdzhwQnhHN1FZdVByZDcxdlhPazlM?= =?utf-8?B?c0loUC9iSmF6eC9Fd1M1ZHNOK2VHeVV0d2tuT3ZMSkJ5VDdBamwvRDlzb1FR?= =?utf-8?B?a082TE9keEllSzZCd3B4WkVqUlpieEpEWXZjZU1TbDBDVVdqc3k5dGxndFR3?= =?utf-8?B?aHM4NkducGVDOHo0azErdk5ibXRVUnlnNFg4UlFXL09YckFkYmxUd24xenMy?= =?utf-8?B?OVpHZFNWWjVDZ0Y2UnhCVm90U0g3c0ZmVzdoKzNLb3ZpaVlqaEM0ck9QU2lX?= =?utf-8?B?aUxUZngxOTh4UFBtNzRyWGxCM0NTRHZGa0RpTWpCSXgvU2RqTzdaUFZXUEFh?= =?utf-8?B?OUd2Y2prZzNMQk9wNE5RNnY5clBhZkk4TDkvMGxXL3MrbjJJZnlzcjFUajEz?= =?utf-8?B?L2lVYldzaTdUQ3BlL3pWWDkzVjkxMnowc2lETWtnU0FRNkpNYXNFTUo3SGNP?= =?utf-8?B?K0VoRzhtMjMwVmVOWGNJbVEzOFBMZVRidWprQWVhWkNJazg2MkcwbXZBM1N6?= =?utf-8?B?UVFrRGt1ZFBjMktreGg5V1J2THNYVFZvQUVSUDJGcGtadEtrT0Q2WnJKUVZ2?= =?utf-8?B?T1VjMDFaSjdLdEVYSUNRZDVyZ01YMnZsb2p5M29lc2JrRGRPYVFTek43aWp5?= =?utf-8?B?UHRQNytWUURDaXlEQUJiVVM3QUpmZnkvRTdVUnNaU3NJUDFGc3Q0ZUpYRUMz?= =?utf-8?B?Tyt3R0taU0NxdzBJa0doTW1IS2RBbyt5ckRqbzJtWFJwNzk1WXczN29SYkRj?= =?utf-8?B?MUN3Z1Fzcm9HRmRYQnhQTDhNTk5UY2NmZEJNWWZxalBocEtJbUJZZ3ZHeC9y?= =?utf-8?B?ZmtOWWlnOGZ3PT0=?= 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)(376014)(7416014)(366016)(10070799003)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?U3FreW9RcEt1UktMOE1lZEhYNWM3UDlqZGVUbHBXVUdlSmc4Sm42ZnNReDZT?= =?utf-8?B?SnpTakt5U2p1UEFQM1Jud1oySXYxaU1VM2I1VE5IczAxRFVqN3cyZlNaUU9L?= =?utf-8?B?NS9BVUoybFF0NGVrRk90ZjQwNTVDZG9xOG9uZ0M5QTRBdFkvUnRYOGZ1ODFJ?= =?utf-8?B?YVlDVm1pQjBOVFZkYzkwQVFBeGdPbmpVQ1NMaFRnZ2dVTW41c0RGOG85djF3?= =?utf-8?B?Uk1tMStIMGJRYlVsMDFCVXl4S2hCQnM0MHIzWU1LOUpZd08xTEJCNzV1NTFV?= =?utf-8?B?NjN2YkxaUE5wang5azFyVURFdHVOdW9xVGZrMmVQRDVnYnNUVGs4bk03QzBF?= =?utf-8?B?SjJhQ3gzenk3aE81cHBDSEVwWmJBZ1JXSmd3VXozMjJyeWdOUDJwWWdPeG1K?= =?utf-8?B?TTZNOHNpNTQxRGFqSnVHbnNyZUU0VFgvZFB4eUEyZlUyQVNwdURsSGVLejVj?= =?utf-8?B?VFgzMERTWjVnK2FaK1JKa3lzL2dET3RZdlFiZld5VVJPRFJjTDFGWTBEVW5s?= =?utf-8?B?cEdKNEs4WGxFNmRhYVZpdFNSUXIrcVRKY002R3pWYTFaZHUzbDB5Tzg5Q1Bv?= =?utf-8?B?UlV3NThrRmZjV20yc2s4TmlObXFyVFZCWTMxdkh5bzZYNzdFdUNUVllIaVNW?= =?utf-8?B?cm5oWWFBdElOMWRUWDR1TlI0UnFXaVlQNDJja1dKVGdPZGFVV2RyUi9kY0Jh?= =?utf-8?B?VENnT056OTdWZUpFRWhMUzM5TDByV3pxK2ZyYUJTS0M5MXVVb2RFRW82Wlpa?= =?utf-8?B?blRpdmliYmdFb0kxdytHZVpTOWNSdTcrc3l5UEx3UGU5S2VPdGxDdEo3dkhU?= =?utf-8?B?U3FnR0kzcW5NVWFtdnd1WU9IUVhGM2NMYlNydGFLQ2c0SSt4eGFTczdiem9l?= =?utf-8?B?dkFwZGVtemFBWGtpWVdQdnNmSzdjV3Z1VmNkeko3V2FJYjJUaTVTbjhZeGtZ?= =?utf-8?B?YXZLMmFqdld4Z1VkdkpHVExVaGd2cllUR29MVXUraVBVUnpySTR4WEwreVJa?= =?utf-8?B?bG1NSDlNZGZKUkhxQUhqbHdpTmpKMDZsY3RYblhnQ0wvenJLUklXQnBLaVVO?= =?utf-8?B?eDFsaGJNZmg1ZmVPNHh6TkdpRGtzaGpPSDFUUTBDNG5hcTlBUnFwVkhVMElP?= =?utf-8?B?a0NVVkwyV2Q0U29aY2lVVG5BUW9ERnhqTGxhbTdXODNhRWwrWjRucllqL2ZT?= =?utf-8?B?RXZRVEU0TDVuRklWejBtTXNESS91c2c1V2pub21XVFI1RWluRno0aWNSQUdE?= =?utf-8?B?aHQ0RUdjOVBWMlYxRHJ1UUgwb1ZwdnYzSGhSV3B6U3FFd3dnakJFb1ZjaTJI?= =?utf-8?B?VmE3ck50Rk5Fa0g4ZC92amhMSkYyY1lnZ0xmeGZBY3EzWncvTHNrUnkvUEdD?= =?utf-8?B?YWRpclMrSDI0eGpxcEFkOEV3MmoxK0lLWVpKUzArYzVnOGhHU1E5SHZlb2gw?= =?utf-8?B?czQzSTQ4RWVOV21Ha1craldWMWJzdXhESVJ2VXYxQ25zMUtZZWI2WGhoUSt4?= =?utf-8?B?OHBYdkFoNTlMNFhSTHk1U0tiSVdhUzhZYkt4YkE0VmV2NWVBdGRTWG56SW1Q?= =?utf-8?B?ZWtwbEIyN2ZSdEdOdmZEekYxdHRFejlwZmlJdTZQNm9TRTdFL1hHQzFQa0NM?= =?utf-8?B?R1B0VVBlVFhYUStEOFNHUXVRbVpZL2pkdWk0bDFFemFpanBoK0crYTVQU2Y5?= =?utf-8?B?RWhuN3NBWGwwMFNkRFZQSG5PMVl2eXJiUndyU2RpUlN2NFN1OVlKSFFDenY4?= =?utf-8?B?amZRN2ZTNE52ZDBwaDhMTW1LSlZ4YWk5S1BPdHlGNzJvSUhRTWdtVklIeHF0?= =?utf-8?B?WTFvVW10dEpYNVNBT3AvMnFBallHdStiZmgvRFZoTmVhQmFGMzVMRFBSS1hE?= =?utf-8?B?T2IydGZrNmhmamtXL09kemZ1Z2FaeWlnQkhqb0RzS1FhSG8xeVZ0Z25iYkt2?= =?utf-8?B?ZjNsNkJKQTZESmdNS1Bzdk1DSDlEWjZERTNqc3c5Zzdxelhadi9zMWxORkZN?= =?utf-8?B?UlUrUVk5MHlkSmFpTXpneVRMTHlZMFhyVDJ5RmVFWDRZVDl1V1J3Yis5SU9F?= =?utf-8?B?OVA3dktsMDQxYlZoMzd2T2podU04ZzBGRTZGaGt0dzArZU43RStlY2tzL3RZ?= =?utf-8?B?bWFkY055Zy9JY2FXWDBpMVNtUW9ibldtNnNmdFl4dndGN3B6dmtDRVA0SGw5?= =?utf-8?Q?VV9MIdTcRFk8719WIEFIM9edTPFGKl/ZGYJufoBlsmz/?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: aeb2c3b6-7b1a-4bd5-bcf9-08ddac096533 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2025 12:37:31.0208 (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: xpYJSwZ/tS3u3AOluc8tF55UMUqrf4SLJ7L4RtjSQHnsMPql/nOwJ+rLQeHIkR06CPE4EtAHOKOA5oNsq+NzRg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB7278 Implement `Borrow` and `BorrowMut` for `KBox`. This allows `KBox` to be used in generic APIs asking for types implementing those traits. `T` and `&mut T` also implement those traits allowing users to use either owned, borrowed and heap-owned values. Reviewed-by: Alice Ryhl Reviewed-by: Benno Lossin Signed-off-by: Alexandre Courbot --- rust/kernel/alloc/kbox.rs | 57 +++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 57 insertions(+) diff --git a/rust/kernel/alloc/kbox.rs b/rust/kernel/alloc/kbox.rs index c386ff771d506a2eb4c211a93ea9b59bc04c93f5..e60e8c9b4d8539db6b8861ce9b8= ae610ada4ddcb 100644 --- a/rust/kernel/alloc/kbox.rs +++ b/rust/kernel/alloc/kbox.rs @@ -6,6 +6,7 @@ use super::allocator::{KVmalloc, Kmalloc, Vmalloc}; use super::{AllocError, Allocator, Flags}; use core::alloc::Layout; +use core::borrow::{Borrow, BorrowMut}; use core::fmt; use core::marker::PhantomData; use core::mem::ManuallyDrop; @@ -499,6 +500,62 @@ fn deref_mut(&mut self) -> &mut T { } } =20 +/// # Examples +/// +/// ``` +/// # use core::borrow::Borrow; +/// # use kernel::alloc::KBox; +/// struct Foo>(B); +/// +/// // Owned instance. +/// let foo_owned =3D Foo(1); +/// +/// // Owned instance using `KBox`. +/// let foo_box =3D Foo(KBox::new(1, GFP_KERNEL)?); +/// +/// let i =3D 1; +/// // Borrowed from `i`. +/// let foo_borrowed =3D Foo(&i); +/// # Ok::<(), Error>(()) +/// ``` +impl Borrow for Box +where + T: ?Sized, + A: Allocator, +{ + fn borrow(&self) -> &T { + self.deref() + } +} + +/// # Examples +/// +/// ``` +/// # use core::borrow::BorrowMut; +/// # use kernel::alloc::KBox; +/// struct Foo>(B); +/// +/// // Owned instance. +/// let foo_owned =3D Foo(1); +/// +/// // Owned instance using `KBox`. +/// let foo_box =3D Foo(KBox::new(1, GFP_KERNEL)?); +/// +/// let mut i =3D 1; +/// // Borrowed from `i`. +/// let foo_borrowed =3D Foo(&mut i); +/// # Ok::<(), Error>(()) +/// ``` +impl BorrowMut for Box +where + T: ?Sized, + A: Allocator, +{ + fn borrow_mut(&mut self) -> &mut T { + self.deref_mut() + } +} + impl fmt::Display for Box where T: ?Sized + fmt::Display, --=20 2.49.0 From nobody Fri Oct 10 09:36:29 2025 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2061.outbound.protection.outlook.com [40.107.223.61]) (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 04B7F267B99; Sun, 15 Jun 2025 12:37:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.223.61 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749991059; cv=fail; b=ceS8P85gX08+e1XNeX4vVvC1tH2oApHXozxCWd02SQA7ewv/4QJKPUt+c4PjcQQwxkG6uxLjpYEZYbSSSOqE8hUUmkllrif2RbVaCe4MiYfb2EACvHCK59pPjwcJZA2JgIKcEY/W1Kd+ZeFbK2RhrBjoMm5RxgteOkELmW5NqGU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749991059; c=relaxed/simple; bh=SSaJTEecKctoQELa2iBwHmcj1bXxy/3jvA9aOFNq79g=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=gZvWjx8LvqBkSS66k4HbmRUytDKEqmRvBS8aA9AtyPrHGwQh8O8wcjNYFuZuVHrmKTco0tYZ2eZie/2VzLDFRiXJnYcEi8pNl8xAizb1hrbSsVLNjpcKeDiA0iQJlLKLHXU0yD8o7b0AiQDdQhSUhz9xyZ3iTKp3a+YqPggwYAs= 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=jXHInmb9; arc=fail smtp.client-ip=40.107.223.61 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="jXHInmb9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cHoS+cKpDo45VJrMZkOzUTYbo5r5MkQV89Fvgn/cHm07P8ctpffoAy0H7J1giLTpmbIEhyib2LbHwhjKecAsW3hCSNsHpG0JqHkDrpW6e/sDoR5g0OnHLDUTv46oXrOiBzrKmfjQeyQsI407iktvKjF9FfoX4sKxy+lEXom6X7R3xProS66KnoCUB/TtLxKUYn00Qmy8VvpqwFsyZcIy/Hv/o0ji9HrIMpX5japGlPjucsR0cNCtXoYkjHfpsALL2qxE6ePQs8Uy/cFogaCmKRhXfoArBPX/3NNMohdvWTLh+jx2QnA1yi5s3vHOA5ixhkr0FReaPQk7Egvo2RmkXQ== 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=7rzYw7x2HCEptL29VyhEDw4tAnPhlhIQiVbDNhE3gw0=; b=q0zcZaZYsuW1rYXujCOfHpEJAaSeR54ZcbnuUnVpanZhIL6yr7fTBC3ZtB2HjulcJXTSu0wwAkNAmCw5o5bQztG1nYbNEDcf4zmAOnw64l1eimAyxHdxKygcAfq6WstJDuxbwpKI6+jjtBBuP8VtgnDPbWSYeq7J2ON3d29g2h6IQgOMnq+7m5/fYryQOC5/cYd3r0Pmkwnr0DmyEUDUQmh9zr4K7LTUFJRIAYYjOoQu5qfOcsO/eTwB2PnonX4b2NSDliyq6tSJlGrYPhkD5brbKBRJRP13UueO5Ga7Dnwz/PQCIFRcq0HuDVwDgqBgf3JfIFHw9OrBUnfO35ifWw== 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=7rzYw7x2HCEptL29VyhEDw4tAnPhlhIQiVbDNhE3gw0=; b=jXHInmb9A6u3rdkusO8jsCy75uBS7QKnrLn2siB1K5ErCJBKUHnKOsAybg0HTQqzeZc0ot1FNxfVHrguDmx0mc7Mrj+hnLJLgajl28AWoAtIlowK0WUaJCCfDml5vI+pzn0Z8FC/njaRiIAynWkFk71MK5qnfn12mmCNwU+UVo5iR7tDdifx+zxFnkRhqQzKNwR650W3+meqOG5lUOQWPeUFEMHjSDVX8w4ecYL9Chs4oTFOnaDdXycq+iXu+z6ljMzOTukXARPNhkDDVGojDYWCMafICUSRYnErm7PkiHAkExtOzdetddyK9bYuAx27k6bKeu8B72ls9eT67WCgkQ== 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 PH8PR12MB7278.namprd12.prod.outlook.com (2603:10b6:510:222::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8813.33; Sun, 15 Jun 2025 12:37:34 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99%4]) with mapi id 15.20.8835.027; Sun, 15 Jun 2025 12:37:34 +0000 From: Alexandre Courbot Date: Sun, 15 Jun 2025 21:37:12 +0900 Subject: [PATCH v3 4/4] rust: str: implement `Borrow` and `BorrowMut` for `CString` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250615-borrow_impls-v3-4-621736de7f29@nvidia.com> References: <20250615-borrow_impls-v3-0-621736de7f29@nvidia.com> In-Reply-To: <20250615-borrow_impls-v3-0-621736de7f29@nvidia.com> To: Danilo Krummrich , Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, Alexandre Courbot X-Mailer: b4 0.14.2 X-ClientProxiedBy: TYAPR04CA0020.apcprd04.prod.outlook.com (2603:1096:404:15::32) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|PH8PR12MB7278:EE_ X-MS-Office365-Filtering-Correlation-Id: 67625fa9-59bd-444f-535f-08ddac096772 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|10070799003|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?dWVkVWQyZ2tZQ2F2aDlYdDFPb0VjbHZmZnU0dXpFZGFXbmU2bjJmaVQxcWor?= =?utf-8?B?cm9ocGRyUnZqYlJWL0xibkJmVXVLRGxRcERhNG0zaEd0S0dsN3VYWmE0S21T?= =?utf-8?B?N3F2YW80cy9HbjlDMllWRGJoTnMvWGk3ZnB2TElsS3dibWNOZkFJTENsMWJm?= =?utf-8?B?RG90YjRPbkZWcjdNV2JzVVBqaEZoc0JjcXFSamIwKzlCWXMvRGdDRVhTdFU3?= =?utf-8?B?Ly8xc1M1K2dXQUJVRWVoT1p1OTNGQS9LMGlDNkFoVlB2MlFhR2RqaGM1QTdy?= =?utf-8?B?RzJIYyttcHRpdmZ4QXNGOHB1cUlqWExsOVJhTVNYcVpCQnY2WWZaNFlmU0d3?= =?utf-8?B?NC9pV1NQWVp2blQxQzZsWUlmanh1ckx0T0I1MmlhdkRyWXR4UzkrdVIwdW80?= =?utf-8?B?SUNFVXl0WE8rbVFscjFVeTJIQWFBNGk0K2JoVUFiUktpdlJ0em1BWHNqZnhw?= =?utf-8?B?cGJFRU9oNDRHMFBJbS80RWExZFd3QUw4SkoveHRjR3htYUMvOFF3azJVZVcw?= =?utf-8?B?Q2l6c1drRHdEa2FqOUdZTG02UTgyZU9Rb0UxZDNIaGwyYkVsd0ZoUi84djJN?= =?utf-8?B?YVFPcEtVQmlnZDNSbitGdFVYVSs2dE1VUjZ3KzVsc29zSXc2SWtSdWdFa1hq?= =?utf-8?B?KzhXbC9DZ01MTzhOMEc2b2dYTkh4cWFHTDRwWVJSaHFJOFZGK3N4MWNjTktG?= =?utf-8?B?M0lva2pmWFRLTXJxWXhmZGNNTS9qMkR3S0pUNENKU01tdmJsc01HSXRiZzd5?= =?utf-8?B?THdtZFYrd3lYeDlwSmdqWkozeTFlV0t3bVA4V3FpcEF4UHQ3WUFGMmdxU05U?= =?utf-8?B?ZXk1L1o1ZDlaN3ZZb09nVWNmTUNnSHVuUWwyb1JOdGVkNG40enJab2M5MDh3?= =?utf-8?B?U2lYWE9NSFgvRVhiZTVRSnRHdEdWKzVabHE0a3Q1NWpjb2lKRFFsYmZVbU9p?= =?utf-8?B?UGdaU2ZGZjRrMkFhalo4WGxkWmZvNjFTM2xvTG1ncDRjVy9wVVBRWUlvRVQ3?= =?utf-8?B?ME9JaGg4cDFYR28vdk51UnIzaVdCUmFIR2NnS293M3lsWXNCWFpPTmcySndw?= =?utf-8?B?VUt4aHVBUUtEWjZxeitqbDJBdXoyVDZhSjFOb2lkRFgxOTU3MEU2RmlTSDZF?= =?utf-8?B?cUhHLzhZdlFrMHNzMmlrL0hUZWI3eHNQMVVZcGNjR3UyN0NwQThJbnZmTG8y?= =?utf-8?B?NW9nK2Z3QlUzVWlXelV3TzJySkc4RDNwQUcvaUNyS01DcXMrNWJTQjUrNUx5?= =?utf-8?B?cmNKZStHS2thODU2MlhBOE9VUEJYYlRmUndlbUNQcUQwNW9vclNRWURhb0Y1?= =?utf-8?B?Zm5lT3liVWFQWmdIZldFblNDMG8zYXVPdlY0cFhIZUFDSUQ3N0VkOTBmWVl1?= =?utf-8?B?M0wyTDNHS0UxMDFqNDE1cXEwVWp1N2xKVVJXV3N5Z3ZnWDBuRTM2VzNyNUJZ?= =?utf-8?B?ZlNmMSt1UEJKa3VNNk1WcjFsVUQ1L3dPTmNGR0VCSmJJMzEva25kT2g2ejFj?= =?utf-8?B?RjRqd0lxbERrdzBIbDVXYVRtSnBYL093MXhnNXBVK2l3V2NEUUFQR0pMaitJ?= =?utf-8?B?TkwrbHFjdVc0cVFOMUhCNXdUWExxUC9GQnJ6K2N2VkRKcSsvNDhTU0xrWm1W?= =?utf-8?B?Wm1oUWErVCsyNGkrSTBDdnpuanc2QnFrUnF1cjRMQUR1Sm15YVQwVjkyNXFR?= =?utf-8?B?dHl3dk1FVVp2czMxVWg2ZnAvWGZ1a1dkeWhBbUpERjFqaXZxOFZ0aHJXYmFj?= =?utf-8?B?OVQ0SHp1L25YSkdkTG84bDBJbkRqYmVNWnE2UnIrNWlBYXZVZTV2VncvSkJr?= =?utf-8?B?aGtzaU4xUTVxdWVPKzM2bmppZVJnaWpxaFF2Qm5OODBoci9aU3BadjdLY2dn?= =?utf-8?B?Qi9Tdmp4N1lmcjI4L0FEU3JocVh2SzVHMjRSdVZvOGRFSEkyaGE5RXhmQzc0?= =?utf-8?B?SEoyNERCZjIvdTJRMW9wRWZmWWs3N0RreU5UdklCeWdJWDl0OGRLNC9RZC93?= =?utf-8?B?KzFLMDdGVzJBPT0=?= 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)(376014)(7416014)(366016)(10070799003)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MWk4NVZaWXE2R0QwSHBSR1R1L0lXYjVvNnE5LzRVZWF5UjdvYXY3K240VFdF?= =?utf-8?B?TnhMZ1BpZ09xdlhwWGtHZnR4TkFKUzRVUXV2TUJzbHk0NmFPeHpNemhLYkRK?= =?utf-8?B?SEpPNUpWOWU2aHlWMTQzejVra2JtRm5FSHdYQWQrREhzUWJMUlE5ZGt1U1pV?= =?utf-8?B?Q2RRbTdQZFA1aEdLeEdhWUdpY2NiemRNSWZoVVNmNm4xZ0Y4RWt2ZnQzMHUv?= =?utf-8?B?SjNaY0wvZk56K1ZuYnB6alVLOXRWeWRJNFFBQngrWm83dkxBdHZHbkY4a3Rk?= =?utf-8?B?SUVGYXRhajNtR0FXYUpKTEVSRzR0M0NmdnllUHBTcUQ5dFJkaC82MFc4V2Ix?= =?utf-8?B?VVBJR3FSR3EvY0ZlenVKS2syZEROZzJ0WGdUWFUvV016VVNGU3RVMHNSZHVM?= =?utf-8?B?MUc3SzFMcmdZTmRKcmd2dWNPSVFFczJtNFRxOWF3eFJNckx3d0pIRllWRjRt?= =?utf-8?B?bHpjOWtyVG9BN1diVVhWVXAzZGUxMnl1ZFRIOFQwRmZneHNyZ1p3S0RFYk4v?= =?utf-8?B?NmdkUEJad3pkSXlLR3Rkbk1kWjVnak8zMFRoN1dtVm9CMUt2NWorbE5BMWJl?= =?utf-8?B?WjVsWGdpdjNlQUw1WjVHSnNMb3pCTUFEUHhnMWR0eVdVR0VtOVV3TCtSVDBr?= =?utf-8?B?TXJKbVFkdnRETjZ0emRURWhLZUJvYlFhcnBlVGFveTgvcmhVMkxoUW15UnV6?= =?utf-8?B?Q09KWjFXeVQ3NTFQSXpLL2p1UUdRalYzVnV4MnJnTWlmdFF4L0lObnpZV3NP?= =?utf-8?B?ekJ5R296aVQySzZqcTBhUVNybG5mU0phMHF2djRNOU1mV1Y0aGRTdjdnYnFG?= =?utf-8?B?blMwanZvYVl0MStKYk4rZExHZWdiUXM5aUwvbWhqSER3UDBPWXJNMDBXUU9l?= =?utf-8?B?NEVJZTEza2wzVUE5dG5ZOFFIN05nUnVKcU9zclJOSUE2U28xb2ZkRkdJbXZU?= =?utf-8?B?RUI3emlTaTlFWGxuOXBLS1BQaTF5NzFVZERIQ0ltNytUUkY4WnJiV3BXUkxu?= =?utf-8?B?UXVWazRHZGlkR0lTM3VoWml2ZTNQeDhva2NqcGc3b2RkTWFFWGlzRDdwTEVx?= =?utf-8?B?ckJNUjF4TUc5aDd3NnFDbVBBVTQvNjloN01teW1jUUlWdjBGalg5WFpCOWFz?= =?utf-8?B?cTVsUTBBU0tlVHJZaVEyN293SEc3T2F1dndRTVU3dksxWGVZN0pCbUpBQW9U?= =?utf-8?B?ditXUVBnVjUyNWZWN0cyVTU2dHpZaldBQVozVWRXTzYwYU1OUytxVXBlS0sr?= =?utf-8?B?eHdheTV0WXNLeVJ6NDI5bjVFZC9SNEo2cTJnK2J6MHdna2NlcXNWRmdtN091?= =?utf-8?B?cUFPVHN4eXFjcGNEVTlsTkhFYlpsN3NCd0M1aU91TnM4dUJJWTJmNTBhQmJL?= =?utf-8?B?alh0TFp0Z2t0clpuSUQzQnZPdU1Mczl6M1BFWkE2TUtRUFQ4NG9YOEpJb0R3?= =?utf-8?B?VnBvVDlOdE5DcnlETjFpRktBWVdQMU9OaWpmc3JqWndEU0psRFdUWlR4ZHda?= =?utf-8?B?VnNaYzJvaWRWMENFZllHUzE2V0Z1ajdNRnR6Ymlsbit4OG1MSmZ5U0hCaUI3?= =?utf-8?B?dlRxcko1MG9USDBIU0liZXpqVTIxd0I1UUlIaG9haGtJTlIwK2hsWTMyNVRQ?= =?utf-8?B?WUN3djQ2aG9CL25uaFFnK1BMMmFzUC9HQ0FrbzRzM0xwSjV5amJSaXVXSXZy?= =?utf-8?B?R1prc1FENjFka0N0N1p3V2dMQkFKMTUrNFplUGUzUjZlbnFKZUlDcHJlZCtn?= =?utf-8?B?dXNRREsvaldiQVJmd2ZoWFdFRGliYW5EbGtCU0poYXBqZFIvN1dacWFwSXRF?= =?utf-8?B?VGVUQUFYTlpzbU9KUmhERm9FSzk2TXN6dTJrZ0wvcUFUZUdWSmpIdGRQYlNX?= =?utf-8?B?ejRHaExqay9LMWttYkxVcmRIYkVFMWdtR3hVK0pTcEw4VGhQV0h3bjl2ZGJX?= =?utf-8?B?QTl5MlpRcTk0TTAzNUNsOVVHbEcwNzlGRTZJTTRqT3BqaDQ3SndPNFZ6K0Zt?= =?utf-8?B?bWxrYlA5NGRLUlhtVGJiOWdFSUpJc21rRXZDWUlSRHZkM0dubCtoRHU5M0g0?= =?utf-8?B?SG9xTVBsSUR2QkRSaHBzM3UxVWFQbVpSbUpvN1dwV3BqWDRaR01CeGVYTlVr?= =?utf-8?B?WHlUNWxLaldaNlFQci9YdmRia1UwMm9aWU0zMC9FVi8wTndsbnNYOVUrcytp?= =?utf-8?Q?iHeCvWb+/gHvmaGMh2FNhMKjJcgVrX5quuZz6MP2y1n5?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 67625fa9-59bd-444f-535f-08ddac096772 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jun 2025 12:37:34.7614 (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: dnVa+3ers2PErBWkKMNVWoprp0aKRucoAeXHOXeZ8yv7YxBfK1y0T61EVwgOL8nbayWu5HLOVCvqgeWEPlQK5Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB7278 Implement `Borrow` and `BorrowMut` for `CString`. This allows `CString` to be used in generic APIs asking for types implementing those traits. `&CStr` and `&mut CStr` also implement those traits allowing users to use either owned or borrowed values. Reviewed-by: Alice Ryhl Reviewed-by: Benno Lossin Signed-off-by: Alexandre Courbot --- rust/kernel/str.rs | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/rust/kernel/str.rs b/rust/kernel/str.rs index a927db8e079c3597860880947a03959e1d6d712e..1cf787d4ace36a84d0ece7a7017= ef0c67499bf89 100644 --- a/rust/kernel/str.rs +++ b/rust/kernel/str.rs @@ -3,6 +3,7 @@ //! String representations. =20 use crate::alloc::{flags::*, AllocError, KVec}; +use core::borrow::{Borrow, BorrowMut}; use core::fmt::{self, Write}; use core::ops::{self, Deref, DerefMut, Index}; =20 @@ -911,6 +912,50 @@ fn deref_mut(&mut self) -> &mut Self::Target { } } =20 +/// # Examples +/// +/// ``` +/// # use core::borrow::Borrow; +/// # use kernel::str::{CStr, CString}; +/// # use kernel::fmt; +/// struct Foo>(B); +/// +/// // Owned instance using `CString`. +/// let foo_owned =3D Foo(CString::try_from_fmt(fmt!("{}", "abc"))?); +/// +/// let str_data =3D b"abc\0"; +/// // Borrowed from `str_data`. +/// let foo_borrowed =3D Foo(CStr::from_bytes_with_nul(str_data)?); +/// # Ok::<(), Error>(()) +/// ``` +impl Borrow for CString { + fn borrow(&self) -> &CStr { + self.deref() + } +} + +/// # Examples +/// +/// ``` +/// # use core::borrow::BorrowMut; +/// # use kernel::str::{CStr, CString}; +/// # use kernel::fmt; +/// struct Foo>(B); +/// +/// // Owned instance using `CString`. +/// let foo_owned =3D Foo(CString::try_from_fmt(fmt!("{}", "abc"))?); +/// +/// let mut str_data =3D [b'a', b'b', b'c', 0]; +/// // Borrowed from `str_data`. +/// let foo_borrowed =3D Foo(unsafe { CStr::from_bytes_with_nul_unchecked_= mut(&mut str_data) }); +/// # Ok::<(), Error>(()) +/// ``` +impl BorrowMut for CString { + fn borrow_mut(&mut self) -> &mut CStr { + self.deref_mut() + } +} + impl<'a> TryFrom<&'a CStr> for CString { type Error =3D AllocError; =20 --=20 2.49.0