summary refs log tree commit diff
path: root/x86_64
diff options
context:
space:
mode:
Diffstat (limited to 'x86_64')
-rw-r--r--x86_64/src/bzimage.rs3
-rw-r--r--x86_64/src/lib.rs6
-rw-r--r--x86_64/src/mptable.rs28
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]