On Fri, Jan 30, 2026 at 9:35 AM Eliot Courtney <[email protected]> wrote:
>
> Add dma_read! and dma_write! macros using the new infallible methods
> on CoherentArray.
>
> Signed-off-by: Eliot Courtney <[email protected]>
> ---
> rust/kernel/dma.rs | 103
> +++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 103 insertions(+)
>
> diff --git a/rust/kernel/dma.rs b/rust/kernel/dma.rs
> index e4bca7a18ac1..f3920f74583a 100644
> --- a/rust/kernel/dma.rs
> +++ b/rust/kernel/dma.rs
> @@ -811,6 +811,24 @@ pub unsafe fn as_slice_mut<const OFFSET: usize, const
> COUNT: usize>(&mut self) -
> )
> };
> }
> +
> + /// Returns a pointer to an element from the region with bounds
> checking. `OFFSET` is in
> + /// units of `T`, not the number of bytes.
> + ///
> + /// Public but hidden since it should only be used from [`dma_read`] and
> [`dma_write`] macros.
> + #[doc(hidden)]
> + pub fn ptr_at<const OFFSET: usize>(&self) -> *mut T {
> + build_assert!(
> + OFFSET < N,
> + "Index out of bounds when accessing CoherentArray"
> + );
This build assert does not depend on runtime values, so it can be
written as a const block:
const { assert!(OFFSET < N, "Index out of bounds when accessing
CoherentArray"); }
Alice