I have some idea about the ARM KVM.
I have register a project ,named"arm-kvm", to port KVM to arm.
I'll kick off the ARM KVM porting next week.
This is my plan:
step 1 Make a guest linux run on the Hypervisor-linux.
From the Hypervisor-linux's viewpoint, The guest is a thread of him. which is like the X86 KVM.But,In this step,the guest-linux has no IO. It is based on roofs. The physical memroy is allocated to the guest os at creating time. The guest-linux still run in the privileged mode,which handle the user mode memory exeception ,SWI system call ... But the guest-linux will not touch the hardware devices.The physical interrupt should be controlled by Hypervisor-linux. So the Hypervisor-linux can switch it off when interrupt happens. And the Hypervisor-linux will provide some vitual system devices like system timer and interrupt controller for guest.
Because lack of hardware support,The guest linux should know when to exit,for exemple the idle time,the kernel panic, the guest should voluntarily exit VM --which is like a thread switch.
so there is another job: modification of Hypervisor-linux to support arm,and modification of qemu for arm KVM
step 2 Make guest IO work
The guest should have IO functions.Of course, IT is the virtIO. we should make the virtIO work on the arm kvm.The arm has no hardware virtualization extension like intel VT. But,In the guest virtIO driver, when need start IO,the guest should voluntarily exit VM--so it like IO-exit of the intel VT.
step 3 add memory virtualization for guest
just make the guest run in the user modeïporting the x86 kvm memory virtualization function for arm kvm,and so on. But I think we should keep the work mode of step 1 as a option for user. sometime, I think the guest handle the physical memory directly is not a bad thing.
step 4 use the trustzone
from arm V6, there is a hardware extension of trustzone. We can make use of it. let the Hypervisor-linux run int the monitor state,the guest run in the non-security state. But,the guest os run as normal--linux kernel in the privileged mode,the user program in the user mode.So architecture is more elegant.
step5 more guest os
the work mode of step 1 has the advantage: we don't need modify the guest much,which make port wince,symbain possible. for, you know,we don't have so much source codes for those os.
welcome join the "arm-kvm" team. thanks