Changeset 61776 in vbox for trunk/src/VBox/VMM/VMMRC
- Timestamp:
- Jun 20, 2016 11:25:06 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 108168
- Location:
- trunk/src/VBox/VMM/VMMRC
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMRC/CPUMRCPatchHlp.asm
r54763 r61776 24 24 %include "VBox/vmm/vm.mac" 25 25 %include "VMMRC.mac" 26 %include "iprt/x86.mac" 26 27 27 28 … … 69 70 ; Find the middle element 70 71 mov ebx, edx 71 cpuid_lookup_leaf_ebx_lo eaded:72 cpuid_lookup_leaf_ebx_loaded: 72 73 sub ebx, ecx 73 74 shr ebx, 1 + CPUMCPUIDLEAF_SIZE_LOG2 … … 83 84 cmp ecx, ebx ; start == middle? if so, we failed. 84 85 mov edx, ebx ; end = middle; 85 jne cpuid_lookup_leaf_ebx_lo eaded86 jne cpuid_lookup_leaf_ebx_loaded 86 87 jmp cpuid_unknown 87 88 … … 179 180 180 181 ; 181 ; Normal return .182 ; Normal return unless flags (we ignore APIC_ID as we only have a single CPU with ID 0). 182 183 ; 183 184 cpuid_fetch: 185 test dword [ss:ebx + CPUMCPUIDLEAF.fFlags], CPUMCPUIDLEAF_F_CONTAINS_APIC | CPUMCPUIDLEAF_F_CONTAINS_OSXSAVE 186 jnz cpuid_fetch_with_flags 184 187 mov edx, [ss:ebx + CPUMCPUIDLEAF.uEdx] 185 188 mov ecx, [ss:ebx + CPUMCPUIDLEAF.uEcx] … … 191 194 add esp, 12 192 195 ret 196 197 198 ; 199 ; Need to adjust the result according to VCpu state. 200 ; 201 ; APIC: CPUID[0x00000001].EDX[9] &= pVCpu->cpum.s.fCpuIdApicFeatureVisible; 202 ; CPUID[0x80000001].EDX[9] &= pVCpu->cpum.s.fCpuIdApicFeatureVisible; 203 ; 204 ; OSXSAVE: CPUID[0x00000001].ECX[27] = CR4.OSXSAVE; 205 ; 206 cpuid_fetch_with_flags: 207 mov edx, [ss:ebx + CPUMCPUIDLEAF.uEdx] 208 mov ecx, [ss:ebx + CPUMCPUIDLEAF.uEcx] 209 210 mov eax, [ss:edi + VM.offVMCPU] 211 212 ; APIC 213 test dword [ss:ebx + CPUMCPUIDLEAF.fFlags], CPUMCPUIDLEAF_F_CONTAINS_APIC 214 jz cpuid_fetch_with_flags_done_apic 215 test byte [ss:edi + eax + VMCPU.cpum + CPUMCPU.fCpuIdApicFeatureVisible], 0ffh 216 jnz cpuid_fetch_with_flags_done_apic 217 and edx, ~X86_CPUID_FEATURE_EDX_APIC 218 cpuid_fetch_with_flags_done_apic: 219 220 ; OSXSAVE 221 test dword [ss:ebx + CPUMCPUIDLEAF.fFlags], CPUMCPUIDLEAF_F_CONTAINS_OSXSAVE 222 jz cpuid_fetch_with_flags_done_osxsave 223 and ecx, ~X86_CPUID_FEATURE_ECX_OSXSAVE 224 test dword [ss:edi + eax + VMCPU.cpum + CPUMCPU.Guest.cr4], X86_CR4_OSXSAVE 225 jz cpuid_fetch_with_flags_done_osxsave 226 or ecx, X86_CPUID_FEATURE_ECX_OSXSAVE 227 cpuid_fetch_with_flags_done_osxsave: 228 229 ; Load the two remaining registers and jump to the common normal exit. 230 mov eax, [ss:ebx + CPUMCPUIDLEAF.uEax] 231 mov ebx, [ss:ebx + CPUMCPUIDLEAF.uEbx] 232 jmp cpuid_done 233 193 234 ENDPROC CPUMPatchHlpCpuId 194 235 -
trunk/src/VBox/VMM/VMMRC/PDMRCDevice.cpp
r61735 r61776 602 602 603 603 604 /** @interface_method_impl{PDMAPICHLPRC,pfnChangeFeature} */605 static DECLCALLBACK(void) pdmRCApicHlp_ChangeFeature(PPDMDEVINS pDevIns, PDMAPICMODE enmMode)606 {607 PDMDEV_ASSERT_DEVINS(pDevIns);608 LogFlow(("pdmRCApicHlp_ChangeFeature: caller=%p/%d: mode=%d\n", pDevIns, pDevIns->iInstance, (int)enmMode));609 switch (enmMode)610 {611 case PDMAPICMODE_NONE:612 CPUMClearGuestCpuIdFeature(pDevIns->Internal.s.pVMRC, CPUMCPUIDFEATURE_APIC);613 CPUMClearGuestCpuIdFeature(pDevIns->Internal.s.pVMRC, CPUMCPUIDFEATURE_X2APIC);614 break;615 case PDMAPICMODE_APIC:616 CPUMSetGuestCpuIdFeature(pDevIns->Internal.s.pVMRC, CPUMCPUIDFEATURE_APIC);617 CPUMClearGuestCpuIdFeature(pDevIns->Internal.s.pVMRC, CPUMCPUIDFEATURE_X2APIC);618 break;619 case PDMAPICMODE_X2APIC:620 CPUMSetGuestCpuIdFeature(pDevIns->Internal.s.pVMRC, CPUMCPUIDFEATURE_X2APIC);621 CPUMSetGuestCpuIdFeature(pDevIns->Internal.s.pVMRC, CPUMCPUIDFEATURE_APIC);622 break;623 default:624 AssertMsgFailed(("Unknown APIC mode: %d\n", (int)enmMode));625 }626 }627 628 629 604 /** @interface_method_impl{PDMAPICHLPRC,pfnLock} */ 630 605 static DECLCALLBACK(int) pdmRCApicHlp_Lock(PPDMDEVINS pDevIns, int rc) … … 661 636 pdmRCApicHlp_BusBroadcastEoi, 662 637 pdmRCApicHlp_CalcIrqTag, 663 pdmRCApicHlp_ChangeFeature,664 638 pdmRCApicHlp_Lock, 665 639 pdmRCApicHlp_Unlock,
Note:
See TracChangeset
for help on using the changeset viewer.