On Sunday 08 February 2015 13:24:36 Justin Cormack wrote: > On 3 February 2015 at 20:33, Sergio L. Pascual <slp%sinrega.org@localhost> wrote: > > This board is interesting for two reasons: is a well supported ARMv7 > > platform within QEMU, and it's a first step towards running NetBSD/evbarm > > as a guest on KVM/ARM. > > Out of interest what are the kvm additional requirements above these > patches? > I've just uploaded the patches for KVM support to http://www.netbsd.org/~slp/kvm - 01_vexpress_kvm_guest.patch: Add an independent configuration file for Versatile Express A15 with KVM support. Add an specialized driver for KVM's vGIC(*). - 02_gtmr_add_kvm_support.patch: If targeting KVM, rearm timer at each interrupt. - 03_gtmr_enable_timer_after_tval.patch: Enable timer after writing TVAL. This avoids an unpredictable behavior when running as KVM Guest. - 04_cortex_pmu_use_virtual_counter.patch: If targeting KVM, use the Virtual Timer Value Register, as the Cycle Count Register is not available when running as KVM Guest. (*) This probably deserves some explaining. Our current controller for Cortex GIC has two problems with KVM's vGIC: 1) It relies on interrupt levels and the PMR, which KVM doesn't implement yet (the PMR just acts like an all-or-nothing switch). The alternative driver implements a strategy similar to Nick's RPi interrupt handler, using pic.c instrumentation to avoid relying on IRQ levels. 2) Under KVM, the GIC's CPU interface is hardware assisted, and can be cheaply used, but the distributor is emulated and accessing it traps to the Host, which makes the Guest unbearable slow. The alternative driver avoids using the distributor to mask interrupts by delaying EOI until pic_unblock_irqs is called. There's still some work to be done to be able to run under KVM with a decent performance: - Add support for VirtIO-MMIO devices. - Add MULTIPROCESSOR support. Sergio.