wip
This commit is contained in:
@ -158,7 +158,7 @@ pub extern "sysv64" fn main(boot_info: &nel_os_common::BootInfo) {
|
|||||||
info!("Interrupts enabled");
|
info!("Interrupts enabled");
|
||||||
|
|
||||||
let mut vcpu = vmm::get_vcpu(&mut bitmap_table).unwrap();
|
let mut vcpu = vmm::get_vcpu(&mut bitmap_table).unwrap();
|
||||||
vcpu.run();
|
vcpu.run().unwrap();
|
||||||
|
|
||||||
info!("VCpu initialized");
|
info!("VCpu initialized");
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ pub fn setup_exec_controls() -> Result<(), &'static str> {
|
|||||||
let mut pin_exec_ctrl = vmcs::controls::PinBasedVmExecutionControls::from(raw_pin_exec_ctrl);
|
let mut pin_exec_ctrl = vmcs::controls::PinBasedVmExecutionControls::from(raw_pin_exec_ctrl);
|
||||||
pin_exec_ctrl.set_external_interrupt_exiting(false);
|
pin_exec_ctrl.set_external_interrupt_exiting(false);
|
||||||
|
|
||||||
pin_exec_ctrl.write();
|
pin_exec_ctrl.write()?;
|
||||||
|
|
||||||
let mut raw_primary_exec_ctrl =
|
let mut raw_primary_exec_ctrl =
|
||||||
u32::from(vmcs::controls::PrimaryProcessorBasedVmExecutionControls::read()?);
|
u32::from(vmcs::controls::PrimaryProcessorBasedVmExecutionControls::read()?);
|
||||||
@ -40,7 +40,7 @@ pub fn setup_exec_controls() -> Result<(), &'static str> {
|
|||||||
primary_exec_ctrl.set_unconditional_io(false);
|
primary_exec_ctrl.set_unconditional_io(false);
|
||||||
primary_exec_ctrl.set_use_io_bitmap(false); // TODO: true
|
primary_exec_ctrl.set_use_io_bitmap(false); // TODO: true
|
||||||
|
|
||||||
primary_exec_ctrl.write();
|
primary_exec_ctrl.write()?;
|
||||||
|
|
||||||
let mut raw_secondary_exec_ctrl =
|
let mut raw_secondary_exec_ctrl =
|
||||||
u32::from(vmcs::controls::SecondaryProcessorBasedVmExecutionControls::read()?);
|
u32::from(vmcs::controls::SecondaryProcessorBasedVmExecutionControls::read()?);
|
||||||
@ -59,7 +59,7 @@ pub fn setup_exec_controls() -> Result<(), &'static str> {
|
|||||||
secondary_exec_ctrl.set_unrestricted_guest(false); //TODO: true
|
secondary_exec_ctrl.set_unrestricted_guest(false); //TODO: true
|
||||||
secondary_exec_ctrl.set_virtualize_apic_accesses(false); // TODO: true
|
secondary_exec_ctrl.set_virtualize_apic_accesses(false); // TODO: true
|
||||||
|
|
||||||
secondary_exec_ctrl.write();
|
secondary_exec_ctrl.write()?;
|
||||||
|
|
||||||
vmwrite(0x6000, u64::MAX)?;
|
vmwrite(0x6000, u64::MAX)?;
|
||||||
vmwrite(0x6002, u64::MAX)?;
|
vmwrite(0x6002, u64::MAX)?;
|
||||||
@ -84,7 +84,7 @@ pub fn setup_entry_controls() -> Result<(), &'static str> {
|
|||||||
entry_ctrl.set_load_ia32_efer(true);
|
entry_ctrl.set_load_ia32_efer(true);
|
||||||
entry_ctrl.set_load_ia32_pat(true);
|
entry_ctrl.set_load_ia32_pat(true);
|
||||||
|
|
||||||
entry_ctrl.write();
|
entry_ctrl.write()?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -108,7 +108,7 @@ pub fn setup_exit_controls() -> Result<(), &'static str> {
|
|||||||
exit_ctrl.set_load_ia32_efer(true);
|
exit_ctrl.set_load_ia32_efer(true);
|
||||||
exit_ctrl.set_load_ia32_pat(true);
|
exit_ctrl.set_load_ia32_pat(true);
|
||||||
|
|
||||||
exit_ctrl.write();
|
exit_ctrl.write()?;
|
||||||
|
|
||||||
vmwrite(0x4004, 1u64 << 6)?; // EXCEPTION_BITMAP
|
vmwrite(0x4004, 1u64 << 6)?; // EXCEPTION_BITMAP
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ impl IntelVCpu {
|
|||||||
fn activate(&mut self) -> Result<(), &'static str> {
|
fn activate(&mut self) -> Result<(), &'static str> {
|
||||||
let revision_id = common::read_msr(0x480) as u32;
|
let revision_id = common::read_msr(0x480) as u32;
|
||||||
self.vmcs.write_revision_id(revision_id);
|
self.vmcs.write_revision_id(revision_id);
|
||||||
self.vmcs.reset();
|
self.vmcs.reset()?;
|
||||||
controls::setup_exec_controls()?;
|
controls::setup_exec_controls()?;
|
||||||
controls::setup_entry_controls()?;
|
controls::setup_entry_controls()?;
|
||||||
controls::setup_exit_controls()?;
|
controls::setup_exit_controls()?;
|
||||||
|
Reference in New Issue
Block a user