* Question on Box<T> smart pointer @ 2021-04-27 15:20 Fabio Aiuto 2021-04-27 15:22 ` Alex Gaynor 0 siblings, 1 reply; 4+ messages in thread From: Fabio Aiuto @ 2021-04-27 15:20 UTC (permalink / raw) To: rust-for-linux Hi all, I have a question. There's one thing I miss. If Box<T> smart pointer allows allocating space on the heap, how is this behaviour overridden in linux kernel Rust? I mean, in c we have all API's to allocate heap space, but using "pure" Box<T> in kernel space what kind of allocation provides? If this question is stupid I apologize in advance, thank you, fabio ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Question on Box<T> smart pointer 2021-04-27 15:20 Question on Box<T> smart pointer Fabio Aiuto @ 2021-04-27 15:22 ` Alex Gaynor 2021-04-27 15:33 ` Fabio Aiuto 0 siblings, 1 reply; 4+ messages in thread From: Alex Gaynor @ 2021-04-27 15:22 UTC (permalink / raw) To: Fabio Aiuto; +Cc: rust-for-linux Box<T> in the kernel allocates on the kernel heap, via kmalloc. This is done by providing a Rust GlobalAllocator: https://github.com/Rust-for-Linux/linux/blob/rust/rust/kernel/allocator.rs#L11 Alex On Tue, Apr 27, 2021 at 11:20 AM Fabio Aiuto <fabioaiuto83@gmail.com> wrote: > > Hi all, > > I have a question. There's one thing I miss. > > If Box<T> smart pointer allows allocating space on the heap, > how is this behaviour overridden in linux kernel Rust? > > I mean, in c we have all API's to allocate heap space, > but using "pure" Box<T> in kernel space what kind of > allocation provides? > > If this question is stupid I apologize in advance, > > thank you, > > fabio -- All that is necessary for evil to succeed is for good people to do nothing. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Question on Box<T> smart pointer 2021-04-27 15:22 ` Alex Gaynor @ 2021-04-27 15:33 ` Fabio Aiuto 2021-04-27 15:35 ` Alex Gaynor 0 siblings, 1 reply; 4+ messages in thread From: Fabio Aiuto @ 2021-04-27 15:33 UTC (permalink / raw) To: Alex Gaynor; +Cc: rust-for-linux On Tue, Apr 27, 2021 at 11:22:23AM -0400, Alex Gaynor wrote: > Box<T> in the kernel allocates on the kernel heap, via kmalloc. This > is done by providing a Rust GlobalAllocator: > https://github.com/Rust-for-Linux/linux/blob/rust/rust/kernel/allocator.rs#L11 so this code: pub struct KernelAllocator; unsafe impl GlobalAlloc for KernelAllocator { unsafe fn alloc(&self, layout: Layout) -> *mut u8 { // `krealloc()` is used instead of `kmalloc()` because the latter is // an inline function and cannot be bound to as a result. bindings::krealloc(ptr::null(), layout.size(), bindings::GFP_KERNEL) as *mut u8 } unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) { bindings::kfree(ptr as *const c_types::c_void); } } overrides the default behaviour of Box<T> defined in core::alloc::GlobalAlloc, doesn't it? So this code overrides the general heap allocation facility, not just Box<T>, right? thank you, fabio > > Alex > > On Tue, Apr 27, 2021 at 11:20 AM Fabio Aiuto <fabioaiuto83@gmail.com> wrote: > > > > Hi all, > > > > I have a question. There's one thing I miss. > > > > If Box<T> smart pointer allows allocating space on the heap, > > how is this behaviour overridden in linux kernel Rust? > > > > I mean, in c we have all API's to allocate heap space, > > but using "pure" Box<T> in kernel space what kind of > > allocation provides? > > > > If this question is stupid I apologize in advance, > > > > thank you, > > > > fabio > > > > -- > All that is necessary for evil to succeed is for good people to do nothing. ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: Question on Box<T> smart pointer 2021-04-27 15:33 ` Fabio Aiuto @ 2021-04-27 15:35 ` Alex Gaynor 0 siblings, 0 replies; 4+ messages in thread From: Alex Gaynor @ 2021-04-27 15:35 UTC (permalink / raw) To: Fabio Aiuto; +Cc: rust-for-linux Yes, it overrides it for any APIs in the alloc crate that allocate memory (Arc, Rc, Vec, String, etc.). Technically https://github.com/Rust-for-Linux/linux/blob/rust/rust/kernel/lib.rs#L203-L204 is where the overriding really happens. The previous code I linked is where the implementation is. Alex On Tue, Apr 27, 2021 at 11:33 AM Fabio Aiuto <fabioaiuto83@gmail.com> wrote: > > On Tue, Apr 27, 2021 at 11:22:23AM -0400, Alex Gaynor wrote: > > Box<T> in the kernel allocates on the kernel heap, via kmalloc. This > > is done by providing a Rust GlobalAllocator: > > https://github.com/Rust-for-Linux/linux/blob/rust/rust/kernel/allocator.rs#L11 > > so this code: > > pub struct KernelAllocator; > > unsafe impl GlobalAlloc for KernelAllocator { > unsafe fn alloc(&self, layout: Layout) -> *mut u8 { > // `krealloc()` is used instead of `kmalloc()` because the latter is > // an inline function and cannot be bound to as a result. > bindings::krealloc(ptr::null(), layout.size(), bindings::GFP_KERNEL) as *mut u8 > } > > unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) { > bindings::kfree(ptr as *const c_types::c_void); > } > } > > overrides the default behaviour of Box<T> defined > in core::alloc::GlobalAlloc, doesn't it? > > So this code overrides the general heap allocation > facility, not just Box<T>, right? > > thank you, > > fabio > > > > > Alex > > > > On Tue, Apr 27, 2021 at 11:20 AM Fabio Aiuto <fabioaiuto83@gmail.com> wrote: > > > > > > Hi all, > > > > > > I have a question. There's one thing I miss. > > > > > > If Box<T> smart pointer allows allocating space on the heap, > > > how is this behaviour overridden in linux kernel Rust? > > > > > > I mean, in c we have all API's to allocate heap space, > > > but using "pure" Box<T> in kernel space what kind of > > > allocation provides? > > > > > > If this question is stupid I apologize in advance, > > > > > > thank you, > > > > > > fabio > > > > > > > > -- > > All that is necessary for evil to succeed is for good people to do nothing. -- All that is necessary for evil to succeed is for good people to do nothing. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-04-27 15:35 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-04-27 15:20 Question on Box<T> smart pointer Fabio Aiuto 2021-04-27 15:22 ` Alex Gaynor 2021-04-27 15:33 ` Fabio Aiuto 2021-04-27 15:35 ` Alex Gaynor
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).