X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmx_handler.c;h=dafb2ffdb42c62bbd527bdecb39c320638a0d607;hp=e719afc66fbbff367ffd8b24060aaa9874fc26e9;hb=a24a1722328a575cec8dd8578902fd0f68c72c1c;hpb=cc8a46c3523fd92c97fae8ba2433119a91a86441 diff --git a/palacios/src/palacios/vmx_handler.c b/palacios/src/palacios/vmx_handler.c index e719afc..dafb2ff 100644 --- a/palacios/src/palacios/vmx_handler.c +++ b/palacios/src/palacios/vmx_handler.c @@ -20,10 +20,43 @@ #include #include #include +#include +#include -int v3_handle_vmx_exit(struct guest_info * info) +static int inline check_vmcs_write(vmcs_field_t field, addr_t val) { - PrintDebug("VMX Exit taken!\n"); + int ret = 0; + ret = vmcs_write(field,val); + + if (ret != VMX_SUCCESS) { + PrintError("VMWRITE error on %s!: %d\n", v3_vmcs_field_to_str(field), ret); + return 1; + } + + return 0; +} + +static int inline check_vmcs_read(vmcs_field_t field, void * val) +{ + int ret = 0; + ret = vmcs_read(field,val); + + if(ret != VMX_SUCCESS) { + PrintError("VMREAD error on %s!: %d\n", v3_vmcs_field_to_str(field), ret); + return 1; + } + return 0; } + +int v3_handle_vmx_exit(struct v3_gprs * gprs) +{ + uint32_t exit_reason; + ulong_t exit_qual; + + check_vmcs_read(VMCS_EXIT_REASON, &exit_reason); + check_vmcs_read(VMCS_EXIT_QUAL, &exit_qual); + PrintDebug("VMX Exit taken, id-qual: %x-%ld\n", exit_reason, exit_qual); + return -1; +}