From: "Andreas Hindborg (Samsung)" <nmi@metaspace.dk>
To: Boqun Feng <boqun.feng@gmail.com>
Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-mm@kvack.org, "Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Wedson Almeida Filho" <wedsonaf@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <benno.lossin@proton.me>,
"Martin Rodriguez Reboredo" <yakoyoku@gmail.com>,
"Alice Ryhl" <aliceryhl@google.com>,
"Dariusz Sosnowski" <dsosnowski@dsosnowski.pl>,
"Geoffrey Thomas" <geofft@ldpreload.com>,
"Fox Chen" <foxhlchen@gmail.com>,
"John Baublitz" <john.m.baublitz@gmail.com>,
"Christoph Lameter" <cl@linux.com>,
"Pekka Enberg" <penberg@kernel.org>,
"David Rientjes" <rientjes@google.com>,
"Joonsoo Kim" <iamjoonsoo.kim@lge.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Vlastimil Babka" <vbabka@suse.cz>,
"Roman Gushchin" <roman.gushchin@linux.dev>,
"Hyeonggon Yoo" <42.hyeyoo@gmail.com>,
"Kees Cook" <keescook@chromium.org>,
stable@vger.kernel.org
Subject: Re: [PATCH 3/3] rust: alloc: Add realloc and alloc_zeroed to the GlobalAlloc impl
Date: Mon, 31 Jul 2023 13:12:17 +0200 [thread overview]
Message-ID: <87y1iwpc3j.fsf@metaspace.dk> (raw)
In-Reply-To: <20230730012905.643822-4-boqun.feng@gmail.com>
Boqun Feng <boqun.feng@gmail.com> writes:
> From: Björn Roy Baron <bjorn3_gh@protonmail.com>
>
> While there are default impls for these methods, using the respective C
> api's is faster. Currently neither the existing nor these new
> GlobalAlloc method implementations are actually called. Instead the
> __rust_* function defined below the GlobalAlloc impl are used. With
> rustc 1.71 these functions will be gone and all allocation calls will go
> through the GlobalAlloc implementation.
>
> Link: https://github.com/Rust-for-Linux/linux/issues/68
> Signed-off-by: Björn Roy Baron <bjorn3_gh@protonmail.com>
> [boqun: add size adjustment for alignment requirement]
> Signed-off-by: Boqun Feng <boqun.feng@gmail.com>
> ---
Reviewed-by: Andreas Hindborg <a.hindborg@samsung.com>
> rust/kernel/allocator.rs | 27 +++++++++++++++++++++++++++
> 1 file changed, 27 insertions(+)
>
> diff --git a/rust/kernel/allocator.rs b/rust/kernel/allocator.rs
> index 1aec688cf0e0..6f1f50465ab3 100644
> --- a/rust/kernel/allocator.rs
> +++ b/rust/kernel/allocator.rs
> @@ -51,6 +51,33 @@ unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
> bindings::kfree(ptr as *const core::ffi::c_void);
> }
> }
> +
> + unsafe fn realloc(&self, ptr: *mut u8, layout: Layout, new_size: usize) -> *mut u8 {
> + // SAFETY:
> + // - `new_size`, when rounded up to the nearest multiple of `layout.align()`, will not
> + // overflow `isize` by the function safety requirement.
> + // - `layout.align()` is a proper alignment (i.e. not zero and must be a power of two).
> + let layout = unsafe { Layout::from_size_align_unchecked(new_size, layout.align()) };
> +
> + // SAFETY:
> + // - `ptr` is either null or a pointer allocated by this allocator by the function safety
> + // requirement.
> + // - the size of `layout` is not zero because `new_size` is not zero by the function safety
> + // requirement.
> + unsafe { krealloc_aligned(ptr, layout, bindings::GFP_KERNEL) }
> + }
> +
> + unsafe fn alloc_zeroed(&self, layout: Layout) -> *mut u8 {
> + // SAFETY: `ptr::null_mut()` is null and `layout` has a non-zero size by the function safety
> + // requirement.
> + unsafe {
> + krealloc_aligned(
> + ptr::null_mut(),
> + layout,
> + bindings::GFP_KERNEL | bindings::__GFP_ZERO,
> + )
> + }
> + }
> }
>
> #[global_allocator]
next prev parent reply other threads:[~2023-07-31 11:14 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-07-30 1:29 [PATCH 0/3] Fix alignment issue and prepare for rust 1.71 Boqun Feng
2023-07-30 1:29 ` [PATCH 1/3] rust: allocator: Prevent mis-aligned allocation Boqun Feng
2023-07-30 20:43 ` Miguel Ojeda
2023-07-30 22:36 ` Björn Roy Baron
2023-07-30 22:41 ` Björn Roy Baron
2023-07-30 22:53 ` Boqun Feng
2023-07-31 0:13 ` Miguel Ojeda
2023-07-31 7:56 ` Vlastimil Babka
2023-07-30 1:29 ` [PATCH 2/3] rust: allocator: Use krealloc_aligned() in KernelAllocator::alloc Boqun Feng
2023-07-30 1:32 ` kernel test robot
2023-07-31 8:48 ` Andreas Hindborg (Samsung)
2023-07-30 1:29 ` [PATCH 3/3] rust: alloc: Add realloc and alloc_zeroed to the GlobalAlloc impl Boqun Feng
2023-07-31 11:12 ` Andreas Hindborg (Samsung) [this message]
2023-07-30 20:43 ` [PATCH 0/3] Fix alignment issue and prepare for rust 1.71 Miguel Ojeda
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=87y1iwpc3j.fsf@metaspace.dk \
--to=nmi@metaspace.dk \
--cc=42.hyeyoo@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=cl@linux.com \
--cc=dsosnowski@dsosnowski.pl \
--cc=foxhlchen@gmail.com \
--cc=gary@garyguo.net \
--cc=geofft@ldpreload.com \
--cc=iamjoonsoo.kim@lge.com \
--cc=john.m.baublitz@gmail.com \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ojeda@kernel.org \
--cc=penberg@kernel.org \
--cc=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=rust-for-linux@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=vbabka@suse.cz \
--cc=wedsonaf@gmail.com \
--cc=yakoyoku@gmail.com \
/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.