ahcid: spin for all requests

This commit is contained in:
Jeremy Soller
2024-02-15 16:00:52 -07:00
parent 74a64bf2bb
commit 40e2189e22
+14 -2
View File
@@ -142,11 +142,23 @@ impl Disk for DiskATA {
}
fn read(&mut self, block: u64, buffer: &mut [u8]) -> Result<Option<usize>> {
self.request(block, BufferKind::Read(buffer))
//TODO: FIGURE OUT WHY INTERRUPTS CAUSE HANGS
loop {
match self.request(block, BufferKind::Read(buffer))? {
Some(count) => return Ok(Some(count)),
None => std::thread::yield_now()
}
}
}
fn write(&mut self, block: u64, buffer: &[u8]) -> Result<Option<usize>> {
self.request(block, BufferKind::Write(buffer))
//TODO: FIGURE OUT WHY INTERRUPTS CAUSE HANGS
loop {
match self.request(block, BufferKind::Write(buffer))? {
Some(count) => return Ok(Some(count)),
None => std::thread::yield_now()
}
}
}
fn block_length(&mut self) -> Result<u32> {