Changeset 57158 in vbox
- Timestamp:
- Aug 3, 2015 1:47:44 PM (10 years ago)
- svn:sync-xref-src-repo-rev:
- 101904
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/include/VBox/vmm/vm.h ¶
r56628 r57158 1146 1146 struct GIM s; 1147 1147 #endif 1148 uint8_t padding[ 256]; /* multiple of 64 */1148 uint8_t padding[320]; /* multiple of 64 */ 1149 1149 } gim; 1150 1150 … … 1171 1171 1172 1172 /** Padding for aligning the cpu array on a page boundary. */ 1173 uint8_t abAlignment2[ 94];1173 uint8_t abAlignment2[30]; 1174 1174 1175 1175 /* ---- end small stuff ---- */ -
TabularUnified trunk/src/VBox/VMM/VMMAll/GIMAllHv.cpp ¶
r56875 r57158 79 79 80 80 /** 81 * Gets the descriptive OS ID variant as identified via the 82 * MSR_GIM_HV_GUEST_OS_ID MSR. 83 * 84 * @returns The name. 85 * @param uGuestOsIdMsr The MSR_GIM_HV_GUEST_OS_ID MSR. 86 */ 87 static const char *gimHvGetGuestOsIdVariantName(uint64_t uGuestOsIdMsr) 88 { 89 /* Refer the Hyper-V spec, section 3.6 "Reporting the Guest OS Identity". */ 90 uint32_t uVendor = MSR_GIM_HV_GUEST_OS_ID_VENDOR(uGuestOsIdMsr); 91 if (uVendor == 1 /* Microsoft */) 92 { 93 uint32_t uOsVariant = MSR_GIM_HV_GUEST_OS_ID_OS_VARIANT(uGuestOsIdMsr); 94 switch (uOsVariant) 95 { 96 case 0: return "Undefined"; 97 case 1: return "MS-DOS"; 98 case 2: return "Windows 3.x"; 99 case 3: return "Windows 9x"; 100 case 4: return "Windows NT or derivative"; 101 case 5: return "Windows CE"; 102 default: return "Unknown"; 103 } 104 } 105 return "Unknown"; 106 } 107 108 109 /** 81 110 * MSR read handler for Hyper-V. 82 111 * … … 151 180 *puValue = 0; 152 181 return VINF_SUCCESS; 182 183 case MSR_GIM_HV_CRASH_CTL: 184 *puValue = pHv->uCrashCtl; 185 return VINF_SUCCESS; 186 187 case MSR_GIM_HV_CRASH_P0: *puValue = pHv->uCrashP0; return VINF_SUCCESS; 188 case MSR_GIM_HV_CRASH_P1: *puValue = pHv->uCrashP1; return VINF_SUCCESS; 189 case MSR_GIM_HV_CRASH_P2: *puValue = pHv->uCrashP2; return VINF_SUCCESS; 190 case MSR_GIM_HV_CRASH_P3: *puValue = pHv->uCrashP3; return VINF_SUCCESS; 191 case MSR_GIM_HV_CRASH_P4: *puValue = pHv->uCrashP4; return VINF_SUCCESS; 153 192 154 193 default: … … 211 250 pHv->u64HypercallMsr &= ~MSR_GIM_HV_HYPERCALL_ENABLE_BIT; 212 251 } 252 else 253 { 254 LogRel(("GIM: HyperV: Guest OS reported ID %#RX64\n", uRawValue)); 255 LogRel(("GIM: HyperV: Open-source=%RTbool Vendor=%#x OS=%#x (%s) Major=%u Minor=%u ServicePack=%u Build=%u\n", 256 MSR_GIM_HV_GUEST_OS_ID_IS_OPENSOURCE(uRawValue), MSR_GIM_HV_GUEST_OS_ID_VENDOR(uRawValue), 257 MSR_GIM_HV_GUEST_OS_ID_OS_VARIANT(uRawValue), gimHvGetGuestOsIdVariantName(uRawValue), 258 MSR_GIM_HV_GUEST_OS_ID_MAJOR_VERSION(uRawValue), MSR_GIM_HV_GUEST_OS_ID_MINOR_VERSION(uRawValue), 259 MSR_GIM_HV_GUEST_OS_ID_SERVICE_VERSION(uRawValue), MSR_GIM_HV_GUEST_OS_ID_BUILD(uRawValue))); 260 } 213 261 pHv->u64GuestOsIdMsr = uRawValue; 214 262 return VINF_SUCCESS; … … 298 346 if (MSR_GIM_HV_RESET_IS_SET(uRawValue)) 299 347 { 300 LogRel(("GIM: HyperV: Reset initiated through MSR .\n"));348 LogRel(("GIM: HyperV: Reset initiated through MSR\n")); 301 349 int rc = PDMDevHlpVMReset(pVM->gim.s.pDevInsR3); 302 350 AssertRC(rc); … … 306 354 #endif /* IN_RING3 */ 307 355 } 356 357 case MSR_GIM_HV_CRASH_CTL: 358 { 359 #ifndef IN_RING3 360 return VINF_CPUM_R3_MSR_WRITE; 361 #else 362 if (uRawValue & MSR_GIM_HV_CRASH_CTL_NOTIFY_BIT) 363 { 364 LogRel(("GIM: HyperV: Guest indicates a fatal condition! P0=%#RX64 P1=%#RX64 P2=%#RX64 P3=%#RX64 P4=%#RX64\n", 365 pHv->uCrashP0, pHv->uCrashP1, pHv->uCrashP2, pHv->uCrashP3, pHv->uCrashP4)); 366 } 367 return VINF_SUCCESS; 368 #endif 369 } 370 371 case MSR_GIM_HV_CRASH_P0: pHv->uCrashP0 = uRawValue; return VINF_SUCCESS; 372 case MSR_GIM_HV_CRASH_P1: pHv->uCrashP1 = uRawValue; return VINF_SUCCESS; 373 case MSR_GIM_HV_CRASH_P2: pHv->uCrashP2 = uRawValue; return VINF_SUCCESS; 374 case MSR_GIM_HV_CRASH_P3: pHv->uCrashP3 = uRawValue; return VINF_SUCCESS; 375 case MSR_GIM_HV_CRASH_P4: pHv->uCrashP4 = uRawValue; return VINF_SUCCESS; 308 376 309 377 case MSR_GIM_HV_TIME_REF_COUNT: /* Read-only MSRs. */ -
TabularUnified trunk/src/VBox/VMM/VMMR3/GIMHv.cpp ¶
r56758 r57158 117 117 118 118 /* Miscellaneous features. */ 119 pHv->uMiscFeat = GIM_HV_MISC_FEAT_TIMER_FREQ; 119 pHv->uMiscFeat = GIM_HV_MISC_FEAT_TIMER_FREQ 120 | GIM_HV_MISC_FEAT_GUEST_CRASH_MSRS; 120 121 121 122 /* Hypervisor recommendations to the guest. */ … … 227 228 } 228 229 230 /* 231 * Setup non-zero MSRs. 232 */ 233 if (pHv->uMiscFeat & GIM_HV_MISC_FEAT_GUEST_CRASH_MSRS) 234 pHv->uCrashCtl = MSR_GIM_HV_CRASH_CTL_NOTIFY_BIT; 235 229 236 return VINF_SUCCESS; 230 237 } -
TabularUnified trunk/src/VBox/VMM/include/GIMHvInternal.h ¶
r56694 r57158 421 421 /** @} */ 422 422 423 /** @name Hyper-V MSR - Guest crash control (MSR_GIM_HV_CRASH_CTL). 424 * @{ 425 */ 426 /** The Crash Notify bit. */ 427 #define MSR_GIM_HV_CRASH_CTL_NOTIFY_BIT RT_BIT_64(63) 428 /** @} */ 429 430 /** @name Hyper-V MSR - Guest OS ID (MSR_GIM_HV_GUEST_OS_ID). 431 * @{ 432 */ 433 /** An open-source operating system. */ 434 #define MSR_GIM_HV_GUEST_OS_ID_IS_OPENSOURCE(a) RT_BOOL((a) & RT_BIT_64(63)) 435 /** Vendor ID. */ 436 #define MSR_GIM_HV_GUEST_OS_ID_VENDOR(a) (((a) >> 48) & 0xfff) 437 /** Guest OS variant, depending on the vendor ID. */ 438 #define MSR_GIM_HV_GUEST_OS_ID_OS_VARIANT(a) (((a) >> 40) & 0xff) 439 /** Guest OS major version. */ 440 #define MSR_GIM_HV_GUEST_OS_ID_MAJOR_VERSION(a) (((a) >> 32) & 0xff) 441 /** Guest OS minor version. */ 442 #define MSR_GIM_HV_GUEST_OS_ID_MINOR_VERSION(a) (((a) >> 24) & 0xff) 443 /** Guest OS service version (e.g. service pack number in case of Windows). */ 444 #define MSR_GIM_HV_GUEST_OS_ID_SERVICE_VERSION(a) (((a) >> 16) & 0xff) 445 /** Guest OS build number. */ 446 #define MSR_GIM_HV_GUEST_OS_ID_BUILD(a) ((a) & 0xffff) 447 /** @} */ 448 423 449 /** Hyper-V page size. */ 424 450 #define GIM_HV_PAGE_SIZE 0x1000 … … 483 509 /** @} */ 484 510 511 /** @name Guest Crash MSRs. 512 * @{ 513 */ 514 /** Guest crash control MSR. */ 515 uint64_t uCrashCtl; 516 /** Guest crash parameter 0 MSR. */ 517 uint64_t uCrashP0; 518 /** Guest crash parameter 1 MSR. */ 519 uint64_t uCrashP1; 520 /** Guest crash parameter 2 MSR. */ 521 uint64_t uCrashP2; 522 /** Guest crash parameter 3 MSR. */ 523 uint64_t uCrashP3; 524 /** Guest crash parameter 4 MSR. */ 525 uint64_t uCrashP4; 526 /** @} */ 527 485 528 /** Per-VM R0 Spinlock for protecting EMT writes to the TSC page. */ 486 529 RTSPINLOCK hSpinlockR0;
Note:
See TracChangeset
for help on using the changeset viewer.