Il 17/07/2013 08:05, Arthur Chunqi Li ha scritto:
> + guest_rip = vmcs_read(GUEST_RIP);
> + reason = vmcs_read(EXI_REASON) & 0xff;
> +
> + switch (reason) {
> + case VMX_VMCALL:
> + print_vmexit_info();
> + vmcs_write(GUEST_RIP, guest_rip + 3);
> + goto vmx_resume;
> + case VMX_HLT:
> + goto vmx_halt;
> + default:
> + break;
> + }
Could you reorganize this code, so that it reuses the switch statement
you have in the "current != NULL && current->exit_handler != NULL" case?
In other words, it looks like this code:
> + if ((read_cr4() & CR4_PAE) && (read_cr0() & CR0_PG)
> + && !(rdmsr(MSR_EFER) & EFER_LMA))
> + printf("ERROR : PDPTEs should be checked\n");
> +
> + guest_rip = vmcs_read(GUEST_RIP);
> + reason = vmcs_read(EXI_REASON) & 0xff;
> +
> + switch (reason) {
> + case VMX_VMCALL:
> + print_vmexit_info();
> + vmcs_write(GUEST_RIP, guest_rip + 3);
> + goto vmx_resume;
> + case VMX_HLT:
> + goto vmx_halt;
> + default:
> + break;
> + }
> + printf("ERROR : Unhandled vmx exit.\n");
> + print_vmexit_info();
is only alternative to this:
> + current->exits ++;
> + current->guest_regs = regs;
> + ret = current->exit_handler();
> + regs = current->guest_regs;
Everything that comes after "regs = current->guest_regs;" should be
outside the "if". Please tell me if I'm not clear. :)
> +#define VMX_HALT 1
> +#define VMX_EXIT 2
> +#define VMX_RESUME 3
These are not VMX constants, so perhaps you can rename them to
VMXTEST_{HANDLE,EXIT,RESUME}?
Paolo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html