seoul: dummy 'control register access' VM exit handler

This exit handler is called by the NOVA kernel now when the VM uses PAE
with nested paging and the PDPTE registers need to get updated. With this
commit, an error message is printed if this situation occurs.

Fixes #1640
This commit is contained in:
Christian Prochaska 2015-07-27 12:38:35 +02:00 committed by Christian Helmuth
parent 4c19576d4e
commit a574f73005
3 changed files with 22 additions and 3 deletions

View File

@ -1 +1 @@
8e3190c4e76643db3dfb18ea84597ba1bbd2c218
06deb9c426754ba1ba028e056bcd33a1b47d2d0b

View File

@ -3,8 +3,8 @@ VERSION := git
DOWNLOADS := seoul.git
URL(seoul) := https://github.com/alex-ab/seoul.git
# branch pae - containing smp and vbios patches
REV(seoul) := 4c82009d2da7b771c6402d7cdaf3f65cdc6fde62
# branch genode_15_08 - containing smp and vbios patches
REV(seoul) := 5522d06563fa09a532e0e69e845866bd21605fa2
DIR(seoul) := src/app/seoul
#

View File

@ -663,6 +663,23 @@ class Vcpu_dispatcher : public Vcpu_handler,
_handle_vcpu(SKIP, CpuMessage::TYPE_WRMSR);
}
/*
* This VM exit is in part handled by the NOVA kernel (writing the CR
* register) and in part by Seoul (updating the PDPTE registers,
* which requires access to the guest physical memory).
* Intel manual sections 4.4.1 of Vol. 3A and 26.3.2.4 of Vol. 3C
* indicate the conditions when the PDPTE registers need to get
* updated.
*
* XXX: not implemented yet
*
*/
void _vmx_mov_crx()
{
Logging::panic("%s: not implemented, but needed for VMs using PAE "
"with nested paging.", __PRETTY_FUNCTION__);
}
/**
* Shortcut for calling 'Vmm::Vcpu_dispatcher::register_handler'
* with 'Vcpu_dispatcher' as template argument
@ -747,6 +764,8 @@ class Vcpu_dispatcher : public Vcpu_handler,
(exc_base, MTD_RIP_LEN | MTD_GPR_ACDB | MTD_TSC | MTD_STATE);
_register_handler<18, &This::_vmx_vmcall>
(exc_base, MTD_RIP_LEN | MTD_GPR_ACDB);
_register_handler<28, &This::_vmx_mov_crx>
(exc_base, MTD_ALL);
_register_handler<30, &This::_vmx_ioio>
(exc_base, MTD_RIP_LEN | MTD_QUAL | MTD_GPR_ACDB | MTD_STATE | MTD_RFLAGS);
_register_handler<31, &This::_vmx_msr_read>