rust: page:: optimize rust symbol generation for Page
Subsystems (2)
PATCH v2 1/1 rust: page:: optimize rust symbol generation for Page
From: Kunwu Chan <[email protected]>
When build the kernel using the llvm-18.1.3-rust-1.85.0-x86_64 with ARCH=arm64, the following symbols are generated:
$nm vmlinux | grep ' _R'.*Page | rustfiltffff8000805b6f98 T <kernel::page::Page>::alloc_page ffff8000805b715c T <kernel::page::Page>::fill_zero_raw ffff8000805b720c T <kernel::page::Page>::copy_from_user_slice_raw ffff8000805b6fb4 T <kernel::page::Page>::read_raw ffff8000805b7088 T <kernel::page::Page>::write_raw ffff8000805b72fc T <kernel::page::Page as core::ops::drop::Drop>::drop
These Rust symbols(alloc_page and drop) are trivial wrappers around the C functions alloc_pages and __free_pages. It doesn't make sense to go through a trivial wrapper for these functions, so mark them inline.
---
Changes in v2:
- mark inline only for 'alloc_page' and 'drop'
- reword commit msg
--- rust/kernel/page.rs | 2 ++ 1 file changed, 2 insertions(+)
rust/kernel/page.rs +2 -0
@@ -69,6 +69,7 @@ impl Page {/// let page = Page::alloc_page(GFP_KERNEL | __GFP_ZERO)?; /// # Ok::<(), kernel::alloc::AllocError>(()) /// ``` +#[inline] pub fn alloc_page (flags:Flags ) ->Result <Self ,AllocError > {// SAFETY: Depending on the value of `gfp_flags`, this call may sleep. Other than that, it // is always safe to call this method.
@@ -251,6 +252,7 @@ pub unsafe fn copy_from_user_slice_raw( }impl Drop for Page { +#[inline] fn drop (&mut self) {// SAFETY: By the type invariants, we have ownership of the page and can free it. unsafe { bindings::__free_pages (self.page.as_ptr (),0 ) };
Signature · 1 line
2.43.0
Quoted 18 lines · Kunwu Chan
From: Kunwu Chan <[email protected]>
When build the kernel using the llvm-18.1.3-rust-1.85.0-x86_64 with ARCH=arm64, the following symbols are generated:
$nm vmlinux | grep ' _R'.*Page | rustfilt
ffff8000805b6f98T <kernel::page::Page>::alloc_pageffff8000805b715cT <kernel::page::Page>::fill_zero_rawffff8000805b720cT <kernel::page::Page>::copy_from_user_slice_rawffff8000805b6fb4T <kernel::page::Page>::read_rawffff8000805b7088T <kernel::page::Page>::write_rawffff8000805b72fcT <kernel::page::Pageas core::ops::drop::Drop>::dropThese Rust
symbols(alloc_page and drop)are trivial wrappers around the C functionsalloc_pagesand__free_pages. It doesn't make sense to go through a trivial wrapper for these functions, so mark them inline.
Quoted 5 lines
Suggested-by Alice Ryhl <[email protected]>Co-developed-by Grace Deng <[email protected]>Signed-off-by Grace Deng <[email protected]>Signed-off-by Kunwu Chan <[email protected]>
Miguel Ojeda
AppliedQuoted 16 lines · Kunwu Chan
When build the kernel using the llvm-18.1.3-rust-1.85.0-x86_64 with ARCH=arm64, the following symbols are generated:
$nm vmlinux | grep ' _R'.*Page | rustfilt
ffff8000805b6f98T <kernel::page::Page>::alloc_pageffff8000805b715cT <kernel::page::Page>::fill_zero_rawffff8000805b720cT <kernel::page::Page>::copy_from_user_slice_rawffff8000805b6fb4T <kernel::page::Page>::read_rawffff8000805b7088T <kernel::page::Page>::write_rawffff8000805b72fcT <kernel::page::Pageas core::ops::drop::Drop>::dropThese Rust
symbols(alloc_page and drop)are trivial wrappers around the C functionsalloc_pagesand__free_pages. It doesn't make sense to go through a trivial wrapper for these functions, so mark them inline.
Quoted 5 lines
Suggested-by Alice Ryhl <[email protected]>Co-developed-by Grace Deng <[email protected]>Signed-off-by Grace Deng <[email protected]>Signed-off-by Kunwu Chan <[email protected]>
Applied to rust-next -- thanks!
[ Removed spurious colon in title. - Miguel ]
Cheers,
Miguel