We were returning and setting nr_guest_pcores to one less than the number of cores we set up.
I also got rid of using 'i' outside the loop, which was slightly confusing due to the other loop using its own 'i'. I also cleaned up some old comments that referred to the pre-waserror error handling style. Signed-off-by: Barret Rhoden <[email protected]> --- kern/arch/x86/vmm/intel/vmx.c | 7 +++---- kern/arch/x86/vmm/vmm.c | 9 ++++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/kern/arch/x86/vmm/intel/vmx.c b/kern/arch/x86/vmm/intel/vmx.c index 7ca1c67d9b91..485bb272571b 100644 --- a/kern/arch/x86/vmm/intel/vmx.c +++ b/kern/arch/x86/vmm/intel/vmx.c @@ -802,7 +802,7 @@ construct_eptp(physaddr_t root_hpa) /* Helper: some fields of the VMCS need a physical page address, e.g. the VAPIC * page. We have the user address. This converts the user to phys addr and - * sets that up in the VMCS. Returns 0 on success, -1 o/w. */ + * sets that up in the VMCS. Throws on error. */ static void vmcs_set_pgaddr(struct proc *p, void *u_addr, unsigned long field, char *what) { @@ -830,7 +830,7 @@ static void vmcs_set_pgaddr(struct proc *p, void *u_addr, /** * vmx_setup_initial_guest_state - configures the initial state of guest - * registers and the VMCS. Returns 0 on success, -1 o/w. + * registers and the VMCS. Throws on error. */ static void vmx_setup_initial_guest_state(struct proc *p, struct vmm_gpcore_init *gpci) @@ -945,8 +945,7 @@ static void vmx_setup_initial_guest_state(struct proc *p, vmcs_writel(EOI_EXIT_BITMAP3, 0); vmcs_writel(EOI_EXIT_BITMAP3_HIGH, 0); - /* Initialize parts based on the users info. If one of them fails, we'll do - * the others but then error out. */ + /* Initialize parts based on the users info. */ vmcs_set_pgaddr(p, gpci->posted_irq_desc, POSTED_INTR_DESC_ADDR, "posted_irq_desc"); vmcs_set_pgaddr(p, gpci->vapic_addr, VIRTUAL_APIC_PAGE_ADDR, diff --git a/kern/arch/x86/vmm/vmm.c b/kern/arch/x86/vmm/vmm.c index 07815447dafc..072f3209c868 100644 --- a/kern/arch/x86/vmm/vmm.c +++ b/kern/arch/x86/vmm/vmm.c @@ -66,13 +66,12 @@ void vmm_pcpu_init(void) } /* Initializes a process to run virtual machine contexts, returning the number - * initialized, optionally setting errno */ + * initialized, throwing on error. */ int vmm_struct_init(struct proc *p, unsigned int nr_guest_pcores, struct vmm_gpcore_init *u_gpcis, int flags) { ERRSTACK(1); struct vmm *vmm = &p->vmm; - unsigned int i; struct vmm_gpcore_init gpci; if (flags & ~VMM_ALL_FLAGS) @@ -98,17 +97,17 @@ int vmm_struct_init(struct proc *p, unsigned int nr_guest_pcores, if (!vmm->guest_pcores) error(ENOMEM, "Allocation of vmm->guest_pcores failed"); - for (i = 0; i < nr_guest_pcores; i++) { + for (int i = 0; i < nr_guest_pcores; i++) { if (copy_from_user(&gpci, &u_gpcis[i], sizeof(struct vmm_gpcore_init))) error(EINVAL, "Bad pointer %p for gps", u_gpcis); vmm->guest_pcores[i] = create_guest_pcore(p, &gpci); - vmm->nr_guest_pcores = i; + vmm->nr_guest_pcores = i + 1; } for (int i = 0; i < VMM_VMEXIT_NR_TYPES; i++) vmm->vmexits[i] = 0; qunlock(&vmm->qlock); poperror(); - return i; + return vmm->nr_guest_pcores; } /* Has no concurrency protection - only call this when you know you have the -- 2.8.0.rc3.226.g39d4020 -- You received this message because you are subscribed to the Google Groups "Akaros" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
