diff options
Diffstat (limited to 'x86_64')
-rw-r--r-- | x86_64/src/bzimage.rs | 3 | ||||
-rw-r--r-- | x86_64/src/lib.rs | 6 | ||||
-rw-r--r-- | x86_64/src/mptable.rs | 28 |
3 files changed, 15 insertions, 22 deletions
diff --git a/x86_64/src/bzimage.rs b/x86_64/src/bzimage.rs index 16a7338..d43d405 100644 --- a/x86_64/src/bzimage.rs +++ b/x86_64/src/bzimage.rs @@ -7,6 +7,7 @@ use std::fmt::{self, Display}; use std::io::{Read, Seek, SeekFrom}; +use std::os::unix::io::AsRawFd; use sys_util::{GuestAddress, GuestMemory}; @@ -57,7 +58,7 @@ pub fn load_bzimage<F>( kernel_image: &mut F, ) -> Result<(boot_params, u64)> where - F: Read + Seek, + F: Read + Seek + AsRawFd, { let mut params: boot_params = Default::default(); kernel_image diff --git a/x86_64/src/lib.rs b/x86_64/src/lib.rs index 837dac4..3fe8d69 100644 --- a/x86_64/src/lib.rs +++ b/x86_64/src/lib.rs @@ -441,11 +441,11 @@ impl X8664arch { /// /// * `mem` - The memory to be used by the guest. /// * `kernel_image` - the File object for the specified kernel. - fn load_kernel(mem: &GuestMemory, mut kernel_image: &mut File) -> Result<(boot_params, u64)> { + fn load_kernel(mem: &GuestMemory, kernel_image: &mut File) -> Result<(boot_params, u64)> { let elf_result = - kernel_loader::load_kernel(mem, GuestAddress(KERNEL_START_OFFSET), &mut kernel_image); + kernel_loader::load_kernel(mem, GuestAddress(KERNEL_START_OFFSET), kernel_image); if elf_result == Err(kernel_loader::Error::InvalidElfMagicNumber) { - bzimage::load_bzimage(mem, GuestAddress(KERNEL_START_OFFSET), &mut kernel_image) + bzimage::load_bzimage(mem, GuestAddress(KERNEL_START_OFFSET), kernel_image) .map_err(Error::LoadBzImage) } else { let kernel_end = elf_result.map_err(Error::LoadKernel)?; diff --git a/x86_64/src/mptable.rs b/x86_64/src/mptable.rs index c2def2f..8b754bd 100644 --- a/x86_64/src/mptable.rs +++ b/x86_64/src/mptable.rs @@ -3,13 +3,13 @@ // found in the LICENSE file. use std::fmt::{self, Display}; -use std::io; use std::mem; use std::result; use std::slice; use libc::c_char; +use data_model::VolatileMemory; use devices::PciInterruptPin; use sys_util::{GuestAddress, GuestMemory}; @@ -135,8 +135,9 @@ pub fn setup_mptable( return Err(Error::AddressOverflow); } - mem.read_to_memory(base_mp, &mut io::repeat(0), mp_size) - .map_err(|_| Error::Clear)?; + mem.get_slice(base_mp.0, mp_size as u64) + .map_err(|_| Error::Clear)? + .write_bytes(0); { let size = mem::size_of::<mpf_intel>(); @@ -400,23 +401,14 @@ mod tests { let mpc_offset = GuestAddress(mpf_intel.physptr as u64); let mpc_table: mpc_table = mem.read_obj_from_addr(mpc_offset).unwrap(); - struct Sum(u8); - impl io::Write for Sum { - fn write(&mut self, buf: &[u8]) -> io::Result<usize> { - for v in buf.iter() { - self.0 = self.0.wrapping_add(*v); - } - Ok(buf.len()) - } - fn flush(&mut self) -> io::Result<()> { - Ok(()) - } + let mut buf = vec![0; mpc_table.length as usize]; + mem.read_at_addr(&mut buf[..], mpc_offset).unwrap(); + let mut sum: u8 = 0; + for &v in &buf { + sum = sum.wrapping_add(v); } - let mut sum = Sum(0); - mem.write_from_memory(mpc_offset, &mut sum, mpc_table.length as usize) - .unwrap(); - assert_eq!(sum.0, 0); + assert_eq!(sum, 0); } #[test] |