2 ms·
This is similar to `Box::into_raw` in Rust `std`. It destructs the RAII struct into a raw pointer. After that it's pretty much expected that you are responsible
by Dagonfly 2y ago
This is similar to `Box::into_raw` in Rust `std`. It destructs the RAII struct into a raw pointer. After that it's pretty much expected that you are responsible for cleanup.
- meltyness 2y agoSeems like the preferred interface would be a purely functional block that provides the access. Obviously forcing callers to free means adding lints and docs. Returning borrows leaves the likelihood of entering into explicit lifetimes hell and such in calling code. A functional interface like (paraphrasing) // pub fn apply_op(&mut self, FnMut(&mut T, &bindings::dma_addr_t... )) Keeps pandora inside the box.
- Dagonfly 2y agoAs most of the kernel is in C, they probably need a raw pointer quite regularly to pass it into existing C APIs. Just like `Box::into_raw`, this method shouldn't be used in pure Rust code. It's only available for C FFI.
- meltyness 2y agoRight but, this isn't merely FFI code, those are via Bindgen, this is the abstraction intended to be provided to all DMA driver authors as the API, as I understand it.