kvm, x86: Add initial support for multicore simulation
authorAndreas Sandberg <andreas@sandberg.pp.se>
Wed, 9 Apr 2014 14:01:58 +0000 (16:01 +0200)
committerAndreas Sandberg <andreas@sandberg.pp.se>
Wed, 9 Apr 2014 14:01:58 +0000 (16:01 +0200)
commit02b51afb7e6b250b4cd964cd447e71bd4f31236d
treea6cfea68dd9dae6ecd21340a18b8cc9434ef6388
parent221f4f232ae79b8123e7ce28d26a873e1ba9f9dc
kvm, x86: Add initial support for multicore simulation

Simulating a SMP or multicore requires devices to be shared between
multiple KVM vCPUs. This means that locking is required when accessing
devices. This changeset adds the necessary locking to allow devices to
execute correctly. It is implemented by temporarily migrating the KVM
CPU to the VM's (and devices) event queue when handling
MMIO. Similarly, the VM migrates to the interrupt controller's event
queue when delivering an interrupt.

The support for fast-forwarding of multicore simulations added by this
changeset assumes that all devices in a system are simulated in the
same thread and each vCPU has its own thread. Special care must be
taken to ensure that devices living under the CPU in the object
hierarchy (e.g., the interrupt controller) do not inherit the parent
CPUs thread and are assigned to device thread. The KvmVM object is
assumed to live in the same thread as the other devices in the system.
src/cpu/kvm/base.cc
src/cpu/kvm/x86_cpu.cc