Changeset 106635 in vbox
- Timestamp:
- Oct 23, 2024 9:30:37 PM (7 months ago)
- svn:sync-xref-src-repo-rev:
- 165477
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/sup.h
r106061 r106635 780 780 781 781 782 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32)782 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32) 783 783 784 784 /** @internal */ … … 793 793 DECLINLINE(uint64_t) SUPReadTsc(void) 794 794 { 795 # if defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32) /** @todo portme: ring-0 arm. */796 return ASMReadTSC();797 # else798 795 PSUPGLOBALINFOPAGE pGip = g_pSUPGlobalInfoPage; 799 796 if (!pGip || pGip->enmUseTscDelta <= SUPGIPUSETSCDELTA_ROUGHLY_ZERO) 800 797 return ASMReadTSC(); 801 798 return SUPReadTscWithDelta(pGip); 802 # endif803 799 } 804 800 805 #endif /* X86 || AMD64 || ARM */801 #endif /* X86 || AMD64 || ARM64 || ARM32 */ 806 802 807 803 /** @internal */ -
trunk/src/VBox/HostDrivers/Support/Makefile.kmk
r106634 r106635 764 764 $(PATH_SDK_$(VBOX_WINDDK)_LIB)/BufferOverflowK.lib 765 765 endif 766 VBoxDrv_LIBS.win.arm64 = \ 767 $(PATH_SDK_$(VBOX_WINDDK)_LIB)/BufferOverflowFastFailK.lib 766 768 767 769 #VBoxDrv_LDFLAGS.darwin = -Wl,-sectcreate,__TEXT,__info_plist,$(VBoxDrv.kext_0_OUTDIR)/Info.plist -
trunk/src/VBox/HostDrivers/Support/SUPLibAll.cpp
r106061 r106635 49 49 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 50 50 # include <iprt/asm-amd64-x86.h> 51 #elif defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32) 52 # include <iprt/asm-arm.h> 51 53 #endif 52 54 #include <iprt/errcore.h> … … 57 59 58 60 59 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 61 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32) 60 62 /** 61 63 * The slow case for SUPReadTsc where we need to apply deltas. … … 83 85 * Read the TSC and get the corresponding aCPUs index. 84 86 */ 85 #ifdef IN_RING3 87 # ifdef IN_RING3 88 # if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 86 89 if (pGip->fGetGipCpu & SUPGIPGETCPU_RDTSCP_MASK_MAX_SET_CPUS) 87 90 { … … 163 166 for (;;) 164 167 { 165 uint8_t idApic = ASMGetApicId();168 uint8_t const idApic = ASMGetApicId(); 166 169 uTsc = ASMReadTSC(); 167 170 if (RT_LIKELY(ASMGetApicId() == idApic)) … … 178 181 } 179 182 } 183 184 # else /* !AMD64 || !X86 */ 185 # if defined(RT_OS_WINDOWS) 186 /* Use TPIDRRO_EL0 (=cpu number) before and after reading the TSC. */ 187 uint32_t cTries = 0; 188 for (;;) 189 { 190 RTCCUINTREG const idApic = ASMGetThreadIdRoEL0(); 191 uTsc = ASMReadTSC(); 192 if (RT_LIKELY(ASMGetThreadIdRoEL0() == idApic)) 193 { 194 AssertBreakStmt(idApic < RT_ELEMENTS(pGip->aiCpuFromApicId), iGipCpu = UINT16_MAX); 195 iGipCpu = pGip->aiCpuFromApicId[idApic & 0xffff]; 196 break; 197 } 198 if (cTries >= 16) 199 { 200 iGipCpu = UINT16_MAX; 201 break; 202 } 203 cTries++; 204 } 205 # else 206 /* Use RTMpCpuId before and after reading the TSC. */ 207 uint32_t cTries = 0; 208 for (;;) 209 { 210 RTCPUID const idCpu = RTMpCpuId(); 211 uTsc = ASMReadTSC(); 212 if (RT_LIKELY(RTMpCpuId() == idCpu)) 213 { 214 int const iCpuSet = RTMpCpuIdToSetIndex(idCpu); 215 iGipCpu = pGip->aiCpuFromCpuSetIdx[iCpuSet]; 216 break; 217 } 218 if (cTries >= 16) 219 { 220 iGipCpu = UINT16_MAX; 221 break; 222 } 223 cTries++; 224 } 225 # endif 226 # endif /* !AMD64 || !X86 */ 227 180 228 #elif defined(IN_RING0) 181 229 /* Ring-0: Use use RTMpCpuId(), no loops. */ … … 234 282 SUPR0_EXPORT_SYMBOL(SUPReadTscWithDelta); 235 283 # endif 236 #endif /* RT_ARCH_AMD64 || RT_ARCH_X86*/284 #endif /* defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) || defined(RT_ARCH_ARM64) || defined(RT_ARCH_ARM32) */ 237 285 238 286 -
trunk/src/VBox/Runtime/Makefile.kmk
r106614 r106635 3712 3712 VBox/RTLogWriteVmm-amd64-x86.asm 3713 3713 RuntimeR0Drv_SOURCES.arm32 += \ 3714 common/string/RTStrEnd.cpp 3714 common/string/RTStrEnd.cpp \ 3715 common/asm/ASMMultU64ByU32DivByU32-generic.cpp 3715 3716 RuntimeR0Drv_SOURCES.arm64 += \ 3716 common/string/RTStrEnd.cpp 3717 common/string/RTStrEnd.cpp \ 3718 common/asm/ASMMultU64ByU32DivByU32-generic.cpp 3717 3719 RuntimeR0Drv_SOURCES.sparc32 += \ 3718 common/string/RTStrEnd.cpp 3720 common/string/RTStrEnd.cpp \ 3721 common/asm/ASMMultU64ByU32DivByU32-generic.cpp 3719 3722 RuntimeR0Drv_SOURCES.sparc64 += \ 3720 common/string/RTStrEnd.cpp 3723 common/string/RTStrEnd.cpp \ 3724 common/asm/ASMMultU64ByU32DivByU32-generic.cpp 3721 3725 3722 3726 RuntimeR0Drv_SOURCES.linux = \
Note:
See TracChangeset
for help on using the changeset viewer.