Changeset 70606 in vbox for trunk/src/VBox/VMM/VMMR0
- Timestamp:
- Jan 16, 2018 7:05:36 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 120319
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo
-
old new 8 8 /branches/VBox-5.0:104445,104938,104943,104950,104952-104953,104987-104988,104990,106453 9 9 /branches/VBox-5.1:112367,115992,116543,116550,116568,116573 10 /branches/VBox-5.2:120083,120099,120213,120221,120239 10 11 /branches/andy/draganddrop:90781-91268 11 12 /branches/andy/guestctrl20:78916,78930
-
- Property svn:mergeinfo
-
trunk/src/VBox
- Property svn:mergeinfo
-
old new 8 8 /branches/VBox-5.0/src/VBox:104938,104943,104950,104987-104988,104990,106453 9 9 /branches/VBox-5.1/src/VBox:112367,116543,116550,116568,116573 10 /branches/VBox-5.2/src/VBox:120083,120099,120213,120221,120239 10 11 /branches/andy/draganddrop/src/VBox:90781-91268 11 12 /branches/andy/guestctrl20/src/VBox:78916,78930
-
- Property svn:mergeinfo
-
trunk/src/VBox/VMM/VMMR0/HMR0A.asm
r69221 r70606 49 49 ; Use define because I'm too lazy to convert the struct. 50 50 %define XMM_OFF_IN_X86FXSTATE 160 51 52 ;; Spectre filler for 32-bit mode. 53 ; Some user space address that points to a 4MB page boundrary in hope that it 54 ; will somehow make it less useful. 55 %define SPECTRE_FILLER32 0x227fffff 56 ;; Spectre filler for 64-bit mode. 57 ; Choosen to be an invalid address (also with 5 level paging). 58 %define SPECTRE_FILLER64 0x02204204207fffff 59 ;; Spectre filler for the current CPU mode. 60 %ifdef RT_ARCH_AMD64 61 %define SPECTRE_FILLER SPECTRE_FILLER64 62 %else 63 %define SPECTRE_FILLER SPECTRE_FILLER32 64 %endif 51 65 52 66 ;; … … 224 238 %define MYPOPSEGS MYPOPSEGS32 225 239 %endif 240 241 ;; 242 ; Creates an indirect branch prediction barrier on CPUs that need and supports that. 243 ; @clobbers eax, edx, ecx 244 ; @param 1 How to address CPUMCTX. 245 ; @param 2 Which flag to test for (CPUMCTX_WSF_IBPB_ENTRY or CPUMCTX_WSF_IBPB_EXIT) 246 %macro INDIRECT_BRANCH_PREDICTION_BARRIER 2 247 test byte [%1 + CPUMCTX.fWorldSwitcher], %2 248 jz %%no_indirect_branch_barrier 249 mov ecx, MSR_IA32_PRED_CMD 250 mov eax, MSR_IA32_PRED_CMD_F_IBPB 251 xor edx, edx 252 wrmsr 253 %%no_indirect_branch_barrier: 254 %endmacro 226 255 227 256 … … 1185 1214 1186 1215 mov [ss:xDI + CPUMCTX.eax], eax 1216 mov xAX, SPECTRE_FILLER 1187 1217 mov [ss:xDI + CPUMCTX.ebx], ebx 1218 mov xBX, xAX 1188 1219 mov [ss:xDI + CPUMCTX.ecx], ecx 1220 mov xCX, xAX 1189 1221 mov [ss:xDI + CPUMCTX.edx], edx 1222 mov xDX, xAX 1190 1223 mov [ss:xDI + CPUMCTX.esi], esi 1224 mov xSI, xAX 1191 1225 mov [ss:xDI + CPUMCTX.ebp], ebp 1226 mov xBP, xAX 1192 1227 mov xAX, cr2 1193 1228 mov [ss:xDI + CPUMCTX.cr2], xAX … … 1199 1234 pop dword [ss:xDI + CPUMCTX.edi] ; The guest edi we pushed above. 1200 1235 %endif 1236 1237 ; Fight spectre. 1238 INDIRECT_BRANCH_PREDICTION_BARRIER ss:xDI, CPUMCTX_WSF_IBPB_EXIT 1201 1239 1202 1240 %ifndef VMX_SKIP_TR … … 1416 1454 ; Don't mess with ESP anymore!!! 1417 1455 1456 ; Fight spectre. 1457 INDIRECT_BRANCH_PREDICTION_BARRIER xSI, CPUMCTX_WSF_IBPB_ENTRY 1458 1418 1459 ; Load guest general purpose registers. 1419 1460 mov eax, [xSI + CPUMCTX.eax] … … 1490 1531 1491 1532 mov qword [xDI + CPUMCTX.eax], rax 1533 mov rax, SPECTRE_FILLER64 1492 1534 mov qword [xDI + CPUMCTX.ebx], rbx 1535 mov rbx, rax 1493 1536 mov qword [xDI + CPUMCTX.ecx], rcx 1537 mov rcx, rax 1494 1538 mov qword [xDI + CPUMCTX.edx], rdx 1539 mov rdx, rax 1495 1540 mov qword [xDI + CPUMCTX.esi], rsi 1541 mov rsi, rax 1496 1542 mov qword [xDI + CPUMCTX.ebp], rbp 1543 mov rbp, rax 1497 1544 mov qword [xDI + CPUMCTX.r8], r8 1545 mov r8, rax 1498 1546 mov qword [xDI + CPUMCTX.r9], r9 1547 mov r9, rax 1499 1548 mov qword [xDI + CPUMCTX.r10], r10 1549 mov r10, rax 1500 1550 mov qword [xDI + CPUMCTX.r11], r11 1551 mov r11, rax 1501 1552 mov qword [xDI + CPUMCTX.r12], r12 1553 mov r12, rax 1502 1554 mov qword [xDI + CPUMCTX.r13], r13 1555 mov r13, rax 1503 1556 mov qword [xDI + CPUMCTX.r14], r14 1557 mov r14, rax 1504 1558 mov qword [xDI + CPUMCTX.r15], r15 1559 mov r15, rax 1505 1560 mov rax, cr2 1506 1561 mov qword [xDI + CPUMCTX.cr2], rax … … 1508 1563 pop xAX ; The guest rdi we pushed above 1509 1564 mov qword [xDI + CPUMCTX.edi], rax 1565 1566 ; Fight spectre. 1567 INDIRECT_BRANCH_PREDICTION_BARRIER xDI, CPUMCTX_WSF_IBPB_EXIT 1510 1568 1511 1569 %ifndef VMX_SKIP_TR … … 1704 1762 ; Note: assumes success! 1705 1763 ; Don't mess with ESP anymore!!! 1764 1765 ; Fight spectre. 1766 INDIRECT_BRANCH_PREDICTION_BARRIER xSI, CPUMCTX_WSF_IBPB_ENTRY 1706 1767 1707 1768 ; Load guest general purpose registers. … … 1833 1894 vmsave 1834 1895 1896 ; Fight spectre. 1897 INDIRECT_BRANCH_PREDICTION_BARRIER xSI, CPUMCTX_WSF_IBPB_ENTRY 1898 1835 1899 ; Setup xAX for VMLOAD. 1836 1900 mov xAX, [xBP + xCB * 2 + RTHCPHYS_CB] ; HCPhysVmcb (64 bits physical address; x86: take low dword only) … … 1870 1934 1871 1935 mov [ss:xAX + CPUMCTX.ebx], ebx 1936 mov xBX, SPECTRE_FILLER 1872 1937 mov [ss:xAX + CPUMCTX.ecx], ecx 1938 mov xCX, xBX 1873 1939 mov [ss:xAX + CPUMCTX.edx], edx 1940 mov xDX, xBX 1874 1941 mov [ss:xAX + CPUMCTX.esi], esi 1942 mov xSI, xBX 1875 1943 mov [ss:xAX + CPUMCTX.edi], edi 1944 mov xDI, xBX 1876 1945 mov [ss:xAX + CPUMCTX.ebp], ebp 1946 mov xBP, xBX 1947 1948 ; Fight spectre. Note! Trashes xAX! 1949 INDIRECT_BRANCH_PREDICTION_BARRIER ss:xAX, CPUMCTX_WSF_IBPB_EXIT 1877 1950 1878 1951 ; Restore the host xcr0 if necessary. … … 1978 2051 vmsave 1979 2052 2053 ; Fight spectre. 2054 INDIRECT_BRANCH_PREDICTION_BARRIER xSI, CPUMCTX_WSF_IBPB_ENTRY 2055 1980 2056 ; Setup rax for VMLOAD. 1981 2057 mov rax, [rbp + xCB * 2 + RTHCPHYS_CB] ; HCPhysVmcb (64 bits physical address; take low dword only) … … 2022 2098 2023 2099 mov qword [rax + CPUMCTX.ebx], rbx 2100 mov rbx, SPECTRE_FILLER64 2024 2101 mov qword [rax + CPUMCTX.ecx], rcx 2102 mov rcx, rbx 2025 2103 mov qword [rax + CPUMCTX.edx], rdx 2104 mov rdx, rbx 2026 2105 mov qword [rax + CPUMCTX.esi], rsi 2106 mov rsi, rbx 2027 2107 mov qword [rax + CPUMCTX.edi], rdi 2108 mov rdi, rbx 2028 2109 mov qword [rax + CPUMCTX.ebp], rbp 2110 mov rbp, rbx 2029 2111 mov qword [rax + CPUMCTX.r8], r8 2112 mov r8, rbx 2030 2113 mov qword [rax + CPUMCTX.r9], r9 2114 mov r9, rbx 2031 2115 mov qword [rax + CPUMCTX.r10], r10 2116 mov r10, rbx 2032 2117 mov qword [rax + CPUMCTX.r11], r11 2118 mov r11, rbx 2033 2119 mov qword [rax + CPUMCTX.r12], r12 2120 mov r12, rbx 2034 2121 mov qword [rax + CPUMCTX.r13], r13 2122 mov r13, rbx 2035 2123 mov qword [rax + CPUMCTX.r14], r14 2124 mov r14, rbx 2036 2125 mov qword [rax + CPUMCTX.r15], r15 2126 mov r15, rbx 2127 2128 ; Fight spectre. Note! Trashes rax! 2129 INDIRECT_BRANCH_PREDICTION_BARRIER rax, CPUMCTX_WSF_IBPB_EXIT 2037 2130 2038 2131 ; Restore the host xcr0 if necessary.
Note:
See TracChangeset
for help on using the changeset viewer.