Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
- \[[#307](https://github.com/rust-vmm/vm-memory/pull/304)\] Move `read_volatile_from`, `read_exact_volatile_from`,
`write_volatile_to` and `write_all_volatile_to` functions from the `GuestMemory` trait to the `Bytes` trait.

- \[#324](https:////github.com/rust-vmm/vm-memory/pull/324)\] `GuestMemoryRegion::bitmap()` now returns a `BitmapSlice`. Accessing the full bitmap is now possible only if the type of the memory region is know, for example with `MmapRegion::bitmap()`.

### Removed

- \[[#307](https://github.com/rust-vmm/vm-memory/pull/304)\] Remove deprecated functions `Bytes::read_from`, `Bytes::read_exact_from`,
Expand Down
12 changes: 6 additions & 6 deletions src/bitmap/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -293,13 +293,13 @@ pub(crate) mod tests {

let slice = region.get_slice(dirty_addr, dirty_len).unwrap();

assert!(range_is_clean(region.bitmap(), 0, region.len() as usize));
assert!(range_is_clean(&region.bitmap(), 0, region.len() as usize));
assert!(range_is_clean(slice.bitmap(), 0, dirty_len));

region.write_obj(val, dirty_addr).unwrap();

assert!(range_is_dirty(
region.bitmap(),
&region.bitmap(),
dirty_addr.0 as usize,
dirty_len
));
Expand All @@ -312,7 +312,7 @@ pub(crate) mod tests {
test_bytes(
region,
|r: &R, start: usize, len: usize, clean: bool| {
check_range(r.bitmap(), start, len, clean)
check_range(&r.bitmap(), start, len, clean)
},
|offset| MemoryRegionAddress(offset as u64),
0x1000,
Expand All @@ -334,13 +334,13 @@ pub(crate) mod tests {
let (region, region_addr) = m.to_region_addr(dirty_addr).unwrap();
let slice = m.get_slice(dirty_addr, dirty_len).unwrap();

assert!(range_is_clean(region.bitmap(), 0, region.len() as usize));
assert!(range_is_clean(&region.bitmap(), 0, region.len() as usize));
assert!(range_is_clean(slice.bitmap(), 0, dirty_len));

m.write_obj(val, dirty_addr).unwrap();

assert!(range_is_dirty(
region.bitmap(),
&region.bitmap(),
region_addr.0 as usize,
dirty_len
));
Expand All @@ -354,7 +354,7 @@ pub(crate) mod tests {
let check_range_closure = |m: &M, start: usize, len: usize, clean: bool| -> bool {
let mut check_result = true;
m.try_access(len, GuestAddress(start as u64), |_, size, reg_addr, reg| {
if !check_range(reg.bitmap(), reg_addr.0 as usize, size, clean) {
if !check_range(&reg.bitmap(), reg_addr.0 as usize, size, clean) {
check_result = false;
}
Ok(size)
Expand Down
2 changes: 1 addition & 1 deletion src/guest_memory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ pub trait GuestMemoryRegion: Bytes<MemoryRegionAddress, E = Error> {
}

/// Borrow the associated `Bitmap` object.
fn bitmap(&self) -> &Self::B;
fn bitmap(&self) -> BS<'_, Self::B>;

/// Returns the given address if it is within this region.
fn check_address(&self, addr: MemoryRegionAddress) -> Option<MemoryRegionAddress> {
Expand Down
4 changes: 2 additions & 2 deletions src/mmap/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -327,8 +327,8 @@ impl<B: Bitmap> GuestMemoryRegion for GuestRegionMmap<B> {
self.guest_base
}

fn bitmap(&self) -> &Self::B {
self.mapping.bitmap()
fn bitmap(&self) -> BS<'_, Self::B> {
self.mapping.bitmap().slice_at(0)
}

fn get_host_address(&self, addr: MemoryRegionAddress) -> guest_memory::Result<*mut u8> {
Expand Down