瀏覽代碼

Wait for queue_ready to read back as 0 before continuing to reset queue.

Andrew Walbran 2 年之前
父節點
當前提交
1b03bca112
共有 1 個文件被更改,包括 4 次插入0 次删除
  1. 4 0
      src/transport/mmio.rs

+ 4 - 0
src/transport/mmio.rs

@@ -447,7 +447,11 @@ impl Transport for MmioTransport {
                 // Safe because self.header points to a valid VirtIO MMIO region.
                 unsafe {
                     volwrite!(self.header, queue_sel, queue.into());
+
                     volwrite!(self.header, queue_ready, 0);
+                    // Wait until we read the same value back, to ensure synchronisation (see 4.2.2.2).
+                    while volread!(self.header, queue_ready) != 0 {}
+
                     volwrite!(self.header, queue_num, 0);
                     volwrite!(self.header, queue_desc_low, 0);
                     volwrite!(self.header, queue_desc_high, 0);