From 745d8818e12f5f61e2f781928df9e603b09f5dfd Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Tue, 27 Aug 2019 21:16:58 -0600 Subject: [PATCH] Read completion using ptr::read_volatile --- nvmed/src/nvme.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/nvmed/src/nvme.rs b/nvmed/src/nvme.rs index 66590b3488..9b37fd3f65 100644 --- a/nvmed/src/nvme.rs +++ b/nvmed/src/nvme.rs @@ -1,4 +1,4 @@ -use std::thread; +use std::{ptr, thread}; use std::collections::BTreeMap; use syscall::io::{Dma, Io, Mmio}; use syscall::error::{Error, Result, EINVAL}; @@ -239,7 +239,9 @@ impl NvmeCompQueue { } fn complete(&mut self) -> Option<(usize, NvmeComp)> { - let entry = self.data[self.i]; + let entry = unsafe { + ptr::read_volatile(self.data.as_ptr().add(self.i)) + }; if ((entry.status & 1) == 1) == self.phase { self.i = (self.i + 1) % self.data.len(); if self.i == 0 {