summary refs log tree commit diff
path: root/devices/src/virtio/block.rs
diff options
context:
space:
mode:
authorDaniel Verkamp <dverkamp@chromium.org>2018-08-09 16:51:33 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-08-13 21:58:42 -0700
commit18fa20569fff7fffcc7e62a37b217be00830be13 (patch)
tree21498943397dbf5a12b89f8e50a9ed801880b8d1 /devices/src/virtio/block.rs
parentde9ae03d522d9f134d76cc60a7c49b7c38714423 (diff)
downloadcrosvm-18fa20569fff7fffcc7e62a37b217be00830be13.tar
crosvm-18fa20569fff7fffcc7e62a37b217be00830be13.tar.gz
crosvm-18fa20569fff7fffcc7e62a37b217be00830be13.tar.bz2
crosvm-18fa20569fff7fffcc7e62a37b217be00830be13.tar.lz
crosvm-18fa20569fff7fffcc7e62a37b217be00830be13.tar.xz
crosvm-18fa20569fff7fffcc7e62a37b217be00830be13.tar.zst
crosvm-18fa20569fff7fffcc7e62a37b217be00830be13.zip
devices: block: store features as a u64
This matches other virtio device models (net, p9, vsock) and makes it
easier to add flags conditionally at device creation time.

BUG=chromium:872973
TEST=cargo test -p devices

Change-Id: I65b3f37c220fae44a3f6b397acc6c0eec2b70bf2
Signed-off-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1170305
Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'devices/src/virtio/block.rs')
-rw-r--r--devices/src/virtio/block.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/devices/src/virtio/block.rs b/devices/src/virtio/block.rs
index c828f12..83616ce 100644
--- a/devices/src/virtio/block.rs
+++ b/devices/src/virtio/block.rs
@@ -344,6 +344,7 @@ pub struct Block<T: DiskFile> {
     kill_evt: Option<EventFd>,
     disk_image: Option<T>,
     config_space: Vec<u8>,
+    avail_features: u64,
 }
 
 fn build_config_space(disk_size: u64) -> Vec<u8> {
@@ -370,10 +371,14 @@ impl<T: DiskFile> Block<T> {
                   disk_size,
                   SECTOR_SIZE);
         }
+
+        let mut avail_features: u64 = 1 << VIRTIO_BLK_F_FLUSH;
+
         Ok(Block {
                kill_evt: None,
                disk_image: Some(disk_image),
                config_space: build_config_space(disk_size),
+               avail_features,
            })
     }
 }
@@ -400,7 +405,8 @@ impl<T: 'static + AsRawFd + DiskFile + Send> VirtioDevice for Block<T> {
 
     fn features(&self, page: u32) -> u32 {
         match page {
-            0 => 1 << VIRTIO_BLK_F_FLUSH,
+            0 => self.avail_features as u32,
+            1 => (self.avail_features >> 32) as u32,
             _ => 0,
         }
     }