Skip to content

Commit

Permalink
Return optional from load kernel call
Browse files Browse the repository at this point in the history
  • Loading branch information
kumargu committed Feb 11, 2021
1 parent 5aa0d12 commit 42f69f2
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 17 deletions.
2 changes: 1 addition & 1 deletion src/kernel/src/loader/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ pub fn load_cmdline(
/// * `kernel image` - An object containing the data of a vmlinux kernel binary
///
/// Returns a vector of program header objects
// #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
pub fn extract_phdrs<F>(kernel_image: &mut F) -> Result<Vec<elf::Elf64_Phdr>>
where
F: Read + Seek,
Expand Down
18 changes: 12 additions & 6 deletions src/vmm/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -307,10 +307,10 @@ pub fn build_microvm_for_boot(
let track_dirty_pages = vm_resources.track_dirty_pages();

#[cfg(target_arch = "aarch64")]
let (entry_addr, _e_phdrs) = load_kernel(boot_config, &guest_memory)?;
let (entry_addr, _e_phdrs) = load_kernel(boot_config, &guest_memory)?;

#[cfg(target_arch = "x86_64")]
let (entry_addr, e_phdrs) = load_kernel(boot_config, &guest_memory)?;
let (entry_addr, e_phdrs) = load_kernel(boot_config, &guest_memory)?;

let initrd = load_initrd_from_config(boot_config, &guest_memory)?;
// Clone the command-line so that a failed boot doesn't pollute the original.
Expand Down Expand Up @@ -373,7 +373,7 @@ pub fn build_microvm_for_boot(
vmm.guest_memory().clone(),
dbg_event_receiver,
dbg_event_sender,
e_phdrs,
e_phdrs.unwrap(),
entry_addr,
&vcpus,
) {
Expand Down Expand Up @@ -504,7 +504,10 @@ pub fn create_guest_memory(
fn load_kernel(
boot_config: &BootConfig,
guest_memory: &GuestMemoryMmap,
) -> std::result::Result<(GuestAddress, Vec<kernel::loader::elf::Elf64_Phdr>), StartMicrovmError> {
) -> std::result::Result<
(GuestAddress, Option<Vec<kernel::loader::elf::Elf64_Phdr>>),
StartMicrovmError,
> {
let mut kernel_file = boot_config
.kernel_file
.try_clone()
Expand All @@ -514,10 +517,13 @@ fn load_kernel(
kernel::loader::load_kernel(guest_memory, &mut kernel_file, arch::get_kernel_start())
.map_err(StartMicrovmError::KernelLoader)?;

#[cfg(target_arch = "aarch64")]
{
Ok((entry_addr, None))
}
// The program headers of the kernel image are necessary in the address translation
// mechanism in the GDB Server thread
let phdrs = kernel::loader::extract_phdrs(&mut kernel_file).unwrap();

let phdrs = Some(kernel::loader::extract_phdrs(&mut kernel_file).unwrap());
Ok((entry_addr, phdrs))
}

Expand Down
20 changes: 10 additions & 10 deletions src/vmm/src/vstate/vcpu/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,17 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the THIRD-PARTY file.

#[allow(unused_imports)]
use crate::gdb_server::{DebugEvent, FullVcpuState};
use crate::{
vmm_config::machine_config::CpuFeaturesTemplate, vstate::vm::Vm, FC_EXIT_CODE_GENERIC_ERROR,
FC_EXIT_CODE_OK,
};
use kvm_bindings::{KVM_SYSTEM_EVENT_RESET, KVM_SYSTEM_EVENT_SHUTDOWN};
use kvm_ioctls::VcpuExit;
use libc::{c_int, c_void, siginfo_t};
use logger::{error, info, IncMetric, METRICS};
use seccomp::{BpfProgram, SeccompFilter};
#[cfg(not(test))]
use std::sync::Barrier;
use std::{
Expand All @@ -16,16 +26,6 @@ use std::{
sync::mpsc::{channel, Receiver, Sender, TryRecvError},
thread,
};
#[allow(unused_imports)]
use crate::gdb_server::{DebugEvent, FullVcpuState};
use crate::{
vmm_config::machine_config::CpuFeaturesTemplate, vstate::vm::Vm, FC_EXIT_CODE_GENERIC_ERROR,
FC_EXIT_CODE_OK,
};
use kvm_bindings::{KVM_SYSTEM_EVENT_RESET, KVM_SYSTEM_EVENT_SHUTDOWN};
use kvm_ioctls::VcpuExit;
use logger::{error, info, IncMetric, METRICS};
use seccomp::{BpfProgram, SeccompFilter};
use utils::{
eventfd::EventFd,
signal::{register_signal_handler, sigrtmin, Killable},
Expand Down

0 comments on commit 42f69f2

Please sign in to comment.