diff --git a/src/drivers/virtio/transport/pci.rs b/src/drivers/virtio/transport/pci.rs index 5ab2fbdc86..5bec462fd7 100644 --- a/src/drivers/virtio/transport/pci.rs +++ b/src/drivers/virtio/transport/pci.rs @@ -528,19 +528,19 @@ impl ComCfg { // Indicate device to show high 32 bits in device_feature field. // See Virtio specification v1.1. - 4.1.4.3 memory_barrier(); - self.com_cfg.device_feature_select = 1; + unsafe { ptr::from_mut(&mut self.com_cfg.device_feature_select).write_volatile(1) }; memory_barrier(); // read high 32 bits of device features - let mut dev_feat = u64::from(self.com_cfg.device_feature) << 32; + let mut dev_feat = u64::from(unsafe { ptr::from_mut(&mut self.com_cfg.device_feature).read_volatile() }) << 32; // Indicate device to show low 32 bits in device_feature field. // See Virtio specification v1.1. - 4.1.4.3 - self.com_cfg.device_feature_select = 0; + unsafe { ptr::from_mut(&mut self.com_cfg.device_feature_select).write_volatile(0) }; memory_barrier(); // read low 32 bits of device features - dev_feat |= u64::from(self.com_cfg.device_feature); + dev_feat |= u64::from(unsafe { ptr::from_mut(&mut self.com_cfg.device_feature).read_volatile() }); dev_feat }