dev/block: use read_aligned in partition probing

This commit is contained in:
Mark Poliakov 2024-08-03 19:52:48 +03:00
parent 128b699352
commit 4fc322405c
4 changed files with 13 additions and 13 deletions

View File

@ -230,6 +230,10 @@ impl<T> PageBox<MaybeUninit<T>> {
PageBox { value, page_count }
}
pub fn as_bytes_mut(p: &mut Self) -> &mut PageSlice<MaybeUninit<u8>> {
unsafe { core::mem::transmute(p.as_bytes_mut()) }
}
}
impl<T> PageBox<[MaybeUninit<T>]> {

View File

@ -90,14 +90,6 @@ impl<'a, D: NgBlockDevice + 'a> BlockDevice for Partition<'a, D> {
|| buf.len() % self.device.block_size != 0
{
// TODO fallback to unaligned read
log::info!(
"Unaligned read: block_size={}, off={:#x}, pos={:#x}, len={}",
self.device.block_size,
pos,
start,
buf.len()
);
loop {}
todo!()
}
@ -154,11 +146,14 @@ impl<'a, D: NgBlockDevice + 'a> BlockDevice for Partition<'a, D> {
}
}
async unsafe fn read_struct_lba<T>(dev: &'static dyn BlockDevice, lba: u64) -> Result<T, Error> {
async unsafe fn read_struct_lba<T>(
dev: &'static dyn BlockDevice,
lba: u64,
) -> Result<PageBox<T>, Error> {
assert_eq!(size_of::<T>(), 512);
let mut data = MaybeUninit::<T>::uninit();
let buffer = core::slice::from_raw_parts_mut(data.as_mut_ptr() as *mut u8, 512);
dev.read_exact(lba * 512, buffer).await?;
let mut data = PageBox::new_uninit()?;
dev.read_aligned(lba * 512, PageBox::as_bytes_mut(&mut data))
.await?;
Ok(data.assume_init())
}

View File

@ -73,6 +73,7 @@ fn generate_abi<P: AsRef<Path>>(abi_path: P) {
}
fn main() {
println!("cargo:rustc-check-cfg=cfg(rust_analyzer)");
build_libm();
generate_abi("../abi/def");
}

View File

@ -2,7 +2,7 @@
pub use abi::net::{MacAddress, SocketInterfaceQuery, SocketOption, SocketType};
#[cfg(feature = "alloc")]
#[cfg(any(feature = "alloc", rust_analyzer))]
pub mod dns {
//! DNS resolver module for `std`
use abi::net::dns::DnsSerialize;