diff options
author | Daniel Verkamp <dverkamp@chromium.org> | 2019-03-15 14:22:17 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-03-28 19:04:10 -0700 |
commit | e6c6cc908ecfa6ccc06cf9e05f90f238cd95881b (patch) | |
tree | ebead2c8aa4433872180819ef3bfff0c1c45be58 /devices/src/virtio/block.rs | |
parent | 85fa41f7b2b74fafa15660de09b6d20e4341be8b (diff) | |
download | crosvm-e6c6cc908ecfa6ccc06cf9e05f90f238cd95881b.tar crosvm-e6c6cc908ecfa6ccc06cf9e05f90f238cd95881b.tar.gz crosvm-e6c6cc908ecfa6ccc06cf9e05f90f238cd95881b.tar.bz2 crosvm-e6c6cc908ecfa6ccc06cf9e05f90f238cd95881b.tar.lz crosvm-e6c6cc908ecfa6ccc06cf9e05f90f238cd95881b.tar.xz crosvm-e6c6cc908ecfa6ccc06cf9e05f90f238cd95881b.tar.zst crosvm-e6c6cc908ecfa6ccc06cf9e05f90f238cd95881b.zip |
devices: block: report block size in config
Set up the infrastructure for reporting block size in the virtio-blk device model. For now, we'll keep reporting SECTOR_SIZE (512), which is the default block size that is assumed if we don't report it. This prepares us to easily switch the reported block size in the future. BUG=chromium:942700 TEST=Boot Crostini on nami with an existing VM and container Change-Id: I983817743c40e8278fe6cb9a10498011a8887ec9 Signed-off-by: Daniel Verkamp <dverkamp@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1526334 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'devices/src/virtio/block.rs')
-rw-r--r-- | devices/src/virtio/block.rs | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/devices/src/virtio/block.rs b/devices/src/virtio/block.rs index 3c5d2fd..71e7e4b 100644 --- a/devices/src/virtio/block.rs +++ b/devices/src/virtio/block.rs @@ -52,6 +52,7 @@ const VIRTIO_BLK_S_IOERR: u8 = 1; const VIRTIO_BLK_S_UNSUPP: u8 = 2; const VIRTIO_BLK_F_RO: u32 = 5; +const VIRTIO_BLK_F_BLK_SIZE: u32 = 6; const VIRTIO_BLK_F_FLUSH: u32 = 9; const VIRTIO_BLK_F_DISCARD: u32 = 13; const VIRTIO_BLK_F_WRITE_ZEROES: u32 = 14; @@ -825,6 +826,7 @@ fn build_config_space(disk_size: u64) -> virtio_blk_config { virtio_blk_config { // If the image is not a multiple of the sector size, the tail bits are not exposed. capacity: Le64::from(disk_size >> SECTOR_SHIFT), + blk_size: Le32::from(SECTOR_SIZE as u32), max_discard_sectors: Le32::from(MAX_DISCARD_SECTORS), discard_sector_alignment: Le32::from(DISCARD_SECTOR_ALIGNMENT), max_write_zeroes_sectors: Le32::from(MAX_WRITE_ZEROES_SECTORS), @@ -862,6 +864,7 @@ impl<T: DiskFile> Block<T> { avail_features |= 1 << VIRTIO_BLK_F_WRITE_ZEROES; } avail_features |= 1 << VIRTIO_F_VERSION_1; + avail_features |= 1 << VIRTIO_BLK_F_BLK_SIZE; Ok(Block { kill_evt: None, @@ -1019,8 +1022,8 @@ mod tests { let f = File::create(&path).unwrap(); let b = Block::new(f, false, None).unwrap(); // writable device should set VIRTIO_BLK_F_FLUSH + VIRTIO_BLK_F_DISCARD - // + VIRTIO_BLK_F_WRITE_ZEROES + VIRTIO_F_VERSION_1 - assert_eq!(0x100006200, b.features()); + // + VIRTIO_BLK_F_WRITE_ZEROES + VIRTIO_F_VERSION_1 + VIRTIO_BLK_F_BLK_SIZE + assert_eq!(0x100006240, b.features()); } // read-only block device @@ -1028,8 +1031,8 @@ mod tests { let f = File::create(&path).unwrap(); let b = Block::new(f, true, None).unwrap(); // read-only device should set VIRTIO_BLK_F_FLUSH and VIRTIO_BLK_F_RO - // + VIRTIO_F_VERSION_1 - assert_eq!(0x100000220, b.features()); + // + VIRTIO_F_VERSION_1 + VIRTIO_BLK_F_BLK_SIZE + assert_eq!(0x100000260, b.features()); } } |