From 0f4834f33e99ec9eab8b4267513781210ebfc91b Mon Sep 17 00:00:00 2001 From: pigeonmoelleux <pigeonmoelleux@crans.org> Date: Sun, 21 May 2023 16:49:15 +0200 Subject: [PATCH] fix(kernel): ATA device read --- src/kernel/device/ata.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/kernel/device/ata.rs b/src/kernel/device/ata.rs index 1088fc8..05606b7 100644 --- a/src/kernel/device/ata.rs +++ b/src/kernel/device/ata.rs @@ -579,6 +579,7 @@ impl Bus { /// # Safety /// /// Must ensure that `lba_start` and `sector` are well-defined + #[allow(clippy::cast_possible_truncation)] unsafe fn read_pio(&mut self, buffer: &mut [u8], role: DriveRole, lba_start: usize, sector_count: usize) -> Result<usize> { if sector_count == 0 { return Ok(0); @@ -592,9 +593,10 @@ impl Bus { for _ in lba_start..(lba_start + sector_count) { self.wait_ready()?; - for chunk in buffer.get_unchecked_mut(buffer_offset..(buffer_offset + BLOCK_SIZE)).chunks_exact(2) { - let word = u16::from(*chunk.get_unchecked(1)) << 8_u8 | u16::from(*chunk.get_unchecked(0)); - self.data.write(word); + for chunk in buffer.get_unchecked_mut(buffer_offset..(buffer_offset + BLOCK_SIZE)).chunks_exact_mut(2) { + let word = self.data.read(); + chunk.get_mut(0).unwrap_unchecked().clone_from(&(word as u8)); + chunk.get_mut(1).unwrap_unchecked().clone_from(&((word >> 8_u8) as u8)); } buffer_offset += BLOCK_SIZE; } -- GitLab