From nobody Fri Oct 10 13:38:09 2025 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2052.outbound.protection.outlook.com [40.107.223.52]) (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 C8556199FAC; Fri, 13 Jun 2025 13:46:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.223.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749822390; cv=fail; b=sCCaD4cZ+MlOBkw3/kMpoteaGxjx8Eqi5o6kK9Lc8XGjmzIjI8DdRNhRYEM2JE8Nbd0inQp/7k45qxy8/faO7SHMVcY0kfP44Ye3icdDxoXKRJIEG01mGlNm0ApmqImMqQpn36AOs1Ehd+aFpHfL2548AwLF8tsgBEFLBBW3qrE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749822390; c=relaxed/simple; bh=3Vb0Zs6ff94NMI1eGirZbF1GLE+3PfrdGUMtIEhJ65w=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Ay0lJdM5Zxout7p1wxnNYpCNe09vWYcOuDeDhrXp48NcZ4UVxPR4xvhZf/6v4z+myPycKpuhvcmYIrWhGzHSDqpURh9NvPaQgMWnGqYjOkWC8DzDFqcQ4OSY0h8LxuluY5ru0yXB06cVgDkXPUqG/RC/MV1RH2khOk32gxKWrhs= 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=LDFFtUew; arc=fail smtp.client-ip=40.107.223.52 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="LDFFtUew" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yqAk9vZWC3jNfIErfbqBxu9Q/cC4+QH63V5P5zORYUf2Il9HOicfyLWP6KMAKrLbeNEBaSTXmo3sgXf+f/vM8ilzkjR2mwGEc7mnIkKg5atRaKA9oozcfxv+JPvu4dpJMql24AAct9h6sFTnEUqLcs3HR8ewq0LdCLgT8Jgm3dYpmpzI7LuYt/kjBbMlKWwaC67NSEEvmhUEr4Mr6BcmSkf2bIut4qoo7MqYhwHm9Pspo9mn8fzN/Pk7O8C2rN6KYtfPyGXkacreLG29Mnt17wNspc/b12ydjIXKmOHXbGUe/sc/w+Zj3dZnNtOzOsChd7VqOxbuOMZ+ikEKFdoTFg== 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=VakdrVi5dX0CxYyKdJ8rQymM405nm0WJvl+a6ZIzZdY=; b=GEtNZhJ4w+CW/DSxSIGILBbzws4xyiu5Cu4aPSoNA0GK8eGcnIzC5QnbYVAF2j/iX0x1PkYJr5UW35T3kHcmwaHrA9t+aMV1dUq8j/5cXaULcp0RUbDd/iqWMLIYm+ozYBdcCpqBUsvjHJvTkePUxW9AaW6iT17u8TJCVEFGqBfyv7yoYo8tsYtrE9+nl1PfYXR7k8DnX6L041lcrRt+ZLqunDJACveUX10lvDJ1i0ODaADko1NGgRiWCCqaHc4PvCo4y8A+omiNaHlEN9LKGv69HuS8gkBurWtBr+Gr68adOCcsF4/MJMyDcAKgJ+yU00eafpCcrcz943DW7ONE1A== 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=VakdrVi5dX0CxYyKdJ8rQymM405nm0WJvl+a6ZIzZdY=; b=LDFFtUewIw9X/sJI/BT9U2nysbxs2zH+0IeQo1ESyFtBh/HKJ5BDZHD/Gj26qqf1+U4so9AM4GHUBYsMISymMkyIctd/7zLiqPGaZMP3Ygr/YLJaNhQoj7P+leFm+WM4Dn8Ga8y9WhiVN1mlDYBpdhYL5Wez7omsOU/yBT+R5hfe447c/nYICXT9+/jWSiSO/hked4WRIRhHXi3pzDjHofIX0qivs5EtjU38Vg8AGc0p2I099MUis+Od5xPSgtIfybYv6rhmODMflDkVOheUm7IzBOq1UFR3zD5tXy0+07fZ4O5cmCPEvHLp/U4Kudjp4qIxOsq++V2aQcIiBqlRlA== 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 PH7PR12MB7892.namprd12.prod.outlook.com (2603:10b6:510:27e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8792.37; Fri, 13 Jun 2025 13:46:24 +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.018; Fri, 13 Jun 2025 13:46:24 +0000 From: Alexandre Courbot Date: Fri, 13 Jun 2025 22:46:08 +0900 Subject: [PATCH v2 1/4] rust: alloc: implement `Borrow` and `BorrowMut` for `Vec` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250613-borrow_impls-v2-1-6120e1958199@nvidia.com> References: <20250613-borrow_impls-v2-0-6120e1958199@nvidia.com> In-Reply-To: <20250613-borrow_impls-v2-0-6120e1958199@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: TYXPR01CA0058.jpnprd01.prod.outlook.com (2603:1096:403:a::28) 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_|PH7PR12MB7892:EE_ X-MS-Office365-Filtering-Correlation-Id: 50ba0d9a-5a47-49dd-e7fa-08ddaa80b011 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|7416014|10070799003|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?ano5cnpCSlg4eDBtUjVVSVd1a0k0R29iWGxjb296TGQvTjJiWlRlZUdMMDhm?= =?utf-8?B?M2J6d2w0aFlKSkRvcTF5ZHp6My9sNWVpby9uYk9GenZVRzM1NjlGOUV0aXk0?= =?utf-8?B?ODFrUzU0WmRTZFhEWUpZbW9rOUdZTGxvNWdRZjF3eUdTRHRpY1k4MnZBdVpk?= =?utf-8?B?NlBZcGNnK3lsY2tFUHJOMmxxcHVCeDFIa2ZLUngzNTJycFlLUytJOHl2ZXZW?= =?utf-8?B?VnZkc1paOC83M0RCcUd0c2Nhbnl0S3Z2d0FLUmFweFZyemx4N053MzJuZ3Fu?= =?utf-8?B?eU4rS0s2amdGTW9IN2FLRWJVaVpwNGFLYkhmWXRaWnJsbzhqNkdhK01YM0Yv?= =?utf-8?B?TXpuS1FmYWROU1VpdERhelhoWlRxWHlpSk15M21heHl1YjZuMmpad2twOTlo?= =?utf-8?B?S3pZM0tRazJ6RkhGNkoxWUpTVU9sdkR2Smp6RGVLMDVrV0lLVlJjYnNRTWU0?= =?utf-8?B?OHEyY0s4Ui9pbldsamxnZElKTnBNUjdBNHpIOHNBU0lwZXlKTW1QczFaK1ZF?= =?utf-8?B?bkdxWFNiZ1plNm9uNWJiTHlFMlVycTY0TWdtb3ZPS2lYV1Y2QjFMSFpnVHBR?= =?utf-8?B?YVlPcExJWGRGeWpoQnUzTEdlR2FCNHhibStzTGJoVm1XZ2oyeDBXM3BPbG9k?= =?utf-8?B?cm5UUExHdFRWdFlkdTgycjZWT2RRcUNYeWRTbmJCeWcrNG1ocWZDRDhqdFBT?= =?utf-8?B?LzFRQ0N1emJrRUxmeVdySkVYRWo0VTBISTlvenFneFVvdFplVVdmWS9IL1Zu?= =?utf-8?B?QWh2SDBMZVB0Y2ZvcndLYVRkVHZTRDR4SjM1ZUhQMGtnM05sT1h6NXoyM1N4?= =?utf-8?B?dDIxR2psRStTeko3NStJZVJZeUdnK2R0K0lQY1Z0TmorTVd1MzNYYkJKbHRz?= =?utf-8?B?K3lmMlorTi81UVVSeDZ0RXRDMmRJRGNsSWpmbmQ3L041aEJaM3pHWVROc2NB?= =?utf-8?B?OTk3Q0tMdk42MGtpWnQrSDNXZjBYZDhqQTFFeEM1Y1g3MHNBcWNrb0xhWUkv?= =?utf-8?B?dVdudVNMR25uTkNMenRyTW13c1JKNmN3WFFpOHBLaFIxaXZQeXZoNVc0azh0?= =?utf-8?B?Z3V5aHp5czB2VllpclBuc1V2b09VS2NsbnlCNDdTazQ2UGFvUkpCeHd0OHpO?= =?utf-8?B?U1lPN1VHNklMT2lEdTVJVG5nVGVmMzhNNnZVbFVwQWZBNzZJQkhzcUNVeEdt?= =?utf-8?B?SFVzdzdpcmF2U3UzYlNEN05ORzJqQ0kzUkxiTXNpNWJ3TEhsMTJvcWZYMnN5?= =?utf-8?B?UXh1UWtmRVVZSEVNM0ZIaXlDTk1QZ253VnRlaGxPZzZEV3FiMmtjVUtzaVUy?= =?utf-8?B?Wk5YaURneTFsRXFOMjE5QzVLa1NyeFozbWEvbWwrN0psTXR5c2xIM1FTalhB?= =?utf-8?B?UE1Fbjl6a2FqdGxHU1JPS3k5TVZ0ek9oMGh2L2lmMHUzU294WEJxOWdXOSsz?= =?utf-8?B?WmZ3b2JPQituZlRmRWxpa3RNb0ZISkt6amZ3dFhBNTU5MitBZjUrSmpxZ1k2?= =?utf-8?B?Z090MGlnbFk3ZVA0aHBWd05MYVR4bm5OUkFNQjdhaHhtTlVxNmhSMTc4TzRm?= =?utf-8?B?aUtkZ0owakFjUHpUVjRWQzllcFUzZVB2NFJSRzZFakt1QVB1UzkvUm9Sdktk?= =?utf-8?B?c2RYZDV0MFVWNlhqNWRsaGpPV2FRbndLYzJiY3pkTzdic2lPYTRVczg3NW9W?= =?utf-8?B?SDVXazlzWkUrTWlHNHRaZDl1alZzT1NXam8vN3pqMDdDbFF0SW45bklOeUxJ?= =?utf-8?B?ek16V3lxR05EbGhoUXAxSW9rY292YS9RNHZBSmZOSGVyc1Arc3FvaXJWb3Q0?= =?utf-8?B?V283M0RPRGFvQnY5b0cxQk9CVERrckd1R1Q2b09CTU5OOHdtYjlLaUhEeDg3?= =?utf-8?B?Ny9WUGZWallKWW0zcURmdmJ3bVZiaWZSM2hjUjRRc253K1hmb2lnMmFyR3Bo?= =?utf-8?B?TmRLSHBhUnpSQVV3YzFqOXM5WGsyL1g2RGR5TFA5a0JpTjRLaDYvbTZYa0NQ?= =?utf-8?B?RkJNaTl3blJnPT0=?= 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)(366016)(376014)(7416014)(10070799003)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SzNnU3dDeVVZMDkzWklxaGoxbVhIaXovMHorN0FCZ0ZMaDNpRWRHT0NIYlMz?= =?utf-8?B?WE5odWdYQnFWUHZWNFJ6R0ZZbjRtdHR6MGpBdEI1WEhWS2ZnSmMwMWdSWGV4?= =?utf-8?B?TFRnNk1EeTViWWFvS2NGd2s3M1lXeVpadGNDUXljUlVSU2FKUTQ0cUswV3pI?= =?utf-8?B?QW4zTXRscWVSWVV4UjBoYVRUR0d4WlA0TllvR3N6elhDRjhsTVRNMldZajdt?= =?utf-8?B?dFBjdjI5UnFvU05QdUJXYzFFZkk4V20vSHU0QVR0Znoya1Z6NGh0ZytPS0xq?= =?utf-8?B?ZEVURCtWZDQzcDJRamlHd3l6aW9YMUJQbkY1eWVNYkJTY3diTEdEaGVEbmhH?= =?utf-8?B?aUJPRU1EdkVOWXBnSkk5OGFPaVlnbGlSeDQ3bjhhczVibjBGS0Y2WDBnOTVn?= =?utf-8?B?b1dpVnlZSDdHekNBSldlMXdDdXNDSEVGM1VObmJleUdIZkdXVWtwMnhLVnZK?= =?utf-8?B?aGNCdVF3Ym5VMlJxa0dRMnp1ek4wZFJUWDhNb3N1UXlJaWFHbGI1czVpTjho?= =?utf-8?B?WkNEVUtRN2FMK1VJaEY0Qi9Ndk1PckYyVC9qR1Q2bjZRdUhkbGlIYzVpWXIz?= =?utf-8?B?ZGJlbGZzUzFNeU4xakVFcTZJVVVOLzdFUE85Y1lxOW5MY0J1d3FRNVJrWEY4?= =?utf-8?B?eExiSWpCK0ltTk04dWJ5dVp1RVpOcnltaWlmbVlwaC8vcEtRK1gxSGQvaWJ3?= =?utf-8?B?NVk3NWhDQ2tUbVkzdTN4ZFhtUzdRY2J1WGVnTlFKWUVpd0h0T29vc3pVYzdS?= =?utf-8?B?YXQ5MVV6Ukl6TUV4RVhxTnlYcGdMYTVTcHB3LzRObUNTTHVzWi8rWDhUdzlx?= =?utf-8?B?WjB3Qzc4eGVpanFFQlVSQW9RVlRnU1djREhkcHJKamhKZzRaeHV1cnY0NUhM?= =?utf-8?B?bVV2aFl0RUI5RkltcDVyc1cxLzlSNjNMcUxWQVg0WS9NY0U4YlBrbUZ4ZlAz?= =?utf-8?B?Qlh5ZFRCM00wc1N1YkxNelFRZWJmSS9NZmszRFMvR2xOVkRZNThrV2tzMEo0?= =?utf-8?B?RTNZSzFRVk9CRXRZK2NmNFB1UkxCNm1nbzFzZ2IwK1BmV3lKTXhvU3QvZE03?= =?utf-8?B?U0lRRml5bTRCbXBSVG5MSVM5ZFlCSUVRclNPNEV6QzBqTkh0ZjUxTUZPcWVa?= =?utf-8?B?RkZUTW11TDFHcS9CMFdPRDBPYTBBSHlab0FBODNQVTVPR09id1F3S2dvekJ4?= =?utf-8?B?dEZzb0MvWU12MXgwZDRqTitmRHNwb1ozTXlSK0VsZkQ5cVd0VFgyc3dXbXNB?= =?utf-8?B?OEtXM3pRdk1jVW1FM1JCMFBjNXkzbGl4QXBUQlljaXhrQTJZRGdiT1l0QWRv?= =?utf-8?B?V0pMRUJnM1VWdjV5T3lWSlVMRmFKanZlTnRueWc0TGhhczN4ZWZvRmgxVUkz?= =?utf-8?B?RXFCSzhaMkVIU1RaaUhXNGVwM0F4VVBqdUFTbXVBSzh6dW9oTVRkTDZiTWYx?= =?utf-8?B?eWtLV2FEbDFTOFBoZjFGbnJvMzI4WWh5RU96UUF3aXI5VFJ2alFqVmVBWmFO?= =?utf-8?B?WHo4QVFmdFpraDFsK3J6a1JkbEs2eGIrQ2tPNzVjOVQyd3hIVFBtOTlBWmti?= =?utf-8?B?R1o5NmRyT1lyTCt0NUVCSFUxb1BmcXNGamNMcW9HbmtselVRaHBmTE5VTDNh?= =?utf-8?B?Y0RoNDdXRjJyUVIyenNkYnVkTDFuNVkyZi9KRUphZlJKZGdHMFZUWDFKekFB?= =?utf-8?B?VHFKRS9WdkRnM3ZuMWpDblZOYyt2aHRwZGg0N3RYUXVaMHNtSHpUendaNHB3?= =?utf-8?B?ZGU2QTR2TG1OaGQvWkFyaFo0aDN5YVY3c3ZYVHJrOGdTbzhTSFFWMU4wWVpO?= =?utf-8?B?T3JDMzJNYS9xTTFtejh0M1N2MEpNRW5DdmZicjdqSmw4N3RCMG1GdWVUa1BZ?= =?utf-8?B?dHdtRmlzSTlJdU1JRTRGY3RjdWJPODY0WjdlK2dRWlBBUnlGNVY5Y0d5Sk5I?= =?utf-8?B?U3lRUnVGV05wMTNmKy9CTXpiaVF1NmVWRHZGcStHd0tMTmpSbmdQQ2h2ZVov?= =?utf-8?B?S1RqdmZyY3pRU2xFa2pZTXpWMVE5RzdkOU92aHN0QU1IcXVOaFV4SEtaZS8x?= =?utf-8?B?REVBZDJJVDRkYzJrblFFRThCdTl4U2ZrOGJkVCt3aXpxMHo3UDBxZjI5Q2Q4?= =?utf-8?B?VVh5ZUNHa2pwMlVUWC9RcEtrOHNpVGtkL0xXVjQ3VGxVWXg3d204K21xZkJD?= =?utf-8?Q?szbfQuSQWKnMEfddEGaD2IIGqLjr58Qj3cJbRqHy9gHB?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 50ba0d9a-5a47-49dd-e7fa-08ddaa80b011 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2025 13:46:24.4445 (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: sV+rpv2pWU9X9b1e/LWJ+WY5VJqHcjUCqXm3bKbclt3aUgiElq9mxotzoW9x//NrE8nW7gJOlTGptO6cgPkfKg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7892 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 Signed-off-by: Alexandre Courbot Reviewed-by: Benno Lossin --- rust/kernel/alloc/kvec.rs | 57 +++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 57 insertions(+) diff --git a/rust/kernel/alloc/kvec.rs b/rust/kernel/alloc/kvec.rs index 1a0dd852a468ccda6ea1b521bc1e7dbc8d7fc79c..3f368d4a67683ac5a0ff87d7df3= 3a3bb640ced59 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,62 @@ fn deref_mut(&mut self) -> &mut [T] { } } =20 +/// Allows `Vec` to be used as a `Borrow<[T]>`. +/// +/// # 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() + } +} + +/// Allows `Vec` to be used as a `BorrowMut<[T]>`. +/// +/// # 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 13:38:09 2025 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2052.outbound.protection.outlook.com [40.107.223.52]) (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 8703C22FE17; Fri, 13 Jun 2025 13:46:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.223.52 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749822392; cv=fail; b=TueCkf34AjUxS1p3p/M80MJW8btqMl9GE/PGyIetwBjE9Ljiiz9jvhYJZmOCHQzQZb53bNgTjaN7FX7I0is647We9YipCKC5hkXFsmTXv0f8aETTtix8i6/JmcLzciV/Bttk/fvadyLCbC6xOiv+80rQYl4mpY8A7QervaqnN0o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749822392; c=relaxed/simple; bh=OXrrbPEX9HVy5mlE9RiA3rGbQkwIEv0jpUB68B8G1Fg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=dqtNSoeVhWVLxqgXVxqeZcAb2e1kWfXdgOjOtspxvOwv942WVmM+myiZ4gTp3I615iwAT2CeQ8N9MukoQDYkYRJkJwbrYWAPUnaHdrzS3uf9YIbZmnnF+KXoKJNs1TD0hyrOoPsuqqqByjXcDsklPEO6mpkJzswkoFGJd12++HU= 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=FxjNJc2W; arc=fail smtp.client-ip=40.107.223.52 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="FxjNJc2W" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=h2VYuUctCa1T+fPDG1F2tDFeB305859pHWl9Zdf7V30KQMnl6Ul3n59pKYZn7+XBegpjo9WGADFjAlZrCTonSYyhmiBN7eyx7Vi4BHIzsbTdEqLX+BZ+xvvNaM7QOs3idUY4GfKtzkzIyuHwomva1qfSaMJS0f/jt0ujGDZnUMjwPUEREnhe7bdYpt3SGDm3ykLt/YvNmBskrFJd70Zrmo27IUImBrx6NZB+gj7R0bmu5X8GLD6dWa5XjZ0ZgDOQyJkxND02mYU5/urGxkSMWbWwdzuQLH3L5o2PetfPNeoUXS7VUHOGRTwujYQqVLwTZaGThRrXRgF/svMMOXnXYw== 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=cozEW4Sdu8jWuvtjvqr2nqF+i2+Vm4FuHVL+ALZ9Z+Q=; b=W76KGiTaR6M/9ueDcQUJIfz6CBmQNB36FSDI2cCUzwWiIMoOugrqm2ZS57nDYDDba1tjasXqXFlyzBnywKrGIm70Yz3Zo0B+l8P4tTJukCC3IrU1XpIdXjRfgGxJNy14SM6msuo+4wBQTGFBq96W54aa/XkfxanfRsr1OAyzbPZ581tCdEAqVjLV13vdc6jj+cXvD60wOpWsTxrxPIvfX/lhMRGtJvURaJQfWQyJZmo3rdcWvnQ6m6B9qxzWRtFwaVamepm2muXsbYCeEkpNFCWPusFDpAAxast5OSoXrVDFQme8uKMjPYAKXNkzJWnf48BKFnrW5csWDI/J7sr35g== 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=cozEW4Sdu8jWuvtjvqr2nqF+i2+Vm4FuHVL+ALZ9Z+Q=; b=FxjNJc2Wpn5oM2pDXgmP5KEoLJ5s/OmOIT66+G5a3R89Reg565uA40732g6Vb+Q/6NACJfW80LulIoybpuBcI+JyP126yUG1nTwwPG/Ep+QnS84m68/x2aVFnGuueWj0s2kerLuP4mfkEnyHHMa0r2w1MsRxMgvt0SIH3jmHkHrny64pTPO4WkSmsGYcPKMSg2D0hO3S4dvrIWBUi/y7KDcnb7MvKVdM7no0jxBbd0hpC8lKfar36ynMBIG8dhtfr+x9J3cfOvQdYI8mfuMFy5xV039Gh6CM2g943VizaWnOzoDW3/ICoD/aUbiQJ2aiGe7xigJ32JFpqlamiT6B7w== 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 PH7PR12MB7892.namprd12.prod.outlook.com (2603:10b6:510:27e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8792.37; Fri, 13 Jun 2025 13:46:28 +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.018; Fri, 13 Jun 2025 13:46:28 +0000 From: Alexandre Courbot Date: Fri, 13 Jun 2025 22:46:09 +0900 Subject: [PATCH v2 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: <20250613-borrow_impls-v2-2-6120e1958199@nvidia.com> References: <20250613-borrow_impls-v2-0-6120e1958199@nvidia.com> In-Reply-To: <20250613-borrow_impls-v2-0-6120e1958199@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: TYCP301CA0028.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:381::11) 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_|PH7PR12MB7892:EE_ X-MS-Office365-Filtering-Correlation-Id: 91345ced-bfb3-41ca-d00d-08ddaa80b234 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|7416014|10070799003|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?bzZMVkdTT1VXSmhJbFZ2d2o1UFI0Y29NSGl5RldvTlc3QjRVQ0ZRSkhzNFJC?= =?utf-8?B?K3Q5N09wM1NXTm1VN1dYaEFEVTBMZlpMVUZxVEVwb0FGbEN1T090MHBmRGN5?= =?utf-8?B?MUFyeU9yQlJTQzQzODA0UUhjbjdNaytTRlJhb1p3eDF2RVVKd0E3eVJqdndi?= =?utf-8?B?VWRMSFFiWm16RkNCdzkwZnJtR1NGMGtJbk9rM3QycTNVcklKdS9saHhORWNB?= =?utf-8?B?bU5wWnZZeFI5US9JQjBQcFJpelAzbWh6eFdGeUJhekpJUy9MbkNYdXVLek9T?= =?utf-8?B?cm1hNk5mY0xlcGZIeW9vVDJqSWtyTy8xTVJIYkc4UjBKVzdVT09rZnBaL0JE?= =?utf-8?B?d3BsQmRnbGdmQlhSV2VhWmpDVEpBcmdmUTFsS2xRYVZXUU9TbiszMy92M2Yv?= =?utf-8?B?SlMvYllTaVU1eXhWSXA4ZEY3M0JuUWhlUFozbllUQmsyTXBZNUl1NUtWVFl4?= =?utf-8?B?SlQ0UVVyRzNUcmRLakx3MnRiT0FkcHB5elNGWVJPdEhUWS9nWkkyc2JGVjJB?= =?utf-8?B?Ty81a3dtU0VlT3lvUE9OODhVRlp0NTJPSW5jVlc3bjZORGFVU0dLNk82K2s0?= =?utf-8?B?MG94Y2tVYkg1NmhyTS9RUTJBR2V5NE1hZDlrQk42bHdCQm9UTXNzZEt0amVE?= =?utf-8?B?TmJPUEs5UERUY1IyTmt5RTlzNm1iSzU4SjdJNUlzS0QvUEJaQUhrQUYxeUxQ?= =?utf-8?B?VFgrZ2dVODVTbVNEQ0dZWVlCa1J0YkZ6TFg3Z21zMHIxcWhBTFVUeThKamNs?= =?utf-8?B?OXAvTDVyU1VIUUYyTGhlVjdSQzEwOHljTFBpcHA5eGNCbXd6VVUrMFRubG9X?= =?utf-8?B?czlBZFhSVkpaNTlmbWNwZk9xSTNzczRrZ1VkZ3ZUeHhBV1ZRS1E4TTZYdEFR?= =?utf-8?B?aEg2cTVicm1vQnZBa1EvY2RaUTJwT0NlWDJOUFpLbDFCelVZUHlHNGtxOTB6?= =?utf-8?B?eWkvdzY5b1BBdlNZWG1MYWZwM2ZpOGdYS2tZNkM1N05adEphOEdYeFlqb2E3?= =?utf-8?B?ZW1TeHEzQzRvVXVLRmoySHRaVGtyRVNRVUpPR1BlNXV1WWNOclRhcXk5bU95?= =?utf-8?B?azJoN0UraGhJVXdnbXg2RXpGT0F5ekRhSjV4ZFp0eFpFRVJQRzJxd3NmZUo2?= =?utf-8?B?SFFSU1ZRbEpVejd4aDFUeHhVQWhQNEViaW1wRDBHYWdiQXBzYjB6alU3aDhC?= =?utf-8?B?cjZoV1hWdXpEZTVjTVJ4U3Z3Z2lQUWtZK25oS0F5WTg0M1dLajUxOHBUVzk2?= =?utf-8?B?V2tjdkw5VWgwMStHeWIwdzNlenJyTWhVNXVVN1Vlb2Q0aythNDJlcnlMa0Nk?= =?utf-8?B?T2pYWUpzb3lIa2UyQmhZSkU3dUJ6eDdHMjdBS0t6OTRVdlRXY3l4ZnRkeUI5?= =?utf-8?B?bDZHMEw0Ynlqdnp3eVBZcEgzUlF2M1FKd3V5NmRjeXYybG0rbmVZMUlFeFAr?= =?utf-8?B?N2RzOTdFeUtCOUpCeE5HOUZRV3lRUDhRZDE2WjZnUXVaRWVUQ0QyZlN2ZFcx?= =?utf-8?B?d2FxU0FkUTRRcjM0b2tHNTNPM2lDYVlkOHc1N1BjdG9yMHdmaGROV2JCRUJh?= =?utf-8?B?WnZBbm9JQkV6UTEzaTNSWGVQM3M2S3haS0ozNjBzT3pDdGlHTTBXdTNnZzBk?= =?utf-8?B?TisxYm9WTmEvbTJITFJaOEd2d3o4NnBLN0FxMmtnRlU4YjMvUmc0VVNoQ0gx?= =?utf-8?B?SWFDdkl1VG1aeWVteGVKL3VCeXFqVDdiVnRJSi9FL0RUQTFHWEQyRnpSVzMz?= =?utf-8?B?WFFxV0dvcmk3ZExTcXJmSHlOV283RStpZG1wRk0vL045OFBrdFB5a214NHRE?= =?utf-8?B?Q3FFVkdTcDFWT1oza3ZwMmV5SjU4eElTa1dIbDZEMFpsRWZ3MlczSzJIbkxs?= =?utf-8?B?Zi9PVVVhY2w4a3J0MlNneDZsdm9CbDFXMGdFbGhUUk82L3MrQlcwUGRvbEVs?= =?utf-8?B?bkVSZWdmaDg4ZVQ2aWNhQUNYSXRLVTZpT3RUdDQraUREQklzVE1aOGJxTWU5?= =?utf-8?B?cnhkNWlmUlZBPT0=?= 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)(366016)(376014)(7416014)(10070799003)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S1dRVG5Odk80S1pmNldhM0s4bzA1ai9IOG9xK2RSSWNXb1ZnbzlhUnJsZVhx?= =?utf-8?B?Zi95R3hqSjUxZWg1QVRkRXp4UUc0cEFSYXk4d2I5ZGRLQmZDYVkzcmxDWmxi?= =?utf-8?B?TnB5UldtUHdqaTRXc0VXNW8wK2s0cXFjYXdVUzVWQVo0OGpZQWViMTN4N1dL?= =?utf-8?B?ZXphc1BTMUFsT2hkVldxZ25TNER2NWhBZGxlRmFoMFNGL2tFOVY4WkNManFn?= =?utf-8?B?UUNNdjdFQjN2MENLb2FTRGd5WEVWaVNtdWpubHdncEExaERqQzE0aDZNdE9r?= =?utf-8?B?V3BmNDFQdEl0d2loYmlCTE4yaHhkMTJsTVFwNU44bFNMV25tSHJmWnBveWtG?= =?utf-8?B?aktuMDdCemQ4bE5PUm1FVjlPeVNJRzB0dk5WRWwxb09EOFJ4T3AxVTU5VWZD?= =?utf-8?B?VlVlMFNyWDFYQmkrV0dsMFlwY1pJUjNIMGdjajNQR29DUE1QS3FYdHhlSmNT?= =?utf-8?B?bnpxQlptMjJoWnYyblZFeUY5MzFvcFBBb1ZzZHRyNHRaS3BQN25FU0h4SlBr?= =?utf-8?B?a255SXZhMWJ0M2JNSkkxUmJMVjN6ak1CQzN2Znp3NHFabDMvU1MvZWMvS3N6?= =?utf-8?B?b1JkMmRKRDZkRTUrTGt2cXNKWWx3dC9JbTN6VTRCWVNHcVFxUERicnRmelBG?= =?utf-8?B?Z1dMWjVmYUtnNG1qejhzZGFtdlgxYkJxclNzQlBSSk5UUWI1cGErR0oxR050?= =?utf-8?B?ZFRSMU5OS1FWR0NjeWtWNmhnekxidDZ3dEx1ZVNqUk16Z1NNZ2Nwb2p3MERJ?= =?utf-8?B?QWZibVRRcHMyTlVCSFh1R042SUJHY2xCZW5Ra0ZRMGt3L0UwaU5FbGQ5b2hS?= =?utf-8?B?bzNWaW16c3pDS1RKQTNGQTloaUlhTlN3SmI1MW9UVjlzT0R3dlhkbnBHUWtT?= =?utf-8?B?a2c3bkl2NW0rdkh0SnhqNHBiV1VYNnB2cnZqYW9tWk81cmlhOUlaZU1BUjV4?= =?utf-8?B?YmhrVkR4aE1ZM0xSeHlxRTN4VXRZTFBhd2MyV0FscnBLL3FSQkF3QXg4aHpU?= =?utf-8?B?RVQyVmZLeXpVSXNiV0ZhSGpkN0szemRTenI5Q3NVejAvT2YydHdZWk82aFhD?= =?utf-8?B?dWZsNnB2YWlZdk43VkU4R2xpNEM5dGROUm16VGZyZlBsS0hCWlZ0Sndmd3N6?= =?utf-8?B?enpITzhmcVhCbEJabTBZNlZ2ZXkxdmZnSkR4bzJZMVUxRHZvRm5oZ3pZZUpY?= =?utf-8?B?bVRyQWhVcG1hdTh5Sml2aVg1ZEpmb3J0VGVmNmQzS29ncDVIUEYvT0xwQ2hC?= =?utf-8?B?WG8vR2xpR0NkL3VKU0Z6QXE1b1lRWDdsc2FrdmR6RlJBUFBDeFF5N25hK0g0?= =?utf-8?B?R3IrRkVOS2RnMlgzQWlQMlVCZHJQY1NlRUVmc2xjdkxENEFvYlU0eXFwR1pP?= =?utf-8?B?QXIyRGthZktHK3pIN05QOGFIa0tNeDhzb0ozY1o1Yk4vci9IL1Z6MWU1ejd6?= =?utf-8?B?MzFDZy9vRFVqL2h0TmhCRHVOUVM2WFFYeGt6Z0dVTVArd2c1Y1VOdzFkL1Aw?= =?utf-8?B?Qm95K2FRT1Z2ZTJ1cHBERU9BQUN3WTVZWERNMlRlRzNMQ1FlcG5YTnhmMi9j?= =?utf-8?B?SnZUTFM0MEZpUDRicWtKeWhLR0ZONjNYWC9XbEw2WU40Zmt4UXlkZlMwL3Jo?= =?utf-8?B?cEZyTTQ3ZC9PdUtQMkhyMnFSejI5MEhsWXcxTHFTS2hkczRnOUxEbTAvblQ4?= =?utf-8?B?d2xLU3NjU2FHdUJRQmZUOE5FZkV4S0lLRVR3d0xZNkc4YXpadXBlOHFrTWxW?= =?utf-8?B?TGZLaU5GTzBGWjkwVG4xSkNQTTVIYUFDQlkrNFVQUWFwdUlaMkRjd2NDV25m?= =?utf-8?B?a3dqZk5DWTFtbXN5ZFNSdnQ0eU5Nck5lM2FEV1oyLzc4RWg0YTBabk4yY1ht?= =?utf-8?B?bEpYZ3liclJQWDJhVHlHc3NZUjJUSERqWktucmYwc0ZKN0JzMjd2TERJdkZE?= =?utf-8?B?YTEyZ1c0UmlINnBaenJ6UFYrdEdKMlJSdjNlN01qRno5akUvcmxicWYraGh0?= =?utf-8?B?elBMVVczWW0zVUdQeGZiT3YwWnBsTE83MlpHclI3WmREWmhEMFdEOXFZTzNv?= =?utf-8?B?d1ZvUHVhcFhBaEFiR0djanZZVFRtUWFyRmlONjcyTVFvN2RqdFRrbk9qeFM0?= =?utf-8?B?ZnAxVGN6eFRTRm96b01CRENhK1c3QnNIQVNmbkR1cHM4MDk5b3prRUJrL2dJ?= =?utf-8?Q?+z7iHY3sPztgMRrTGZWI6uGchOWqGxuJnqPLucakpMcG?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 91345ced-bfb3-41ca-d00d-08ddaa80b234 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2025 13:46:27.9937 (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: /zxHaZtDDx6Aw68yK8QxSzaP6zgsJNYwnNJgLm37xyU4Z4gMIEkjhW9zJzENB9Xys89EnEhEcDDG1Us/NoGOeg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7892 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 Signed-off-by: Alexandre Courbot Reviewed-by: Benno Lossin --- rust/kernel/sync/arc.rs | 84 +++++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs index c7af0aa48a0a049bfeeba3a81080355f4d381738..c7832e18b6f129ea00f57fb8e38= da68ebc209626 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,33 @@ fn as_ref(&self) -> &T { } } =20 +/// Allows `Arc` to be used as a `Borrow`. +/// +/// # 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 +862,60 @@ fn deref_mut(&mut self) -> &mut Self::Target { } } =20 +/// Allows `UniqueArc` to be used as a `Borrow`. +/// +/// # 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() + } +} + +/// Allows `UniqueArc` to be used as a `BorrowMut`. +/// +/// # 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 13:38:09 2025 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2058.outbound.protection.outlook.com [40.107.220.58]) (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 020FD2D5C79; Fri, 13 Jun 2025 13:46:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.220.58 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749822395; cv=fail; b=aP2g13YlBw2/2Zx/7DY3XWVvTASJde04tAqGm4rbb768MP0nOd6rCO2f4rq3seJHpxcbERCoNd5Ak/Cuwp15sKH+JJKAqedtW9+w8nwHdEvLNS7JtlI+O5cLNLZ6P18WGVXTQ13NFdbHmujv+W3PDLL+5wP3Na8LyfzWM4cJ59c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749822395; c=relaxed/simple; bh=kr1y0SYHNZGMDzE+p3pP7zUxKLUCBH4I18+/ahL93gA=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=FwI1MAQ/pdOQcQDpPlZPBXg2gYupyv++mJmx8zd+bAcaBaVLZF2VUrBkapzG2pAbxC9AXjk4h9FQWZ8KDuKsS7k4V55XFUPffuRMtmuU1HsD6iDqDHE6YkBQJY+/NDhrQEGQ2OsUwUJ3gIrmlD3aJC58pzMQNYqVSpasf73UOU0= 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=LGSt2vAJ; arc=fail smtp.client-ip=40.107.220.58 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="LGSt2vAJ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=etxv1PtnmVpJ5jbVXD9VOJVMfnwXnUHVTeHocplqMvOMUtp6+bZjlrGWXtnCjBHMys21xyFW3EAlcD4hw9TzcgtWoKHemHVUeW+vDxmH0/oD29GsX827FeF3Brhk+gtOt3/T4oG/fJTd+397if6tlPsI6AdccgMxpU3PRzucMFH+8xCvDbOBHaTNpEaT6w8eT78HxC1GaLmsIDgiy1az0oI3Dzxie0iKNmsNWrJDcQEXAix0sq15zsD5nKyaWAE5MebQ7CHDeyGQvZOKIUx/Ccb3Xb2SHzP61ljEOJ9dCvzWMI23LRB3NkFyul5XqdqW39egwj/WPbZzb8Uzg65N1A== 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=3FV0y9OBHkVsRVwylRzoB9AXVwlJbrCOWJ+BfI0MNMc=; b=syCJW/rP98PXSHEldlmvLbHOwPFRiKm0Dz+FaPuW0Qz6qC4VIQBgxC0LVpAa6cauwfZS7NYVCp1e4Od8pkaviPgaUiw9JQZ+L13MgVdj9f5UbFeZUjP2AFe4m7SXZOq1orPDbggX9CfLNnD4T545zVmP/ghbvmsSAjxcaWTLfXt4MJk5mSzBsGru1Ex2z2yMCCx7uV99NUvMVe+CtHQKYwipnLGBgO6oT3yo0uGOwSQSMzRzmpTO5SNdt3O/VHKVVY+CqNwjooe3Ff1tNg2EKWmkGcdzLnEPbN15JAKdwlz21HgegpK57tOAMUOJ4JXXwOeKnh5EsTSCaDcTpWAm/A== 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=3FV0y9OBHkVsRVwylRzoB9AXVwlJbrCOWJ+BfI0MNMc=; b=LGSt2vAJlm9iqiBgs6hAkiQ26eokqubcsm9hGsxIW0EdBAfKEvK9d4ii7C+bIneDqEc9BxsILJQjCZ+H1K9QSkR0ShJrJNuOjtiKtMLoSiDICkUpsocg1VCgpK1Q9dW6lnQJfDTyA1SWBHO7wYPGLXzz/FhCfODKsXAmxHCkrKQQNmwHhyIbdZh5X9W4sakuIEVvkJz+7BMhoZS486IGZtKDFaEo46PFtMSefYLHE+smyz0U7V8ib+UhKhuPQMzgPHbqi4dA6VWkNYTV0BoiRzO/IZ8pitVM+mOsbGibjPfboozx5zxcjMjwrgfIUyko4e5WtisoNwu6Biyh6hciBw== 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 PH7PR12MB7892.namprd12.prod.outlook.com (2603:10b6:510:27e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8792.37; Fri, 13 Jun 2025 13:46: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.018; Fri, 13 Jun 2025 13:46:31 +0000 From: Alexandre Courbot Date: Fri, 13 Jun 2025 22:46:10 +0900 Subject: [PATCH v2 3/4] rust: alloc: implement `Borrow` and `BorrowMut` for `KBox` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250613-borrow_impls-v2-3-6120e1958199@nvidia.com> References: <20250613-borrow_impls-v2-0-6120e1958199@nvidia.com> In-Reply-To: <20250613-borrow_impls-v2-0-6120e1958199@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: TYCP301CA0001.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:386::19) 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_|PH7PR12MB7892:EE_ X-MS-Office365-Filtering-Correlation-Id: ed834c26-34fe-4d7b-811d-08ddaa80b437 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|7416014|10070799003|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?MFhwNlJLb1dXWFkvOVdSZkhZVXhBSWhuL3FQOWdWd0VLZTFEcUVVU1lZRTk4?= =?utf-8?B?L0ZvU0M0Z0dpOENlUmwwVmdFMHg4SDBoRG9kMlYxd2ozdjlkWjFyTnhIck1T?= =?utf-8?B?RmoyelM2c1d3WEZPTXo1MEVqL1JaMjh4UDhNOUNvSDlQcDNpLy9Kc2hUUHpj?= =?utf-8?B?MGppanhVZjRqZFBMOUVpVGVjMUhSL3lmSnAzSkh1OXUwdjMxTXZURmU0UXRO?= =?utf-8?B?eUJTMm0rSVRqWTBxUXg0dUtXemNtR1ZUWWdUMDMrNHZFdEJmT1FQUTdreHVl?= =?utf-8?B?WGJENSsvRmlQNzNqZjE4bU02MG5Dem9RT1dRbnRMSHQxSHoySHg4K0UzZ1FZ?= =?utf-8?B?RkN3V05rTGIvUWRvcTR6Y2grS1NuMzZLQUM5TzRnb0xlNkZkRGJybDdIdGV1?= =?utf-8?B?SkowMkVsbXFZNytKaXNDak41S0ljMkExVDFYc0dKUElZZ2xMYSt6bEpRK2Ja?= =?utf-8?B?d3M0bHQ2YnBrR201b3hURi9BSUlVbHU2YmJOSUgrV3J4SjNzWmU2QWdMM1dR?= =?utf-8?B?b2I1MW9PMDJ4WDA4K2pwbllLenA4aWVNZ1ExMVlqd0NFTi9meXNqUW1Wd29K?= =?utf-8?B?VkttMldsVy95SXZCRUZJRkxZc3RUTUtMUEFZbDNETlpwT0ZNdTZvanh2YmVu?= =?utf-8?B?Skd2c3ZwSkJjRjFkbWQ4NytPUFFIdnY2TXVIOHJjR0dkdC9OTXV4cE9UcWZM?= =?utf-8?B?ckErUk5wQS9GaTIvZXIwdEZYR3Z6aWpLSnhRUWwzK2FnQVdyZUF5aUdpdHlM?= =?utf-8?B?RGRucjRpNFFEdUpFWUFFR055QzhFbWZnSVlEVEtaekRYYUs5Y2tmUkNreVdP?= =?utf-8?B?RTN6bU1DTVdwa1BsSXlOV3BUOFY5STFxYTNZSFF6UVNUL2NEQVNiT2NrSEky?= =?utf-8?B?U3dsM3o3a05NRnJpaE5aWDJZMUpxWkVSTUpPZU1vaWFwQ2Q3WkJVZFBZRjcx?= =?utf-8?B?cGpocjMzTjhPQ0V3aVBpU0VCcERxNG1iWFlza3czKzQxdjB6b3lCa0RUbXdO?= =?utf-8?B?VHB4Sk53a01SZHlwTHdJOHpTVVJQZWUvdE9pRkJGYW1FclNPaStDa09nd3RP?= =?utf-8?B?T1hMbWxVTEdBS2F0V25hc0luNkZwNVRwTmNtQ3lvRGVsWDRYUmZibGNGQ3Bl?= =?utf-8?B?ZmdoZGxqcWhMcUwwbHYyUjJNNUthN1ZvQjdSNlFwVFVJekVSWHhlU2tPajRs?= =?utf-8?B?TW5weHIwamNWay8zOFV3WnNkVmxGZ25SbXd0eHRjNXJBY3RFdlVQTmVySmpN?= =?utf-8?B?bzNyaFNKcWF3dmNRb3pEazk1WDc5blFxci9kaDV2K3Q3TVB2UGZLRkNydzN1?= =?utf-8?B?bkxoc0pNbnliSlpYYUk4YnhkYjllbWNBS2F1NWRlZGdUTkw1MDhTazloWllP?= =?utf-8?B?a0V3WFU5V0c5NENWaGR1RWQ3dWNBUDBlNHU2cDQyVW5LMFZ5QTVlTkMxM2NX?= =?utf-8?B?aUx5eEhDaHRsUGZjRldOREVZVzJ5RVVDMld1MHQ2ZmgwdmlkZkU5a0xGWm9q?= =?utf-8?B?WHF0anRqUmY3RzQyMTVuQjhMS3VKVEhSY1B1SVBFdXdrWXBhaXV2Rm55MTJK?= =?utf-8?B?ZTFBcE9hZzBXd3BKRExnTFp3MGNtSEtKVHcwYUgzTklMeE5QSEQ2bXdNR052?= =?utf-8?B?eWd3QWMreHJKT1N4SE9xbE8zenBIUWJXbVVJWDVTeFhYWEsveGZ3K1R0aDJ6?= =?utf-8?B?RGlueXhoSE9EcHFrV3JnUG5lb1FRUi9IdkpFNmxqVXJTVnB4azV4M1N0TUkx?= =?utf-8?B?T1R2MlV2OHljeXhWcFFBVnRlQkp2RjlvNzBCQjBNdjhyczFQZW1VZ2JWTWhn?= =?utf-8?B?YW5UWWdOT0VGdzhlQWNBMEJlTlZYNEE3b1BMbWFoSG9Yd1owazNqVEZZZVho?= =?utf-8?B?UHFINE5hcTEwdklEemVoMCtUckxPSHFBbEpJeFJmcGhFcnl5Z1VIMlhieFhF?= =?utf-8?B?WHVQZDJEUDlzT0toaGF0M3h6eXQyRkNaazhoRXAwa09PVy95L2c2VTZVMElP?= =?utf-8?B?WDZxcmRqSEhBPT0=?= 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)(366016)(376014)(7416014)(10070799003)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dTU4STM2aElXZ3J6ZVBzYm9YbjIyempNRURlRENrdk1YOUMwaE1TbUI1cDhm?= =?utf-8?B?UmlmWmpIcVRKRlo3a3RWRWFtZkV1WnRhcUcwWDVWSytTbm92UENUQzZEbGVa?= =?utf-8?B?a3hzczI2N3lFU3VtcjhKcy9lMjFxWFRFR0N3VkZMNm5Rd3VBblZBV2YzUDNK?= =?utf-8?B?YWN0QVlvNmpBbm5XTE0wUU9mdHArSnBhbmhpNis0WFhkSE1GekFVR3VFZysr?= =?utf-8?B?VUNVUUN0dytpQk1qZzBBbWlPWEhJNzBUbjI4cDNxVVR2a0NQSDhxTnVnUEtl?= =?utf-8?B?MTV3bjdSOG5iRTNPNCtBbk95c1Z4MHZCMTI3ekJEWTZFaXMreE1kUDd6YWlS?= =?utf-8?B?c3BrVFNIalVhbW5wKzRHTzR4QW1Ic1RLdEpkZ08xckdpWmxuQ0ZDWjFYQWls?= =?utf-8?B?ZTU5a3dBcHVFNWtlZGlGSit4MnhMS1VQVG1ZQ1c3dXM3c2NtYkRtQ1g4YUtt?= =?utf-8?B?L0NpTGRjOFlYbEVTWUI5MVFQZFZjNDNjZ0dCZGxHaFlFelI5YnhTTWhQSEx6?= =?utf-8?B?OXRzTUhiQlhQdlhuZ1kxMk5OTEdmU1BjVTdGdFJtNFowZmNOKzkza3JxSDlo?= =?utf-8?B?cmo4dmFPMjlWZVhBVXc5SFQrZDBqWU5lN3FJMExJMUxqcXpncmhmUmlDc2FU?= =?utf-8?B?WWdzaG1iWlh4SWQ2dTF2ZUhscUswNXlqLzUyeCs0K1JQZGpJRDNGSC9zNnZU?= =?utf-8?B?YnlycnRMNnBCbmNqeG9mV1BPbzN1Y0o5clVuSUtuWmdjNG1tTjZmSlhaVExD?= =?utf-8?B?ekE5bVIxWklaeDdsV254QXV3dlNvZVVhNUplMjhiQmxKVnppT0lOWGY4T3o1?= =?utf-8?B?a3J3TS9oaUpBVWtJNzc2bWhMZG9MSHAwZ1k1T0hDOTRSQU4wa2F6ZWRNMmNR?= =?utf-8?B?dFNQVzZQUmVnVGo4NDlRWndoL3pzWk1WSmR2Q3hDeEtESWNRbHV2M3JHenR2?= =?utf-8?B?Sm1kY2RsZjJIUE00MW5TRHZJS3dMZ0FTK3YvdmRVc0R1MmU5dThIMHhwa2lk?= =?utf-8?B?K2RMeTdlSjlnMU9YNE50OXorVlUzNUdRNmpBWDVTNGNyb3dXdHJyY2M5Nk1r?= =?utf-8?B?V2xXRCtaQUk3UGs1UGxMWGZYdkIydllTRTMrVzRpeUFwVnRWNlNZaW5ZK240?= =?utf-8?B?dnZ0bzlJNlZGZlhHTmJlTUdKeUpJb3hWM2xMOUtlbU8wamFMWDNlUDNOSExt?= =?utf-8?B?RnZTVWVGd2k5aWpqVlhlbGYya1VUYkVpREc4S1lxRmtSOE1nSk1wb2ZPdTBH?= =?utf-8?B?bDRhZ1VIZklEQUdjaWZnQmoyc3RMZENHQWVOckZuK1V0MFBFVWNRYUFmcmNp?= =?utf-8?B?K05TZjl6TksrazhJd2JMWjk2ZnZDanAzMnBoWGUxczgyamVOV3FicXhmQ2VW?= =?utf-8?B?M1dad0FJSlJ3ZXlVaytKczYvWS94emVadzI3azZnT0ZjcllHcWNCNjVnMkFw?= =?utf-8?B?R0lKajA2RExvOG5Memh2Qkx2YkM5RlQrR25hSnRJRUdhaSs0dnNicE1RU29B?= =?utf-8?B?ZWNvdGxjTGYyc25nc1NaVEFRbTdFekxISWJaMFFiSW9DeFVVRmk5b01HQWhY?= =?utf-8?B?UzJWc3dBN3psMU5CVldQVWJsd3Q1OEN6RG1ydkFEcVdnMFdTeFpaWCs2Wjgv?= =?utf-8?B?dGMwbXBWUWNGcXlrOW9iOUJGOEpDYVNzS1ZyUDZGMWVpTUdMOVEydlFIZXQ3?= =?utf-8?B?WVZLMFMwcS9YWTd6dHhIaVozbWpRMFFYWld3UDBxS3NUdVVFLzhESDY5V0lm?= =?utf-8?B?VFZaWjJvNnprT3pwU1hOU1Y4ZnBWOGdncUh5ejNEYkhaQStVOGxEYUxPLzJx?= =?utf-8?B?U0VvQStoallLR0wrdXJ6RGJwd3RWZXQ1TmRxaUN3MVdDV0NPNFJudUFjSmln?= =?utf-8?B?MzF2RUFWcnlwMlkwUVhGY0Fja0dIeU9rTnZjdVZjcGRaM280TWtqRlJCazRX?= =?utf-8?B?ekw2ZG1Ub0lzN0lMYjJGRUFGTy8yVS9vSVBhSjhsYklmT3hWWnBnY3hRSWp0?= =?utf-8?B?NEpsSTRONjMxZGNWVzAwSGlNWFp3dFg1V2EvOGRxNVNJWTMzaUZRMmY1RTNi?= =?utf-8?B?YzViUzEvaW9MbWNTclI0RnYrU2x2VnZDb1A5aXY5ejRCWHlkK3k4NFVTbzAv?= =?utf-8?B?Tjg1WmtGbW5SOTdQMzZsMjlxdTRQUFo4U2JybW9wVk05bjArcnFlVTc2MGFi?= =?utf-8?Q?m0mAxfEbn4R2yZmt0n7CQukvAodqoRnVJVNmIvKkqkRZ?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ed834c26-34fe-4d7b-811d-08ddaa80b437 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2025 13:46:31.5048 (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: i+qnTos91VMsPpZvnYWEXZbD0QszAjVp+dQdB/zv77uSaYKN6vM7g+GI2bQLhC03SAS2Da4UHWGq/D5+fUS0OA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7892 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 Signed-off-by: Alexandre Courbot Reviewed-by: Benno Lossin --- rust/kernel/alloc/kbox.rs | 61 +++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 61 insertions(+) diff --git a/rust/kernel/alloc/kbox.rs b/rust/kernel/alloc/kbox.rs index c386ff771d506a2eb4c211a93ea9b59bc04c93f5..0e3cbe809a878766ee8f8508ed0= d30b4f8afaa07 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,66 @@ fn deref_mut(&mut self) -> &mut T { } } =20 +/// Allows `Box` to be used as a `Borrow`. +/// +/// # 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() + } +} + +/// Allows `Box` to be used as a `BorrowMut`. +/// +/// # 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 13:38:09 2025 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2046.outbound.protection.outlook.com [40.107.220.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 0A5EE2E175E; Fri, 13 Jun 2025 13:46:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.220.46 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749822398; cv=fail; b=semc27HImrPFa+2k9O0D5wHnPKVUKsrbP71TQIYH3PW498Gb+Nnv0HfW+vlWZi287QBnYCITyDZST1m3L1sUEPf6zD1Y8OvU6RMtbZs4tZBUfbL8OP9mS6vGjSzKrlSotT0QxhFOGbEcj0sQZsembqTJ9eVxftNfv0W1Opb5zgc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1749822398; c=relaxed/simple; bh=IFOVqbZqx1Liyq2cGquxjdFBS/kKk0SBhpTa78+5qiU=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=GQCZ8qdoGKdJ4hMOUnRxbW9ndSOe0SN+rILv6q9RPJtlnZ0CsC2WNMHN/AJV4spZ4TmoCS9QFtO4ARAhzQC+fexDBo6/85p/bUg0Pyi2COaeF7dcfrhxxbP9HUK1JRnbgRnVlS9/g2Mbcvf90+UqZSHfwcRp6nkmqF1Bax+pEVo= 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=SyqH6hMO; arc=fail smtp.client-ip=40.107.220.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="SyqH6hMO" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lSFaF4eNOk+MG+MU+bWacX1IPT9TVLYmzetpzLxK97KGeCZSNnxO6jypWXsD4bGnM3OVqTIlTGpF6/zALvVhynSHr78Ewgyrg2AALDk2jL5oUR7yUCSrAi4hSMKUfeGulmbexUpq6Wgi76vyXyAgeWgsJ869ATfC8X5L1KUXH7h1SDC846GACbdeXQahw9yoTTLAjhMaIciAq0qWU2QQbG8agTbHJNmiE1WdRtekENO1qLLdjKV/NIgQhmaVduDrHyDfBYf7B6i6d1L+uaq7cWDD4XuVbtD78UYRz137ryQ9q3TZBGS77wEKehjNpwjlz4NH+/80W7URxKDlkXcA9g== 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=5TXV/oZN0SxMvxZ2RU9oABKctRjCgv3D5TAjHcZs7dM=; b=ywa9R4XCwAQ4I17XXj7/vm2Prj6kjT1z6XHXIie37TAoumDF5lsZuJ+zIdFSWWKZDJW2dTDEqRStou0m1X3NEmz6gmuooWfDcNEBY6pHM2zAvrydDYWyZy9k+QMCtQW5dS+IC07TSajp5FP8zmFJwL9bANp0NGWEi0qxWm0VFvhJhcXs7pH3Lq3MYLYE1qFLhfQSFgA0K9G385xjiahXfV2lf1BDxN78l6nZz2phLHFaORD4UjHar4zIEnqEWh+0K97W0hvAQ59JNJm9WCtuklCiv+P+TTIfr6kecz1y/4PX6c6FSXBFRsEtnIk56uxk9yr+jNcYW6b0MDDNHykA5Q== 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=5TXV/oZN0SxMvxZ2RU9oABKctRjCgv3D5TAjHcZs7dM=; b=SyqH6hMOKvKQ7fjdFbaMSlTPRKw/nPQ5C1pIaEtKci1LcT+5po/w/frD2tvGFspwELNM9cb5mX9DNNTx+5c2n54Pq70Gx/6mfWLT0po9mfnaD/Df3KjxFLR/WpjU5WZ3G7VjnFLo3fHErjaGHmqNxowX7J+lda+O8a0LqL9uIGBnKS/h3K1HwTlZemeMXipCAFUroJEWuUCIkkYO8NnOPVlsD2xku449lollo76rjC4PZotPXKH5oY3lvkN1GBRo/KAuZOxpVHNk0IQFP35aiqHpe3D9EzCx72BvlTOyS7SokVC9X4mFwcCky94PftWXv+h9fBSsxNqHjZ/9Sb59rw== 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 PH7PR12MB7892.namprd12.prod.outlook.com (2603:10b6:510:27e::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8792.37; Fri, 13 Jun 2025 13:46: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.018; Fri, 13 Jun 2025 13:46:34 +0000 From: Alexandre Courbot Date: Fri, 13 Jun 2025 22:46:11 +0900 Subject: [PATCH v2 4/4] rust: str: implement `Borrow` and `BorrowMut` for `CString` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250613-borrow_impls-v2-4-6120e1958199@nvidia.com> References: <20250613-borrow_impls-v2-0-6120e1958199@nvidia.com> In-Reply-To: <20250613-borrow_impls-v2-0-6120e1958199@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: TYCP286CA0216.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c5::12) 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_|PH7PR12MB7892:EE_ X-MS-Office365-Filtering-Correlation-Id: 1e0e5295-0afa-4d4f-9929-08ddaa80b64d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|7416014|10070799003|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Rk85T0o0aUhUelZSQ1RqNU1XUjB5TVhZem8yMTJPeis3dzZUa01DZ0ZvTDRj?= =?utf-8?B?ZGJuaThha3RpeCs2RjhuRDZVVzVwVFo2bVd4MWtldithaWJCZE1DOW1IRWtw?= =?utf-8?B?eHR1NWs1cnpnTkNJNTJUTlVUNElhanNvWElMNE80V0U3RVhPSUxaTmtFOHFM?= =?utf-8?B?djhocHpsQVlZVG5hb0ZOaTRQeDQ0OG5Ra1dHMFlTSEt2UmlmaHdUWFEyRTR5?= =?utf-8?B?d0l5Q0pWQ3lESkFVSnRNSGNiNytCbG1KNWlyUGpYYTZOK2RLOFRXVjkvN0Zy?= =?utf-8?B?UDY0TEJQWWwrUTJmU3FkaWZWNGZ4RnBScGVWdmFscCs0TUo2dktERHYwQlhz?= =?utf-8?B?U3c1ZnJqZytURTczTnFoV3BCeFBvRk5URS9wUk9JVklYTWpBOWJnWW0xK0pp?= =?utf-8?B?V3BieEVMOU1FbklXNXczemFDczJiczlOTFU0MzkrRW51bDZoRnI4WW1vdEJU?= =?utf-8?B?d2dBN1p1dExjMkd0NUNQSGJSTzFYQnE5djJxTFZ3ZDBXcDkvdjlZODkvWHRC?= =?utf-8?B?ejdWTGhVRkZlbStHWnlyTlNWd0pMZjJOci9QMGFEOGFFd1dsVGkzZTVzTnBP?= =?utf-8?B?enhVc1dlcHFWdy9hbnRTSEtYNm90VG1NNmdLRVU0cko2OWY2R1ZueDZDTitt?= =?utf-8?B?OS9HNUg1ZzVCZk1UZUtBTkh1dW9SYytZRnMxRnpqakl2cWRxaG5WM1JodHN6?= =?utf-8?B?SHdwQmlDa1VCVlRpMTRqbzN6OS80UEVjMGZCS1JuMDhJODFIb1Vqam1Gck5H?= =?utf-8?B?OUFvcTJCSThXbC9CM0tlOXBxQnYrNFFUU3BFUzY3SUtZNWE0NDdtc2dxcC9q?= =?utf-8?B?cFdYOWVMMURvZnNSN1NGUTBsQ0ZtdWp2NFdFRFFvSjRTcGpBT3pVcHYzYmJZ?= =?utf-8?B?WHhXdXM2VzJRY0Nmd2w2blNnbnd4M3NkWURYczFYdEVIbll6M2FVTHZmejRm?= =?utf-8?B?TlB1M252amZTVHc5UGpWUFBFdzRxVVZsdVA2QmdHaVVERHJSMk9UWXd3cUVi?= =?utf-8?B?REpUTjVtMExOdU5ybjNmWlhHSzlDNnRrcmtnM3JVeTA4TGlGNCtCa285cE5a?= =?utf-8?B?TWwzUjluUkc2NmUrVDd4VzRJVGxJaCs1dStXRVovcFJXNW9IS0U3YklhemNs?= =?utf-8?B?RS9keitQZmNEMjJDQzQ1c2FidzN0RmZQa1hkVXZVcUM0Ny9qL1NQK3JtdWhz?= =?utf-8?B?eHlHVmtFWTdVUi9FL0hUdWNBZWFIWnlLMC9CQzB4WVJYY2tkUWlQV1JKL0d1?= =?utf-8?B?M2NMa2lCYmpzVmhNNXFZTkZRTFRlVnhZWklFSEZlK3hnVTNubE11ZkpUMXov?= =?utf-8?B?dFAyQ0I1eXdYaVR4VzdMUDNCRk5Ocld4T0NHQVlXRFpXWWpJUTIydGwxWlR3?= =?utf-8?B?WUhBWVhqZ2tObURESlBvaVd0UTdVZ3RUazN5QVFOdnRuc0thckRubUVlQmd1?= =?utf-8?B?Qmo4RlYrUFV5UEc5RXVyNmsvSktOcHhwUnc2U1pXRFRock5wVkVwM2gyYTN2?= =?utf-8?B?M0E2SWp6Z0xIeTRwL0JyK1AxSDE4Wm5ud29xWW81OFhjaTdtMmlEc2FYa0ZC?= =?utf-8?B?bDRlM1NmZWRNT0UwTFh0ZHFwK1dIMTZWK0lFR3VlZlNZRThiYjdWM201UURl?= =?utf-8?B?RFA1YkluYjRKcFkvRllVWk5jZ2JZMHVpU3RvTVJTQzIxU2ZUSTgwdWhGbU5H?= =?utf-8?B?UTNqNjhodktoSWJnS0Zxek9CZFJBbWxJRkhNZlQ3QjBLY1hxQ2p4QmxjSWQ1?= =?utf-8?B?ell5aHk4bkcwRm5ESFdjMm55TVJYcGUzR0lKMi9qMTlSaVVJLzd6T0VCRnpJ?= =?utf-8?B?cysvUFRoM2V0bW1lRzNySFpvS1FDOCtsUVIyMGVKd1Vtd09qeUtEVDhPbml1?= =?utf-8?B?RStGWnNCd2NxRXlMWURIeFFDRTZGU0JBRi9JSWJva3pkUi90OE9lcjlEOU15?= =?utf-8?B?aUJwWWU4RzR1aDRMWDJFY0pwckhHaWJhcGQweGdCK2N2cEdoZEJJWHBleWt0?= =?utf-8?B?Mm95c0hGcmVBPT0=?= 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)(366016)(376014)(7416014)(10070799003)(1800799024)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UVZPSnM0U0QwMFlBNkVyazEzZzB0MWl3dUZ3cWdNR0IwUERpdFFzLzhoZVh6?= =?utf-8?B?TVVBTGtwVUNZdFNqRU91VkdqbC9wRmlUdXloc2RoS2IxS1c0Z2x3VDJ5NlB3?= =?utf-8?B?aXNvcU1yM3YzN3UxSjcweWdNYWxzRmEvZTBwbTJoTkZ3bndoRUpjV3Y1NVdV?= =?utf-8?B?eUFwVDNNVlJPNmF4Uk13bk5GU1NTM01iRWE5bksyL0ZkNXRXNjJRbmZOYllF?= =?utf-8?B?alQvRWVJaUE1VVkxL1J4QWdoZE82Zll3SUZESExsVWwwM3FLT0RINVFqbU5O?= =?utf-8?B?anM2UXNmdDB0M3pBTmg0V1hsNW42bHJSb3pFdGtDKzFFOC9pRTUyYjQzQ3VX?= =?utf-8?B?UnF1YWVSb1hrTjM1Zi94YUZHc2Q0R3BkOE5YaC9CeU5wUUZHeEJtNjVid045?= =?utf-8?B?aVVXYkh5QTdQRnVOc1BKanFFVkNZMFhsVXYyTkl3cmFJZWJuUEFWQThlalJ5?= =?utf-8?B?Q0wzZzJvcVh6ZVl1MzhFTWtkNkY2Q0s0aXQrS0JOamhKTTRwUC9ZZFlHUk1i?= =?utf-8?B?ZDU4bFpkSmY3OVpjOHBEZ3RLRXU4QVBuSDUrVjRKTlF5Y2NMMEp5TlpHRGRB?= =?utf-8?B?MExwVEV3T2IwK2g2V2hUY0tRT1VhQkhrSmdyRHAwMmd3S3d3bWdydWpKV3RX?= =?utf-8?B?U1hLblI1bm1mc2dyUHdmMFI5NDRXN3lLZytGd3R1OGZwZWhxL2xUZXVTVUhi?= =?utf-8?B?MDJMdi9Tai9md2J1NjU0dEZRajRIQUZjN1BxOGRDZ3dQQ0pBNCtsR2E2Kzhs?= =?utf-8?B?WnVMMk44Y2tZOXM3Vm9wZm54ZjNESDVvQ2xaQzJxTkVTU2JBQXJzcjRCcXpu?= =?utf-8?B?SmdvQzZmZmEydHNtZU1lOUVhZWprZE5Sd2JUMGFDOEdsNnRsYXorYWZIV3RD?= =?utf-8?B?ZmJoSzJoMXFPUnN0TWlpa1AvK25YRGlaazdRSHVlOTFLTVo2cXd2MDRKQjZu?= =?utf-8?B?aXFHKy83Qk40c1QwTkFOZmlMVGhsdUt5b2lqNkhRUzFSU01aM0x0MFEvaEJi?= =?utf-8?B?VWRHSFl4SUhSQk5BQlVQZ0dneVg1dzlEOGdRMWhFTUptUU1iamJyZXVJQSt6?= =?utf-8?B?MmlRdGxRMDA5dmd6RG5uc2pmTC83aXFJVGF5YVR3bGhTblFPTVZtSy8zcGhO?= =?utf-8?B?WTZYUXpPMWJyaHk3L1Q4UUtBV2RydkdSemQ0OVBMWEF4MUNrK2NRNmVPNXd3?= =?utf-8?B?T3N0YmgrMmpCenpjTVN4M2Q1OEJqVDNZSGFKd2l0dUNoWkpJK2ZCWExjcU13?= =?utf-8?B?ckpDZGpZYmJiODZmVDdiZVVQOGZad2FWRGVETm12ZE56VGpzVEpqYlJJSGxk?= =?utf-8?B?N2FOL2x4UlVDcHF2bHhZMDVCU2licE95T0RlVFBsRkhrN3VnT1loemRjK0Fm?= =?utf-8?B?Y3l2Y0JsZkp3MzBxRzZVVmZCSnJ1VFlqZ3pTSUVBSW5WL2R6a3lkQjczVHBs?= =?utf-8?B?d0VSSEFnYW5IOXFOQ0w1ZUsxUit5aWRKOFdIMWpoQk9VNFVuY2lteHFSdmx2?= =?utf-8?B?QlZrc3B0cUhQampiZ3dIM0UxUHovOFpZek9qcWpSbjF5Q29HbmcybXVKNnE5?= =?utf-8?B?T3pRcmFrdXJXK2NXc3JNYlI4RTViaitoSi9nNk5pZUtLYWFxemdOTzZFUHVp?= =?utf-8?B?Tnl6akNLZTk0MUVVSXVQbjVFcmt4OTladEpFVzE5NVpJNGg0MzRnc2o4eGEx?= =?utf-8?B?Q25ZVDRNQlBLb0hUTksrVXhoRnQ2R2QzWWMvTDdYdmpYTTdMTzB4b1Q5Nnhz?= =?utf-8?B?ZzJsMURBdjlLYTlpQXczbER1d05FeWpOcG1YM3pBMzFJbnhoM2hsS1A0QjBz?= =?utf-8?B?OVF4Zk56S1liLzN2aS9rWXRKb3p5bUNwVVZUcCtxRDYrNUdoMzRQN2dDaWhS?= =?utf-8?B?TWQ5WDZma3NwSVh2bG1McG9Pdjc2UkVuNkw2blhHSW9nWm9WdDJTTVZKdGZY?= =?utf-8?B?aUdyWVVEdXZPUG5SbVZHTWlEcy9JL1lyZGhVeU84b0Y3MHRMQk01U3dENkFl?= =?utf-8?B?a1FuUDlscHpnQWJKZE94ZlRCeGthcTRocmo3K0FJT3ZUNnl0UGl0azFYcWtH?= =?utf-8?B?cEh2QmNUc2QwZjFBUlJIeXZZeU1OOW1Fd2t6TVJYeG1QNnpocytzc2tRallI?= =?utf-8?B?QVpuUnlLNWtoUUxtYXZOVlhJSGNEcFZ1NFBETmtRTk8rd21OY3VjSVJFVmdv?= =?utf-8?Q?p5CxJG8BZEp8ZmCBuXmXDUCxYCR/cqFRl9mROYL5nGzu?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1e0e5295-0afa-4d4f-9929-08ddaa80b64d X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jun 2025 13:46:34.8516 (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: Uyzdyweh9V/Mt5k/iEFBNhgnp6bG9Nx6E1aPHvI/kg6qNTuxUCw2qIwyyUyQO0kYjS63Mw9q8P5uvbGaSLlG7g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB7892 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 Signed-off-by: Alexandre Courbot Reviewed-by: Benno Lossin --- rust/kernel/str.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/rust/kernel/str.rs b/rust/kernel/str.rs index a927db8e079c3597860880947a03959e1d6d712e..36d46443c269a73fa1246c52ab8= 558bae3e439ee 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,54 @@ fn deref_mut(&mut self) -> &mut Self::Target { } } =20 +/// Allows `CString` to be used as a `Borrow`. +/// +/// # 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() + } +} + +/// Allows `CString` to be used as a `BorrowMut`. +/// +/// # 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