diff options
author | Gurchetan Singh <gurchetansingh@chromium.org> | 2020-05-21 18:05:06 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-06-12 05:00:37 +0000 |
commit | 173fe62df2b82f4d09a36066200f0a1727bd1d22 (patch) | |
tree | c3c0588afebd0b43811b3631c1d94168ba72c420 /vm_control | |
parent | 4ffb3d06bdadcfcb79ee2b7bf445ac09da34c218 (diff) | |
download | crosvm-173fe62df2b82f4d09a36066200f0a1727bd1d22.tar crosvm-173fe62df2b82f4d09a36066200f0a1727bd1d22.tar.gz crosvm-173fe62df2b82f4d09a36066200f0a1727bd1d22.tar.bz2 crosvm-173fe62df2b82f4d09a36066200f0a1727bd1d22.tar.lz crosvm-173fe62df2b82f4d09a36066200f0a1727bd1d22.tar.xz crosvm-173fe62df2b82f4d09a36066200f0a1727bd1d22.tar.zst crosvm-173fe62df2b82f4d09a36066200f0a1727bd1d22.zip |
kvm: use MappedRegion trait
- Reduces code duplication between MMIO and mmap arenas - Makes adding future types easier - Makes upcoming deprecation of kvm crate easier - Use BTreeMap instead of HashMap since it's more efficient BUG=chromium:924405 TEST=compile and test Change-Id: I520abed0926489e64aac046e0dc0cfeb72fae7b2 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2216446 Tested-by: Gurchetan Singh <gurchetansingh@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org> Reviewed-by: Steven Richman <srichman@google.com> Reviewed-by: Daniel Verkamp <dverkamp@chromium.org> Auto-Submit: Gurchetan Singh <gurchetansingh@chromium.org>
Diffstat (limited to 'vm_control')
-rw-r--r-- | vm_control/src/lib.rs | 30 |
1 files changed, 8 insertions, 22 deletions
diff --git a/vm_control/src/lib.rs b/vm_control/src/lib.rs index 1d06e4b..f7514c2 100644 --- a/vm_control/src/lib.rs +++ b/vm_control/src/lib.rs @@ -21,9 +21,7 @@ use libc::{EINVAL, EIO, ENODEV}; use kvm::{IrqRoute, IrqSource, Vm}; use msg_socket::{MsgError, MsgOnSocket, MsgReceiver, MsgResult, MsgSender, MsgSocket}; use resources::{Alloc, GpuMemoryDesc, MmioType, SystemAllocator}; -use sys_util::{ - error, Error as SysError, EventFd, GuestAddress, MappedRegion, MemoryMapping, MmapError, Result, -}; +use sys_util::{error, Error as SysError, EventFd, GuestAddress, MemoryMapping, MmapError, Result}; /// A file descriptor either borrowed or owned by this. #[derive(Debug)] @@ -307,7 +305,7 @@ impl VmMemoryRequest { Err(e) => VmMemoryResponse::Err(e), } } - UnregisterMemory(slot) => match vm.remove_mmio_memory(slot) { + UnregisterMemory(slot) => match vm.remove_memory_region(slot) { Ok(_) => VmMemoryResponse::Ok, Err(e) => VmMemoryResponse::Err(e), }, @@ -349,7 +347,7 @@ impl VmMemoryRequest { Ok(v) => v, Err(_e) => return VmMemoryResponse::Err(SysError::new(EINVAL)), }; - match vm.add_mmio_memory(GuestAddress(gpa), mmap, false, false) { + match vm.add_memory_region(GuestAddress(gpa), Box::new(mmap), false, false) { Ok(_) => VmMemoryResponse::Ok, Err(e) => VmMemoryResponse::Err(e), } @@ -481,19 +479,10 @@ impl VmMsyncRequest { pub fn execute(&self, vm: &mut Vm) -> VmMsyncResponse { use self::VmMsyncRequest::*; match *self { - MsyncArena { slot, offset, size } => { - if let Some(arena) = vm.get_mmap_arena(slot) { - match MappedRegion::msync(arena, offset, size) { - Ok(()) => VmMsyncResponse::Ok, - Err(e) => match e { - MmapError::SystemCallFailed(errno) => VmMsyncResponse::Err(errno), - _ => VmMsyncResponse::Err(SysError::new(EINVAL)), - }, - } - } else { - VmMsyncResponse::Err(SysError::new(EINVAL)) - } - } + MsyncArena { slot, offset, size } => match vm.mysnc_memory_region(slot, offset, size) { + Ok(()) => VmMsyncResponse::Ok, + Err(e) => VmMsyncResponse::Err(e), + }, } } } @@ -598,10 +587,7 @@ fn register_memory( _ => return Err(SysError::new(EINVAL)), }; - let slot = match vm.add_mmio_memory(GuestAddress(addr), mmap, false, false) { - Ok(v) => v, - Err(e) => return Err(e), - }; + let slot = vm.add_memory_region(GuestAddress(addr), Box::new(mmap), false, false)?; Ok((addr >> 12, slot)) } |