Ticket #13122: rdseed.patch
| File rdseed.patch, 6.7 KB (added by , 10 years ago) |
|---|
-
include/VBox/vmm/hm_vmx.h
1002 1002 #define VMX_EXIT_INVPCID 58 1003 1003 /** 59 VMFUNC. Guest software attempted to execute VMFUNC. */ 1004 1004 #define VMX_EXIT_VMFUNC 59 1005 /** 61 RDSEED. Guest software attempted to execute RDSEED. */ 1006 #define VMX_EXIT_RDSEED 61 1005 1007 /** The maximum exit value (inclusive). */ 1006 #define VMX_EXIT_MAX (VMX_EXIT_ VMFUNC)1008 #define VMX_EXIT_MAX (VMX_EXIT_RDSEED) 1007 1009 /** @} */ 1008 1010 1009 1011 … … 1390 1392 #define VMX_VMCS_CTRL_PROC_EXEC2_INVPCID RT_BIT(12) 1391 1393 /** Enables VMFUNC instructions. */ 1392 1394 #define VMX_VMCS_CTRL_PROC_EXEC2_VMFUNC RT_BIT(13) 1395 /** VM Exit when executing RDSEED instructions. */ 1396 #define VMX_VMCS_CTRL_PROC_EXEC2_RDSEED_EXIT RT_BIT(16) 1393 1397 /** @} */ 1394 1398 1395 1399 -
src/VBox/VMM/VMMR0/HMVMXR0.cpp
396 396 static FNVMXEXITHANDLER hmR0VmxExitXsetbv; 397 397 static FNVMXEXITHANDLER hmR0VmxExitRdrand; 398 398 static FNVMXEXITHANDLER hmR0VmxExitInvpcid; 399 static FNVMXEXITHANDLER hmR0VmxExitRdseed; 399 400 /** @} */ 400 401 401 402 static int hmR0VmxExitXcptNM(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient); … … 478 479 /* 56 UNDEFINED */ hmR0VmxExitErrUndefined, 479 480 /* 57 VMX_EXIT_RDRAND */ hmR0VmxExitRdrand, 480 481 /* 58 VMX_EXIT_INVPCID */ hmR0VmxExitInvpcid, 481 /* 59 VMX_EXIT_VMFUNC */ hmR0VmxExitSetPendingXcptUD 482 /* 59 VMX_EXIT_VMFUNC */ hmR0VmxExitSetPendingXcptUD, 483 /* 60 UNDEFINED */ hmR0VmxExitErrUndefined, 484 /* 61 VMX_EXIT_RDSEED */ hmR0VmxExitRdseed, 482 485 }; 483 486 #endif /* HMVMX_USE_FUNCTION_TABLE */ 484 487 … … 8874 8877 case VMX_EXIT_WBINVD: /* SVVMCS(); */ rc = hmR0VmxExitWbinvd(pVCpu, pMixedCtx, pVmxTransient); /* LDVMCS(); */ break; 8875 8878 case VMX_EXIT_XSETBV: /* SVVMCS(); */ rc = hmR0VmxExitXsetbv(pVCpu, pMixedCtx, pVmxTransient); /* LDVMCS(); */ break; 8876 8879 case VMX_EXIT_RDRAND: /* SVVMCS(); */ rc = hmR0VmxExitRdrand(pVCpu, pMixedCtx, pVmxTransient); /* LDVMCS(); */ break; 8880 case VMX_EXIT_RDSEED: /* SVVMCS(); */ rc = hmR0VmxExitRdseed(pVCpu, pMixedCtx, pVmxTransient); /* LDVMCS(); */ break; 8877 8881 case VMX_EXIT_INVPCID: /* SVVMCS(); */ rc = hmR0VmxExitInvpcid(pVCpu, pMixedCtx, pVmxTransient); /* LDVMCS(); */ break; 8878 8882 case VMX_EXIT_GETSEC: /* SVVMCS(); */ rc = hmR0VmxExitGetsec(pVCpu, pMixedCtx, pVmxTransient); /* LDVMCS(); */ break; 8879 8883 case VMX_EXIT_RDPMC: /* SVVMCS(); */ rc = hmR0VmxExitRdpmc(pVCpu, pMixedCtx, pVmxTransient); /* LDVMCS(); */ break; … … 10314 10318 10315 10319 10316 10320 /** 10321 * VM-exit handler for RDSEED (VMX_EXIT_RDSEED). Conditional VM-exit. 10322 */ 10323 HMVMX_EXIT_DECL hmR0VmxExitRdseed(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient) 10324 { 10325 HMVMX_VALIDATE_EXIT_HANDLER_PARAMS(); 10326 10327 /* By default, we don't enable VMX_VMCS_CTRL_PROC_EXEC2_RDSEED_EXIT. */ 10328 STAM_COUNTER_INC(&pVCpu->hm.s.StatExitRdseed); 10329 if (pVCpu->hm.s.vmx.u32ProcCtls2 & VMX_VMCS_CTRL_PROC_EXEC2_RDSEED_EXIT) 10330 return VERR_EM_INTERPRETER; 10331 AssertMsgFailed(("Unexpected RDSEED exit. pVCpu=%p pMixedCtx=%p\n", pVCpu, pMixedCtx)); 10332 HMVMX_RETURN_UNEXPECTED_EXIT(); 10333 } 10334 10335 10336 /** 10317 10337 * VM-exit handler for RDMSR (VMX_EXIT_RDMSR). 10318 10338 */ 10319 10339 HMVMX_EXIT_DECL hmR0VmxExitRdmsr(PVMCPU pVCpu, PCPUMCTX pMixedCtx, PVMXTRANSIENT pVmxTransient) -
src/VBox/VMM/VMMR3/HM.cpp
120 120 EXIT_REASON_NIL(), 121 121 EXIT_REASON(VMX_EXIT_RDRAND , 57, "Guest attempted to execute RDRAND."), 122 122 EXIT_REASON(VMX_EXIT_INVPCID , 58, "Guest attempted to execute INVPCID."), 123 EXIT_REASON(VMX_EXIT_VMFUNC , 59, "Guest attempted to execute VMFUNC.") 123 EXIT_REASON(VMX_EXIT_VMFUNC , 59, "Guest attempted to execute VMFUNC."), 124 EXIT_REASON_NIL(), 125 EXIT_REASON(VMX_EXIT_RDSEED , 61, "Guest attempted to execute RDSEED."), 124 126 }; 125 127 /** Exit reason descriptions for AMD-V, used to describe statistics. */ 126 128 static const char * const g_apszAmdVExitReasons[MAX_EXITREASON_STAT] = … … 672 674 HM_REG_COUNTER(&pVCpu->hm.s.StatExitRdtscp, "/HM/CPU%d/Exit/Instr/Rdtscp", "Guest attempted to execute RDTSCP."); 673 675 HM_REG_COUNTER(&pVCpu->hm.s.StatExitRdpmc, "/HM/CPU%d/Exit/Instr/Rdpmc", "Guest attempted to execute RDPMC."); 674 676 HM_REG_COUNTER(&pVCpu->hm.s.StatExitRdrand, "/HM/CPU%d/Exit/Instr/Rdrand", "Guest attempted to execute RDRAND."); 677 HM_REG_COUNTER(&pVCpu->hm.s.StatExitRdseed, "/HM/CPU%d/Exit/Instr/Rdseed", "Guest attempted to execute RDSEED."); 675 678 HM_REG_COUNTER(&pVCpu->hm.s.StatExitRdmsr, "/HM/CPU%d/Exit/Instr/Rdmsr", "Guest attempted to execute RDMSR."); 676 679 HM_REG_COUNTER(&pVCpu->hm.s.StatExitWrmsr, "/HM/CPU%d/Exit/Instr/Wrmsr", "Guest attempted to execute WRMSR."); 677 680 HM_REG_COUNTER(&pVCpu->hm.s.StatExitMwait, "/HM/CPU%d/Exit/Instr/Mwait", "Guest attempted to execute MWAIT."); … … 1053 1056 HMVMX_REPORT_FEATURE(val, zap, VMX_VMCS_CTRL_PROC_EXEC2_RDRAND_EXIT); 1054 1057 HMVMX_REPORT_FEATURE(val, zap, VMX_VMCS_CTRL_PROC_EXEC2_INVPCID); 1055 1058 HMVMX_REPORT_FEATURE(val, zap, VMX_VMCS_CTRL_PROC_EXEC2_VMFUNC); 1059 HMVMX_REPORT_FEATURE(val, zap, VMX_VMCS_CTRL_PROC_EXEC2_RDSEED_EXIT); 1056 1060 } 1057 1061 1058 1062 LogRel(("HM: MSR_IA32_VMX_ENTRY_CTLS = %#RX64\n", pVM->hm.s.vmx.Msrs.VmxEntry.u)); -
src/VBox/VMM/include/HMInternal.h
874 874 STAMCOUNTER StatExitRdtscp; 875 875 STAMCOUNTER StatExitRdpmc; 876 876 STAMCOUNTER StatExitRdrand; 877 STAMCOUNTER StatExitRdseed; 877 878 STAMCOUNTER StatExitCli; 878 879 STAMCOUNTER StatExitSti; 879 880 STAMCOUNTER StatExitPushf;

