genode/repos/ports/lib/mk/spec/muen/virtualbox-muen.mk

24 lines
663 B
Makefile
Raw Normal View History

vbox: Implement hwaccl support for Muen * Implement VMMR0_DO_VMMR0_INIT operation for Muen - Indicate VT-x support - Enable unrestricted guest mode - Set CR[0|4] mask to enable masking of guest CR0.[NE,NW,CD] and CR4.VMXE bits. * Implement VMMR0_DO_GVMM_CREATE_VM on Muen Return error if trying to create SMP VM as VMs with multiple CPUs are currently not supported on hw_x86_64_muen. * Add Muen-specific Mem_region type On hw_x86_64_muen the guest memory layout is static, thus regions are handed out from an array of memory regions. Use sinfo API to calculate the base address of the VM RAM physical 0x0 region. This allows to dynamically modify the VM RAM size by adjusting the Muen policy and Genode vbox files accordingly. Zeroize all memory regions apart from VM Ram since Virtualbox expects these regions to be cleared. * Add Muen subject state struct The subject state encompasses the guest VM machine state that is transfered between Virtualbox and hardware accelerated execution on Muen. * Add Muen-specific Vm_handler class * Use Vm_handler to run VM * Instruct recompiler to flush its code cache * Copy the Muen subject state to/from the Vbox PCPUMCTX. * Use the VM interruptibility state to inform the recompiler whether interrupts are currently inhibited. * Explicitly handle control register access If a VM-exit occurs due to a control register access, handle it and directly continue hardware accelerated execution of guest VM. Note: On NOVA control register accesses are handled by the kernel [1]. [1] - https://github.com/alex-ab/NOVA/blob/master/src/ec_vmx.cpp#L106 * Reset guest interruptibility state Assert that interrupts are not inhibited in the Virtualbox machine state and clear Blocking-by-[STI|MOV to SS] guest interruptibility flags prior to running a guest VM in hwaccel mode. * Set return code depending on exit reason Do not unconditionally emulate the next instruction on VM exit. This makes sharing the VM FPU state with Virtualbox unnecessary, as FPU instructions are not emulated by the recompiler any longer. Also, assert that the FPU has not been used by the recompiler * Inject pending guest VM interrupts on Muen Use mapped subject pending interrupts page of guest VM to perform interrupt injection. IRQs are transferred from the Virtualbox trap manager state to the pending interrupts region for injection. If an IRQ remains pending upon returning to the recompiler, it is copied back to the trap manager state and cleared in the subject interrupts region. * Inform recompiler about changed SYSENTER_[CS|EIP|ESP] values, otherwise values set while running the guest VM hardware accelerated may get lost. * Implement genode_cpu_hz() on Muen Determine the CPU frequency dynamically using the sinfo API. Issue #2016
2015-06-02 17:46:50 +00:00
include $(REP_DIR)/lib/mk/virtualbox-common.inc
#
# Prevent inclusion of the Genode::Log definition after the vbox #define
# of 'Log'. Otherwise, the attemt to compile base/log.h will fail.
#
VBOX_CC_OPT += -include base/log.h
LIBS += stdcxx sinfo-muen
vbox: Implement hwaccl support for Muen * Implement VMMR0_DO_VMMR0_INIT operation for Muen - Indicate VT-x support - Enable unrestricted guest mode - Set CR[0|4] mask to enable masking of guest CR0.[NE,NW,CD] and CR4.VMXE bits. * Implement VMMR0_DO_GVMM_CREATE_VM on Muen Return error if trying to create SMP VM as VMs with multiple CPUs are currently not supported on hw_x86_64_muen. * Add Muen-specific Mem_region type On hw_x86_64_muen the guest memory layout is static, thus regions are handed out from an array of memory regions. Use sinfo API to calculate the base address of the VM RAM physical 0x0 region. This allows to dynamically modify the VM RAM size by adjusting the Muen policy and Genode vbox files accordingly. Zeroize all memory regions apart from VM Ram since Virtualbox expects these regions to be cleared. * Add Muen subject state struct The subject state encompasses the guest VM machine state that is transfered between Virtualbox and hardware accelerated execution on Muen. * Add Muen-specific Vm_handler class * Use Vm_handler to run VM * Instruct recompiler to flush its code cache * Copy the Muen subject state to/from the Vbox PCPUMCTX. * Use the VM interruptibility state to inform the recompiler whether interrupts are currently inhibited. * Explicitly handle control register access If a VM-exit occurs due to a control register access, handle it and directly continue hardware accelerated execution of guest VM. Note: On NOVA control register accesses are handled by the kernel [1]. [1] - https://github.com/alex-ab/NOVA/blob/master/src/ec_vmx.cpp#L106 * Reset guest interruptibility state Assert that interrupts are not inhibited in the Virtualbox machine state and clear Blocking-by-[STI|MOV to SS] guest interruptibility flags prior to running a guest VM in hwaccel mode. * Set return code depending on exit reason Do not unconditionally emulate the next instruction on VM exit. This makes sharing the VM FPU state with Virtualbox unnecessary, as FPU instructions are not emulated by the recompiler any longer. Also, assert that the FPU has not been used by the recompiler * Inject pending guest VM interrupts on Muen Use mapped subject pending interrupts page of guest VM to perform interrupt injection. IRQs are transferred from the Virtualbox trap manager state to the pending interrupts region for injection. If an IRQ remains pending upon returning to the recompiler, it is copied back to the trap manager state and cleared in the subject interrupts region. * Inform recompiler about changed SYSENTER_[CS|EIP|ESP] values, otherwise values set while running the guest VM hardware accelerated may get lost. * Implement genode_cpu_hz() on Muen Determine the CPU frequency dynamically using the sinfo API. Issue #2016
2015-06-02 17:46:50 +00:00
SRC_CC = pgm.cc sup.cc
INC_DIR += $(call select_from_repositories,src/lib/libc)
INC_DIR += $(VBOX_DIR)/Main/xml
INC_DIR += $(VBOX_DIR)/Main/include
vbox: Implement hwaccl support for Muen * Implement VMMR0_DO_VMMR0_INIT operation for Muen - Indicate VT-x support - Enable unrestricted guest mode - Set CR[0|4] mask to enable masking of guest CR0.[NE,NW,CD] and CR4.VMXE bits. * Implement VMMR0_DO_GVMM_CREATE_VM on Muen Return error if trying to create SMP VM as VMs with multiple CPUs are currently not supported on hw_x86_64_muen. * Add Muen-specific Mem_region type On hw_x86_64_muen the guest memory layout is static, thus regions are handed out from an array of memory regions. Use sinfo API to calculate the base address of the VM RAM physical 0x0 region. This allows to dynamically modify the VM RAM size by adjusting the Muen policy and Genode vbox files accordingly. Zeroize all memory regions apart from VM Ram since Virtualbox expects these regions to be cleared. * Add Muen subject state struct The subject state encompasses the guest VM machine state that is transfered between Virtualbox and hardware accelerated execution on Muen. * Add Muen-specific Vm_handler class * Use Vm_handler to run VM * Instruct recompiler to flush its code cache * Copy the Muen subject state to/from the Vbox PCPUMCTX. * Use the VM interruptibility state to inform the recompiler whether interrupts are currently inhibited. * Explicitly handle control register access If a VM-exit occurs due to a control register access, handle it and directly continue hardware accelerated execution of guest VM. Note: On NOVA control register accesses are handled by the kernel [1]. [1] - https://github.com/alex-ab/NOVA/blob/master/src/ec_vmx.cpp#L106 * Reset guest interruptibility state Assert that interrupts are not inhibited in the Virtualbox machine state and clear Blocking-by-[STI|MOV to SS] guest interruptibility flags prior to running a guest VM in hwaccel mode. * Set return code depending on exit reason Do not unconditionally emulate the next instruction on VM exit. This makes sharing the VM FPU state with Virtualbox unnecessary, as FPU instructions are not emulated by the recompiler any longer. Also, assert that the FPU has not been used by the recompiler * Inject pending guest VM interrupts on Muen Use mapped subject pending interrupts page of guest VM to perform interrupt injection. IRQs are transferred from the Virtualbox trap manager state to the pending interrupts region for injection. If an IRQ remains pending upon returning to the recompiler, it is copied back to the trap manager state and cleared in the subject interrupts region. * Inform recompiler about changed SYSENTER_[CS|EIP|ESP] values, otherwise values set while running the guest VM hardware accelerated may get lost. * Implement genode_cpu_hz() on Muen Determine the CPU frequency dynamically using the sinfo API. Issue #2016
2015-06-02 17:46:50 +00:00
INC_DIR += $(VBOX_DIR)/VMM/include
INC_DIR += $(REP_DIR)/src/virtualbox
INC_DIR += $(REP_DIR)/src/virtualbox/frontend
vbox: Implement hwaccl support for Muen * Implement VMMR0_DO_VMMR0_INIT operation for Muen - Indicate VT-x support - Enable unrestricted guest mode - Set CR[0|4] mask to enable masking of guest CR0.[NE,NW,CD] and CR4.VMXE bits. * Implement VMMR0_DO_GVMM_CREATE_VM on Muen Return error if trying to create SMP VM as VMs with multiple CPUs are currently not supported on hw_x86_64_muen. * Add Muen-specific Mem_region type On hw_x86_64_muen the guest memory layout is static, thus regions are handed out from an array of memory regions. Use sinfo API to calculate the base address of the VM RAM physical 0x0 region. This allows to dynamically modify the VM RAM size by adjusting the Muen policy and Genode vbox files accordingly. Zeroize all memory regions apart from VM Ram since Virtualbox expects these regions to be cleared. * Add Muen subject state struct The subject state encompasses the guest VM machine state that is transfered between Virtualbox and hardware accelerated execution on Muen. * Add Muen-specific Vm_handler class * Use Vm_handler to run VM * Instruct recompiler to flush its code cache * Copy the Muen subject state to/from the Vbox PCPUMCTX. * Use the VM interruptibility state to inform the recompiler whether interrupts are currently inhibited. * Explicitly handle control register access If a VM-exit occurs due to a control register access, handle it and directly continue hardware accelerated execution of guest VM. Note: On NOVA control register accesses are handled by the kernel [1]. [1] - https://github.com/alex-ab/NOVA/blob/master/src/ec_vmx.cpp#L106 * Reset guest interruptibility state Assert that interrupts are not inhibited in the Virtualbox machine state and clear Blocking-by-[STI|MOV to SS] guest interruptibility flags prior to running a guest VM in hwaccel mode. * Set return code depending on exit reason Do not unconditionally emulate the next instruction on VM exit. This makes sharing the VM FPU state with Virtualbox unnecessary, as FPU instructions are not emulated by the recompiler any longer. Also, assert that the FPU has not been used by the recompiler * Inject pending guest VM interrupts on Muen Use mapped subject pending interrupts page of guest VM to perform interrupt injection. IRQs are transferred from the Virtualbox trap manager state to the pending interrupts region for injection. If an IRQ remains pending upon returning to the recompiler, it is copied back to the trap manager state and cleared in the subject interrupts region. * Inform recompiler about changed SYSENTER_[CS|EIP|ESP] values, otherwise values set while running the guest VM hardware accelerated may get lost. * Implement genode_cpu_hz() on Muen Determine the CPU frequency dynamically using the sinfo API. Issue #2016
2015-06-02 17:46:50 +00:00
INC_DIR += $(REP_DIR)/src/virtualbox/spec/muen
vpath pgm.cc $(REP_DIR)/src/virtualbox/
vpath sup.cc $(REP_DIR)/src/virtualbox/spec/muen/