From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id EEED0C3DA64 for ; Thu, 1 Aug 2024 08:28:25 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8755F6B0098; Thu, 1 Aug 2024 04:28:25 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 825F26B0099; Thu, 1 Aug 2024 04:28:25 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6C63D6B009C; Thu, 1 Aug 2024 04:28:25 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 4DD566B0098 for ; Thu, 1 Aug 2024 04:28:25 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id F17EF1C335A for ; Thu, 1 Aug 2024 08:28:24 +0000 (UTC) X-FDA: 82402999728.22.9EDEC8E Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) by imf03.hostedemail.com (Postfix) with ESMTP id 201B520019 for ; Thu, 1 Aug 2024 08:28:22 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=OdH4sei+; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf03.hostedemail.com: domain of aliceryhl@google.com designates 209.85.128.50 as permitted sender) smtp.mailfrom=aliceryhl@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1722500861; a=rsa-sha256; cv=none; b=l75l2IS0ynjPmrobC2pWSrz7v6v5iHWMfwcuAmQLZKdb57fbMYGpmXXhy7aLy9u1Fl/sbJ 5gyhJJz8sDBuxPaClT2hEy1O5FGpe2pjz+hsXbPnzwXgzeTBTg4R8AjA6lAQn0LKutEkZj 1+wRkCy8XDa2RM7Cdgzj1EaUqCKO3RM= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=OdH4sei+; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf03.hostedemail.com: domain of aliceryhl@google.com designates 209.85.128.50 as permitted sender) smtp.mailfrom=aliceryhl@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1722500861; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=ojSR7rF9TxK4zY2qobnr+4uxfHaQxVITngCaPWYPV8k=; b=N8j1FL4NNQgrNwuJMZE/vNB2YZg17fhbCABApaCLelHc4w58mPMoOLblNI4gU1TjU61AeX x/KRfXNqaR/3+JWIf/VwgHpR+4SMEys5vtvIM7s/oSOpYxQHxotKmmuh/BsI2w444JnP2D WUoiifdIRQiXx21spemU6Ob4BXjlgNs= Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-426526d30aaso43969455e9.0 for ; Thu, 01 Aug 2024 01:28:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1722500901; x=1723105701; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=ojSR7rF9TxK4zY2qobnr+4uxfHaQxVITngCaPWYPV8k=; b=OdH4sei+zpjoV495VbKkZfEKn/c6OmxHhnovaySSRNCXKwLmUeNKlBXdLwFXGT4ot1 6BwwWc/VMTuWzoFGDbQBTP7QdNi5OJRQ+EXcR946Q1ATTCFAhZiKvvuwYkQEQEmvLVad WKhDXtt4t2dcFAP5coHvL+sH6SJNkoWtpxjA8UCGxorhpt1Rk+ffCG4AiYzOR/wFvxuj uNPejLpoN12ypNnvw7uwRTQDRWfHTUdDzoUWeMDPNb1FT4dVpcxI0tqoSXLqtd3MsXvQ 7Ml1rTeQWRDcki/1sCA/6/ySHqwCP+OEh+/vLqF/nwTTNNVaVx8G49MwUY5qKWFVWsF8 UJNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722500901; x=1723105701; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ojSR7rF9TxK4zY2qobnr+4uxfHaQxVITngCaPWYPV8k=; b=bLFEDz69udoNuBq4mLfh5FdDc9EMj0OU9CynRiW32NMA0xaoK0mVXb0UKn8snntRDj Z+iZDZGVC78/t4/Nxvaeiba8ysVxVr0lQ1cSnC1pqJtkLYT0k9E2d29mOUgG9XLZMx/d LILG3M+PnyUF2gsE4SSbdkqQ5JwVhFq/0n+/h9UvCE5ndD4icW9dadtmbvqJtiEYX2vz TIaydfwxCy5WKq1M4F4Ru0hY6YQkiHlSN5uYedOgECA/DhVE1dgIni+CSTjjmj5veKta mrpoItMDm32aIA3LWrbJE4VsMyhPr5f8PqTKyoXNhDlVV+9L4wTjh8FPHe/IepgEceTe m3jg== X-Forwarded-Encrypted: i=1; AJvYcCW/Vt29mCZfCcOLyWaV+bl1bQXGwZwwys9TTyvPTV+6FoHDBf6jy6Lf8kI9aZM9xipSIMNUkd3H3oHBXnyEbu/Hb88= X-Gm-Message-State: AOJu0YxGkemUF7M1PARjz8VK06NuOGQr7vYtBMJBFy0a8XfWiOpBjQKq 0NMmsh383Ut02WOJXLu/4FXWwt28PQ+wY7rvugSron2Vk+MHNkHc6+dfP2Z+1JvOHT7ZQMni7Mj KtRQD67ivxEQS91OYL62ea3EJqb+25LixMJNR X-Google-Smtp-Source: AGHT+IFlHvNyLOkNGilTJsUR27sYt/UML/5/UGX3BBsKWn8Zf6ZLf3lpfWpigR7D708NAF2f+Zvc+KIKjlUVPpSpWME= X-Received: by 2002:a05:6000:c0a:b0:367:9279:c401 with SMTP id ffacd0b85a97d-36baadef49fmr1115684f8f.34.1722500901119; Thu, 01 Aug 2024 01:28:21 -0700 (PDT) MIME-Version: 1.0 References: <20240801000641.1882-1-dakr@kernel.org> <20240801000641.1882-5-dakr@kernel.org> In-Reply-To: <20240801000641.1882-5-dakr@kernel.org> From: Alice Ryhl Date: Thu, 1 Aug 2024 10:28:09 +0200 Message-ID: Subject: Re: [PATCH v3 04/25] rust: alloc: implement `Allocator` for `Kmalloc` To: Danilo Krummrich Cc: ojeda@kernel.org, alex.gaynor@gmail.com, wedsonaf@gmail.com, boqun.feng@gmail.com, gary@garyguo.net, bjorn3_gh@protonmail.com, benno.lossin@proton.me, a.hindborg@samsung.com, akpm@linux-foundation.org, daniel.almeida@collabora.com, faith.ekstrand@collabora.com, boris.brezillon@collabora.com, lina@asahilina.net, mcanal@igalia.com, zhiw@nvidia.com, acurrid@nvidia.com, cjia@nvidia.com, jhubbard@nvidia.com, airlied@redhat.com, ajanulgu@redhat.com, lyude@redhat.com, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 201B520019 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: kdmoknc5hnh7psqwwt5rdparud88whqi X-HE-Tag: 1722500902-176854 X-HE-Meta: U2FsdGVkX18Mw+MLNwVNWc1cphUN3Rav/nsYf62a6SYS8UYeEttF97DpLXI77YfQbv+ox1It2cqMLu9IDvSfZrToTL+qVMMUlF/upAsqYdcllonYkJl1hRCNYdSkblqZRQcLtS9mGNKazBTEsxa72Lp8LxQl81xCzIdBy0qlnEDWYNihCfPiNdgBnO40I3b16J7fvPBQF4uazAHhuKI49MiUQmMHpgP/iZFSTBp25f6omDBAa5x5D49AwjcjBt2f97H8fUbncPNrXm/YI1h/tXVhWV1D6kha/dgxSuttQIPYs+yoMw/fLLSFRQkpvxg0Pd48CKB842GsqJ6dLnB3AknCAa99r1ruCjoWwy8K5uDdlln4vl5VV50Jo2C0ltr809si08iaqskBlPpk3dzHtN0d+R+wQ8IoSAy10pAyyeOtpN/lxxI3kVsYPqkQirAPLUgnWyRhypxjikUF074JZBXlNh7MI5qVaGjBPQpu+sw2K8VMle5zyF41XAifGtpdqapoVCHaed/LpS70ZHGJbxgdL3pot52vilIJ1XadgZjxW3PVu+9h40S8ocGc3mkisosEdSHr05w/MHaNKO5HPH4/as8TWYosUI1vlhVYYjyuMYKAgthZ+Hp9GknO1EcCQNVtt4OGQvzxm7q2ffFdxwDdi3cY6mosshcx4c6kKokRCQbmhMZ5yHDbbrV2FeAYUQY1CUN/xAwTXFhmZZoVVtqgMYbOE8C6odKFG4y8cQf1J251rcXLPUz2e0O/5W5+R+6YK1+CTgPhHEcIbA/yet1b+Onfo08IX0kCZDupNXeLUZIeYWENLe81iIh5wKfnvm2tjhyKYQvI29yesiwq1o+rqI5D7+s+PtlJo7LmAnJz2QYc4NvJ/lgqNG8QarCVft16k7tnEXJckpz+xvl9BtSoMbGkAvl/Fdh/EuHlfeZCYwwR5OMmF6tM8P1y1sGXDnKq6pjdIk4seGNwuPF TlAb2wXB Op4OEYvpCdRUzKCFkPrvQcpfJrTMJsKeMHj0ccx4g6kEvv/IN37pUXCNGTs7ySCwBo4xVVB6x+d/vdC3YbCk8zpVDrjgiw1X9V2EZ8bOlluzohm2RYjs3rPmNVQ0rUK4HXtP2bACyEnizplNVNAAUMMRItkZdwXseciGiqByfNrSS3+X6m7cl7pqKMOGTYftsMYHy8Gboo7uPXCMJUGYossy84mTi61l+9XF5ETPPTChl7/D/J+rMkldGFeqUUN6EHr04jGSYiUUR/va3apKSyeTWuSbyc/eWyJFiMPIHP7QRcD8= X-Bogosity: Ham, tests=bogofilter, spamicity=0.079167, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Thu, Aug 1, 2024 at 2:07=E2=80=AFAM Danilo Krummrich w= rote: > +/// Returns a proper size to alloc a new object aligned to `new_layout`'= s alignment. > fn aligned_size(new_layout: Layout) -> usize { This comment could potentially be moved to the previous patch that defined the function. > +struct ReallocFunc( > + // INVARIANT: One of the following `krealloc`, `vrealloc`, `kvreallo= c`. > + unsafe extern "C" fn(*const core::ffi::c_void, usize, u32) -> *mut c= ore::ffi::c_void, > +); In this case, the comment would usually be formatted with markdown. /// # Invariants /// /// Must contain one of the following: `krealloc`, `vrealloc`, `kvrealloc`. The // INVARIANT: syntax is used when constructing an instance to argue why the documentented invariants are satisfied. > +impl ReallocFunc { > + fn krealloc() -> Self { > + Self(bindings::krealloc) > + } Technically this should have an // INVARIANT: explaining why the invariants are satisfied by this new value. > + > + // SAFETY: `call` has the exact same safety requirements as `Allocat= or::realloc`. > + unsafe fn call( Similarly to the above, the // SAFETY: syntax is used when arguing why the preconditions are satisfied, but when explaining what the preconditions are, we usually use this syntax instead: /// # Safety /// /// This method has the same safety requirements as `Allocator::realloc`. > + &self, > + ptr: Option>, > + layout: Layout, > + flags: Flags, > + ) -> Result, AllocError> { > + let size =3D aligned_size(layout); > + let ptr =3D match ptr { > + Some(ptr) =3D> ptr.as_ptr(), > + None =3D> ptr::null(), > + }; > + > + // SAFETY: `ptr` is valid by the safety requirements of this fun= ction. > + let raw_ptr =3D unsafe { > + // If `size =3D=3D 0` and `ptr !=3D NULL` the memory behind = the pointer is freed. > + self.0(ptr.cast(), size, flags.0).cast() > + }; > + > + let ptr =3D if size =3D=3D 0 { > + NonNull::dangling() > + } else { > + NonNull::new(raw_ptr).ok_or(AllocError)? > + }; > + > + Ok(NonNull::slice_from_raw_parts(ptr, size)) > + } > +} > + > +unsafe impl Allocator for Kmalloc { > + unsafe fn realloc( > + ptr: Option>, > + layout: Layout, > + flags: Flags, > + ) -> Result, AllocError> { > + let realloc =3D ReallocFunc::krealloc(); > + > + // SAFETY: If not `None`, `ptr` is guaranteed to point to valid = memory, which was previously > + // allocated with this `Allocator`. > + unsafe { realloc.call(ptr, layout, flags) } > + } > +} > + > unsafe impl GlobalAlloc for Kmalloc { > unsafe fn alloc(&self, layout: Layout) -> *mut u8 { > // SAFETY: `ptr::null_mut()` is null and `layout` has a non-zero= size by the function safety > -- > 2.45.2 >