tud-os / nova Goto Github PK
View Code? Open in Web Editor NEWThis project forked from udosteinberg/nova
NOVA Microhypervisor
Home Page: http://hypervisor.org
License: Other
This project forked from udosteinberg/nova
NOVA Microhypervisor
Home Page: http://hypervisor.org
License: Other
The IA32_FEATURE_CONTROL MSR in KVM is not implemented. See vmx_get_vmx_msr and vmx_set_vmx_msr in the Linux kernel code.
Quick workaround:
diff --git a/src/vmx.cpp b/src/vmx.cpp
index 4835dc1..fcd9a5f 100644
--- a/src/vmx.cpp
+++ b/src/vmx.cpp
@@ -101,7 +101,7 @@ Vmcs::Vmcs (mword esp, mword bmp, mword cr3, uint64 eptp) : rev (basic.revision)
void Vmcs::init()
{
- if (!Cpu::feature (Cpu::FEAT_VMX) || (Msr::read<uint32>(Msr::IA32_FEATURE_CONTROL) & 0x5) != 0x5) {
+ if (!Cpu::feature (Cpu::FEAT_VMX)) {
Hip::remove (Hip::FEAT_VMX);
return;
}
We currently never assume that FPU state is preserved across a call to REPLY and a subsequent entry through a portal. The way the code is structured would even make it very hard to find a good usecase for accessing the FPU state left from servicing the last portal call.
Would it make sense to change the semantics of REPLY to not preserve FPU state, i.e. setting fpowner = nullptr on REPLY? It should save a call to fpu->save() in a lot of cases, with no ill side effects, except for the minor tidbit that when a EC accesses the FPU upon serving a subsequent portal call, it will see stale content (if it were to look, which it isn't...).
Currently FPU/SSE/AVX/... instructions in the guest can not be emulated by the VMM, as NOVA does not export vCPU FPU state.
NOVA triggers a KVM failure when booted in qemu-kvm with more than one CPU. 64-bit version fails as well, but silently.
This is with QEMU emulator version 1.0.1 (qemu-kvm-1.0.1) and Linux 3.6.7-4.fc17.x86_64.
julian@workalot build % qemu-kvm -smp 1 -kernel hypervisor-x86_32 -append "spinner serial" -cpu coreduo -serial stdio
NOVA Microhypervisor v5-ecc2057 (x86_32): Nov 28 2012 13:17:08 [gcc 4.7.2]
[ 0] CORE:0:0:0 6:e:8:0 [1] Genuine Intel(R) CPU T2600 @ 2.16GHz
[ 0] Killed EC:0xc13ef200 SC:0xc0010100 V:0x1e CS:0x1b EIP:0x0 CR2:0x0 ERR:0x0 (No ELF)
qemu: terminating on signal 2
julian@workalot build % qemu-kvm -smp 2 -kernel hypervisor-x86_32 -append "spinner serial" -cpu coreduo -serial stdio
NOVA Microhypervisor v5-ecc2057 (x86_32): Nov 28 2012 13:17:08 [gcc 4.7.2]
[ 0] CORE:0:0:0 6:e:8:0 [1] Genuine InKVM internal error. Suberror: 1
emulation failure
EAX=df300a2f EBX=00000094 ECX=00000000 EDX=c000f000
ESI=00202fd8 EDI=00000000 EBP=53f000ff ESP=00202fc0
EIP=00200fea EFL=00010046 [---Z-P-] CPL=0 II=0 A20=1 SMM=0 HLT=0
ES =0023 00000000 ffffffff 00c0f300 DPL=3 DS [-WA]
CS =0008 00000000 ffffffff 00c09b00 DPL=0 CS32 [-RA]
SS =0010 00000000 ffffffff 00c09300 DPL=0 DS [-WA]
DS =0023 00000000 ffffffff 00c0f300 DPL=3 DS [-WA]
FS =0023 00000000 ffffffff 00c0f300 DPL=3 DS [-WA]
GS =0023 00000000 ffffffff 00c0f300 DPL=3 DS [-WA]
LDT=0000 00000000 0000ffff 00008200 DPL=0 LDT
TR =0000 00000000 0000ffff 00008b00 DPL=0 TSS32-busy
GDT= 00200010 00000027
IDT= 00000000 0000ffff
CR0=8001003b CR2=00000000 CR3=0040f000 CR4=00000698
DR0=0000000000000000 DR1=0000000000000000 DR2=0000000000000000 DR3=0000000000000000
DR6=00000000ffff0ff0 DR7=0000000000000400
EFER=0000000000000000
Code=?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? <??> ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
teqemu: terminating on signal 2
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.