diff options
author | Dylan Reid <dgreid@chromium.org> | 2017-11-06 14:06:58 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-12-08 00:37:01 -0800 |
commit | 2415ef6988700f796b46c62cc5462ba9e7d1ded2 (patch) | |
tree | ce1c926aa86caed6ff2e96b589918114ef2533a5 /sys_util/src/guest_memory.rs | |
parent | fedb675ed52b8e54f78d80b9938c98746e888b37 (diff) | |
download | crosvm-2415ef6988700f796b46c62cc5462ba9e7d1ded2.tar crosvm-2415ef6988700f796b46c62cc5462ba9e7d1ded2.tar.gz crosvm-2415ef6988700f796b46c62cc5462ba9e7d1ded2.tar.bz2 crosvm-2415ef6988700f796b46c62cc5462ba9e7d1ded2.tar.lz crosvm-2415ef6988700f796b46c62cc5462ba9e7d1ded2.tar.xz crosvm-2415ef6988700f796b46c62cc5462ba9e7d1ded2.tar.zst crosvm-2415ef6988700f796b46c62cc5462ba9e7d1ded2.zip |
sys_util: Add ability to madvise a region
Add functions to let the kernel know a given range of memory isn't needed currently. This function will result in `madvise(DONTNEED)`. The ability to signal memory as not needed will be used by the balloon driver to allow system memory to be redistributed away from the VM. Change-Id: I4ca56e09010eec33989824f5738db4a4be0ec428 Signed-off-by: Dylan Reid <dgreid@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/759305 Reviewed-by: Zach Reizner <zachr@chromium.org>
Diffstat (limited to 'sys_util/src/guest_memory.rs')
-rw-r--r-- | sys_util/src/guest_memory.rs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/sys_util/src/guest_memory.rs b/sys_util/src/guest_memory.rs index 8e2dd97..2a849e9 100644 --- a/sys_util/src/guest_memory.rs +++ b/sys_util/src/guest_memory.rs @@ -105,6 +105,15 @@ impl GuestMemory { self.regions.len() } + /// Madvise away the address range in the host that is associated with the given guest range. + pub fn dont_need_range(&self, addr: GuestAddress, count: usize) -> Result<()> { + self.do_in_region(addr, move |mapping, offset| { + mapping + .dont_need_range(offset, count) + .map_err(|e| Error::MemoryAccess(addr, e)) + }) + } + /// Perform the specified action on each region's addresses. pub fn with_regions<F, E>(&self, cb: F) -> result::Result<(), E> where F: Fn(usize, GuestAddress, usize, usize) -> result::Result<(), E> |