Message ID | 20240209223201.2145570-3-mcanal@igalia.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | rust: xarray: Add an abstraction for XArray | expand |
Maíra Canal <mcanal@igalia.com> writes: > There are cases where we need to check the alignment of the pointers > returned by `into_foreign`. Currently, this is not possible to be done > at build time. Therefore, add a property to the trait ForeignOwnable, > which specifies the alignment of the pointers returned by > `into_foreign`. > > Suggested-by: Alice Ryhl <aliceryhl@google.com> > Signed-off-by: Maíra Canal <mcanal@igalia.com> > --- Reviewed-by: Andreas Hindborg <a.hindborg@samsung.com>
On Fri, Feb 9, 2024 at 11:32 PM Maíra Canal <mcanal@igalia.com> wrote: > > There are cases where we need to check the alignment of the pointers > returned by `into_foreign`. Currently, this is not possible to be done > at build time. Therefore, add a property to the trait ForeignOwnable, > which specifies the alignment of the pointers returned by > `into_foreign`. > > Suggested-by: Alice Ryhl <aliceryhl@google.com> > Signed-off-by: Maíra Canal <mcanal@igalia.com> Reviewed-by: Alice Ryhl <aliceryhl@google.com>
diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs index 77cdbcf7bd2e..df2230f0f19b 100644 --- a/rust/kernel/sync/arc.rs +++ b/rust/kernel/sync/arc.rs @@ -276,6 +276,8 @@ pub fn ptr_eq(this: &Self, other: &Self) -> bool { } impl<T: 'static> ForeignOwnable for Arc<T> { + const FOREIGN_ALIGN: usize = core::mem::align_of::<ArcInner<T>>(); + type Borrowed<'a> = ArcBorrow<'a, T>; fn into_foreign(self) -> *const core::ffi::c_void { diff --git a/rust/kernel/types.rs b/rust/kernel/types.rs index fdb778e65d79..5833cf04bd4c 100644 --- a/rust/kernel/types.rs +++ b/rust/kernel/types.rs @@ -20,6 +20,9 @@ /// This trait is meant to be used in cases when Rust objects are stored in C objects and /// eventually "freed" back to Rust. pub trait ForeignOwnable: Sized { + /// The alignment of pointers returned by `into_foreign`. + const FOREIGN_ALIGN: usize; + /// Type of values borrowed between calls to [`ForeignOwnable::into_foreign`] and /// [`ForeignOwnable::from_foreign`]. type Borrowed<'a>; @@ -49,6 +52,8 @@ pub trait ForeignOwnable: Sized { } impl<T: 'static> ForeignOwnable for Box<T> { + const FOREIGN_ALIGN: usize = core::mem::align_of::<T>(); + type Borrowed<'a> = &'a T; fn into_foreign(self) -> *const core::ffi::c_void { @@ -71,6 +76,8 @@ unsafe fn from_foreign(ptr: *const core::ffi::c_void) -> Self { } impl ForeignOwnable for () { + const FOREIGN_ALIGN: usize = core::mem::align_of::<()>(); + type Borrowed<'a> = (); fn into_foreign(self) -> *const core::ffi::c_void {
There are cases where we need to check the alignment of the pointers returned by `into_foreign`. Currently, this is not possible to be done at build time. Therefore, add a property to the trait ForeignOwnable, which specifies the alignment of the pointers returned by `into_foreign`. Suggested-by: Alice Ryhl <aliceryhl@google.com> Signed-off-by: Maíra Canal <mcanal@igalia.com> --- rust/kernel/sync/arc.rs | 2 ++ rust/kernel/types.rs | 7 +++++++ 2 files changed, 9 insertions(+)