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