From: "Danilo Krummrich" <dakr@kernel.org>
To: "Alice Ryhl" <aliceryhl@google.com>
Cc: "Lorenzo Stoakes" <lorenzo.stoakes@oracle.com>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Matthew Wilcox" <willy@infradead.org>,
"Tamir Duberstein" <tamird@gmail.com>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>,
linux-mm@kvack.org, rust-for-linux@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/2] rust: alloc: specify the minimum alignment of each allocator
Date: Tue, 15 Jul 2025 16:05:23 +0200 [thread overview]
Message-ID: <DBCOPL040H7H.2MZO6ZBIR0Z2T@kernel.org> (raw)
In-Reply-To: <20250715-align-min-allocator-v1-1-3e1b2a5516c0@google.com>
On Tue Jul 15, 2025 at 3:46 PM CEST, Alice Ryhl wrote:
> diff --git a/rust/kernel/alloc.rs b/rust/kernel/alloc.rs
> index a2c49e5494d334bfde67328464dafcdb31052947..c12753a5fb1c7423a4063553674b537a775c860e 100644
> --- a/rust/kernel/alloc.rs
> +++ b/rust/kernel/alloc.rs
> @@ -137,6 +137,14 @@ pub mod flags {
> /// - Implementers must ensure that all trait functions abide by the guarantees documented in the
> /// `# Guarantees` sections.
> pub unsafe trait Allocator {
> + /// The minimum alignment satisfied by all allocations from this allocator.
> + ///
> + /// # Guarantees
> + ///
> + /// Any pointer allocated by this allocator must be aligned to `MIN_ALIGN` even if the
> + /// requested layout has a smaller alignment.
I'd say "is guaranteed to be aligned to" instead, "must be" reads like a
requirement.
Speaking of which, I think this also needs to be expressed as a safety
requirement of the Allocator trait itself, which the specific allocator
implementations need to justify.
> + const MIN_ALIGN: usize;
> +
> /// Allocate memory based on `layout` and `flags`.
> ///
> /// On success, returns a buffer represented as `NonNull<[u8]>` that satisfies the layout
> diff --git a/rust/kernel/alloc/allocator.rs b/rust/kernel/alloc/allocator.rs
> index aa2dfa9dca4c309e5a9eafc7da6a8a9bd7b54b11..25fc9f9ae3b4e471a08d77130b374bd1397f7384 100644
> --- a/rust/kernel/alloc/allocator.rs
> +++ b/rust/kernel/alloc/allocator.rs
> @@ -17,6 +17,8 @@
> use crate::bindings;
> use crate::pr_warn;
>
> +const ARCH_KMALLOC_MINALIGN: usize = bindings::ARCH_KMALLOC_MINALIGN as usize;
> +
> /// The contiguous kernel allocator.
> ///
> /// `Kmalloc` is typically used for physically contiguous allocations up to page size, but also
> @@ -128,6 +130,8 @@ unsafe fn call(
> // - passing a pointer to a valid memory allocation is OK,
> // - `realloc` satisfies the guarantees, since `ReallocFunc::call` has the same.
> unsafe impl Allocator for Kmalloc {
> + const MIN_ALIGN: usize = ARCH_KMALLOC_MINALIGN;
> +
> #[inline]
> unsafe fn realloc(
> ptr: Option<NonNull<u8>>,
> @@ -145,6 +149,8 @@ unsafe fn realloc(
> // - passing a pointer to a valid memory allocation is OK,
> // - `realloc` satisfies the guarantees, since `ReallocFunc::call` has the same.
> unsafe impl Allocator for Vmalloc {
> + const MIN_ALIGN: usize = kernel::page::PAGE_SIZE;
> +
> #[inline]
> unsafe fn realloc(
> ptr: Option<NonNull<u8>>,
> @@ -169,6 +175,8 @@ unsafe fn realloc(
> // - passing a pointer to a valid memory allocation is OK,
> // - `realloc` satisfies the guarantees, since `ReallocFunc::call` has the same.
> unsafe impl Allocator for KVmalloc {
> + const MIN_ALIGN: usize = ARCH_KMALLOC_MINALIGN;
> +
> #[inline]
> unsafe fn realloc(
> ptr: Option<NonNull<u8>>,
next prev parent reply other threads:[~2025-07-15 14:05 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-15 13:46 [PATCH 0/2] Take ARCH_KMALLOC_MINALIGN into account for build-time XArray check Alice Ryhl
2025-07-15 13:46 ` [PATCH 1/2] rust: alloc: specify the minimum alignment of each allocator Alice Ryhl
2025-07-15 14:05 ` Danilo Krummrich [this message]
2025-07-15 14:35 ` Alice Ryhl
2025-07-15 14:39 ` Danilo Krummrich
2025-07-15 16:01 ` Benno Lossin
2025-07-15 13:46 ` [PATCH 2/2] rust: alloc: take the allocator into account for FOREIGN_ALIGN Alice Ryhl
2025-07-15 14:19 ` Danilo Krummrich
2025-07-16 9:46 ` Alice Ryhl
2025-07-15 16:00 ` Benno Lossin
2025-07-15 16:23 ` Danilo Krummrich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=DBCOPL040H7H.2MZO6ZBIR0Z2T@kernel.org \
--to=dakr@kernel.org \
--cc=Liam.Howlett@oracle.com \
--cc=a.hindborg@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=gary@garyguo.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=lossin@kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tamird@gmail.com \
--cc=tmgross@umich.edu \
--cc=willy@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.