Load multiple VMs from ramdisk and run vcpus on request.
Remove gic and timer code for now.
diff --git a/src/vm.c b/src/vm.c
index ee6a5cd..05dd2e3 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -2,23 +2,26 @@
#include "cpu.h"
-void vm_init(struct vm *vm, struct cpu *cpus)
+void vm_init(struct vm *vm, uint32_t vcpu_count)
{
- size_t i;
+ uint32_t i;
+
+ vm->vcpu_count = vcpu_count;
/* Do basic initialization of vcpus. */
- for (i = 0; i < MAX_CPUS; i++) {
- vcpu_init(vm->vcpus + i, cpus + i, vm);
- }
+ for (i = 0; i < vcpu_count; i++)
+ vcpu_init(vm->vcpus + i, vm);
arch_vptable_init(&vm->page_table);
}
/* TODO: Shall we use index or id here? */
-void vm_start_vcpu(struct vm *vm, size_t index, size_t entry, size_t arg)
+void vm_start_vcpu(struct vm *vm, size_t index, size_t entry, size_t arg,
+ bool is_primary)
{
struct vcpu *vcpu = vm->vcpus + index;
- arch_regs_init(&vcpu->regs, entry, arg);
- vcpu_ready(vcpu);
- cpu_on(vcpu->cpu);
+ if (index < vm->vcpu_count) {
+ arch_regs_init(&vcpu->regs, entry, arg, is_primary);
+ vcpu_on(vcpu);
+ }
}