static void vm_init(struct vm *vm, bool create) { int vcpu; if (create) { callout_system_init(); } vm->cookie = VM_INIT(vm); vm->vioapic = vioapic_init(vm); vm->vhpet = vhpet_init(vm); vm->vatpic = vatpic_init(vm); vm->vatpit = vatpit_init(vm); vm->vpmtmr = vpmtmr_init(vm); if (create) { vm->vrtc = vrtc_init(vm); } CPU_ZERO(&vm->active_cpus); vm->suspend = 0; CPU_ZERO(&vm->suspended_cpus); for (vcpu = 0; vcpu < VM_MAXCPU; vcpu++) { vcpu_init(vm, vcpu, create); } }
static void vm_reset_vdevs(struct vmctx *ctx) { /* * The current virtual devices doesn't define virtual * device reset function. So we call vdev deinit/init * pairing to emulate the device reset operation. * * pci/ioapic deinit/init is needed because of dependency * of pci irq allocation/free. * * acpi build is necessary because irq for each vdev * could be assigned with different number after reset. */ atkbdc_deinit(ctx); if (debugexit_enabled) deinit_debugexit(); vhpet_deinit(ctx); vpit_deinit(ctx); vrtc_deinit(ctx); deinit_pci(ctx); pci_irq_deinit(ctx); ioapic_deinit(); pci_irq_init(ctx); atkbdc_init(ctx); vrtc_init(ctx); vpit_init(ctx); vhpet_init(ctx); if (debugexit_enabled) init_debugexit(); ioapic_init(ctx); init_pci(ctx); if (acpi) { acpi_build(ctx, guest_ncpus); } }
static int vm_init_vdevs(struct vmctx *ctx) { int ret; init_mem(); init_inout(); pci_irq_init(ctx); atkbdc_init(ctx); ioapic_init(ctx); /* * We don't care ioc_init return value so far. * Will add return value check once ioc is full function. */ ret = ioc_init(ctx); ret = vrtc_init(ctx); if (ret < 0) goto vrtc_fail; ret = vpit_init(ctx); if (ret < 0) goto vpit_fail; ret = vhpet_init(ctx); if (ret < 0) goto vhpet_fail; sci_init(ctx); if (debugexit_enabled) init_debugexit(); ret = monitor_init(ctx); if (ret < 0) goto monitor_fail; ret = init_pci(ctx); if (ret < 0) goto pci_fail; init_vtpm2(ctx); return 0; pci_fail: monitor_close(); monitor_fail: if (debugexit_enabled) deinit_debugexit(); vhpet_deinit(ctx); vhpet_fail: vpit_deinit(ctx); vpit_fail: vrtc_deinit(ctx); vrtc_fail: ioc_deinit(ctx); atkbdc_deinit(ctx); pci_irq_deinit(ctx); ioapic_deinit(); return -1; }