Changeset 43657 in vbox
- Timestamp:
- Oct 16, 2012 3:34:05 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/cpum.mac
r41906 r43657 4 4 5 5 ; 6 ; Copyright (C) 2006-201 0Oracle Corporation6 ; Copyright (C) 2006-2012 Oracle Corporation 7 7 ; 8 8 ; This file is part of VirtualBox Open Source Edition (OSE), as … … 194 194 .msrSFMASK resb 8 195 195 .msrKERNELGSBASE resb 8 196 .au32SizePadding resb 32 196 .msrApicBase resb 8 197 .au32SizePadding resb 24 197 198 endstruc 198 199 … … 206 207 207 208 %endif 209 -
trunk/include/VBox/vmm/cpumctx.h
r42427 r43657 400 400 uint64_t msrSFMASK; /**< syscall flag mask. */ 401 401 uint64_t msrKERNELGSBASE; /**< swapgs exchange value. */ 402 uint64_t msrApicBase; /**< The local APIC base (IA32_APIC_BASE MSR). */ 402 403 /** @} */ 403 404 404 405 /** Size padding. */ 405 uint32_t au32SizePadding[ 8];406 uint32_t au32SizePadding[6]; 406 407 } CPUMCTX; 407 408 #pragma pack() -
trunk/include/VBox/vmm/hm_vmx.h
r43390 r43657 429 429 struct 430 430 { 431 /** Bits set here -must- be set in the correpsonding VM-execution controls. */ 431 432 uint32_t disallowed0; 433 /** Bits cleared here -must- be cleared in the corresponding VM-execution 434 * controls. */ 432 435 uint32_t allowed1; 433 436 } n; -
trunk/include/VBox/vmm/pdmapi.h
r40907 r43657 47 47 VMMDECL(bool) PDMHasIoApic(PVM pVM); 48 48 VMMDECL(int) PDMApicHasPendingIrq(PVM pVM, bool *pfPending); 49 VMMDECL(int) PDMApicSetBase(PVM pVM, uint64_t u64Base); 50 VMMDECL(int) PDMApicGetBase(PVM pVM, uint64_t *pu64Base); 49 VMMDECL(int) PDMApicSetBase(PVMCPU pVCpu, uint64_t u64Base); 50 VMMDECL(int) PDMApicGetBase(PVMCPU pVCpu, uint64_t *pu64Base); 51 VMMDECL(int) PDMApicGetBaseFromApic(PVMCPU pVCpu, uint64_t *pu64Base); 51 52 VMMDECL(int) PDMApicSetTPR(PVMCPU pVCpu, uint8_t u8TPR); 52 53 VMMDECL(int) PDMApicGetTPR(PVMCPU pVCpu, uint8_t *pu8TPR, bool *pfPending); -
trunk/include/VBox/vmm/pdmdev.h
r43472 r43657 1078 1078 * @returns Pending interrupt number. 1079 1079 * @param pDevIns Device instance of the APIC. 1080 * @param idCpu The VCPU Id. 1080 1081 * @param puTagSrc Where to return the tag source. 1081 1082 */ 1082 DECLR3CALLBACKMEMBER(int, pfnGetInterruptR3,(PPDMDEVINS pDevIns, uint32_t *puTagSrc));1083 DECLR3CALLBACKMEMBER(int, pfnGetInterruptR3,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t *puTagSrc)); 1083 1084 1084 1085 /** … … 1087 1088 * @returns Pending interrupt yes/no 1088 1089 * @param pDevIns Device instance of the APIC. 1089 */ 1090 DECLR3CALLBACKMEMBER(bool, pfnHasPendingIrqR3,(PPDMDEVINS pDevIns)); 1090 * @param idCpu The VCPU Id. 1091 */ 1092 DECLR3CALLBACKMEMBER(bool, pfnHasPendingIrqR3,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 1091 1093 1092 1094 /** … … 1094 1096 * 1095 1097 * @param pDevIns Device instance of the APIC. 1098 * @param idCpu The VCPU Id. 1096 1099 * @param u64Base The new base. 1097 1100 */ 1098 DECLR3CALLBACKMEMBER(void, pfnSetBaseR3,(PPDMDEVINS pDevIns, uint64_t u64Base));1101 DECLR3CALLBACKMEMBER(void, pfnSetBaseR3,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint64_t u64Base)); 1099 1102 1100 1103 /** … … 1103 1106 * @returns Current base. 1104 1107 * @param pDevIns Device instance of the APIC. 1105 */ 1106 DECLR3CALLBACKMEMBER(uint64_t, pfnGetBaseR3,(PPDMDEVINS pDevIns)); 1108 * @param idCpu The VCPU Id. 1109 */ 1110 DECLR3CALLBACKMEMBER(uint64_t, pfnGetBaseR3,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 1107 1111 1108 1112 /** … … 1110 1114 * 1111 1115 * @param pDevIns Device instance of the APIC. 1112 * @param idCpu VCPU id1116 * @param idCpu The VCPU id. 1113 1117 * @param u8TPR The new TPR. 1114 1118 */ -
trunk/src/VBox/Devices/PC/DevAPIC.cpp
r42574 r43657 461 461 { 462 462 /* for now we assume LAPIC physical id == CPU id */ 463 return VMCPUID(s->phys_id);463 return (VMCPUID)s->phys_id; 464 464 } 465 465 … … 596 596 597 597 598 PDMBOTHCBDECL(void) apicSetBase(PPDMDEVINS pDevIns, uint64_t val)598 PDMBOTHCBDECL(void) apicSetBase(PPDMDEVINS pDevIns, VMCPUID idCpu, uint64_t val) 599 599 { 600 600 APICDeviceInfo *pDev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *); 601 601 Assert(PDMCritSectIsOwner(pDev->CTX_SUFF(pCritSect))); 602 APICState *s = getLapic (pDev); /** @todo fix interface */602 APICState *s = getLapicById(pDev, idCpu); 603 603 Log(("apicSetBase: %016RX64\n", val)); 604 604 … … 640 640 } 641 641 642 PDMBOTHCBDECL(uint64_t) apicGetBase(PPDMDEVINS pDevIns )642 PDMBOTHCBDECL(uint64_t) apicGetBase(PPDMDEVINS pDevIns, VMCPUID idCpu) 643 643 { 644 644 APICDeviceInfo *pDev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *); 645 645 Assert(PDMCritSectIsOwner(pDev->CTX_SUFF(pCritSect))); 646 APICState *s = getLapic (pDev); /** @todo fix interface */646 APICState *s = getLapicById(pDev, idCpu); 647 647 LogFlow(("apicGetBase: %016llx\n", (uint64_t)s->apicbase)); 648 648 return s->apicbase; … … 1229 1229 1230 1230 /* Check if the APIC has a pending interrupt/if a TPR change would active one. */ 1231 PDMBOTHCBDECL(bool) apicHasPendingIrq(PPDMDEVINS pDevIns )1231 PDMBOTHCBDECL(bool) apicHasPendingIrq(PPDMDEVINS pDevIns, VMCPUID idCpu) 1232 1232 { 1233 1233 APICDeviceInfo *pDev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *); … … 1237 1237 /* We don't perform any locking here as that would cause a lot of contention for VT-x/AMD-V. */ 1238 1238 1239 APICState *s = getLapic (pDev); /** @todo fix interface */1239 APICState *s = getLapicById(pDev, idCpu); 1240 1240 1241 1241 /* … … 1437 1437 1438 1438 1439 PDMBOTHCBDECL(int) apicGetInterrupt(PPDMDEVINS pDevIns, uint32_t *puTagSrc)1439 PDMBOTHCBDECL(int) apicGetInterrupt(PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t *puTagSrc) 1440 1440 { 1441 1441 APICDeviceInfo *pDev = PDMINS_2_DATA(pDevIns, APICDeviceInfo *); … … 1450 1450 Assert(PDMCritSectIsOwner(pDev->CTX_SUFF(pCritSect))); 1451 1451 1452 APICState *s = getLapic (pDev); /** @todo fix interface */1452 APICState *s = getLapicById(pDev, idCpu); 1453 1453 1454 1454 if (!(s->spurious_vec & APIC_SV_ENABLE)) -
trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
r43387 r43657 862 862 863 863 case MSR_IA32_APICBASE: 864 rc = PDMApicGetBase(pVCpu->CTX_SUFF(pVM), puValue); 865 if (RT_SUCCESS(rc)) 866 rc = VINF_SUCCESS; 864 { 865 PVM pVM = pVCpu->CTX_SUFF(pVM); 866 if ( ( pVM->cpum.s.aGuestCpuIdStd[0].eax >= 1 867 && (pVM->cpum.s.aGuestCpuIdStd[1].edx & X86_CPUID_FEATURE_EDX_APIC)) 868 || ( pVM->cpum.s.aGuestCpuIdExt[0].eax >= 0x80000001 869 && pVM->cpum.s.enmGuestCpuVendor == CPUMCPUVENDOR_AMD 870 && (pVM->cpum.s.aGuestCpuIdExt[1].edx & X86_CPUID_AMD_FEATURE_EDX_APIC))) 871 { 872 *puValue = pVCpu->cpum.s.Guest.msrApicBase; 873 } 867 874 else 868 875 { … … 871 878 } 872 879 break; 880 } 873 881 874 882 case MSR_IA32_CR_PAT: … … 1122 1130 1123 1131 case MSR_IA32_APICBASE: 1124 rc = PDMApicSetBase(pVCpu ->CTX_SUFF(pVM), uValue);1132 rc = PDMApicSetBase(pVCpu, uValue); 1125 1133 if (rc != VINF_SUCCESS) 1126 1134 rc = VERR_CPUM_RAISE_GP_0; -
trunk/src/VBox/VMM/VMMAll/PDMAll.cpp
r41965 r43657 58 58 Assert(pVM->pdm.s.Apic.CTX_SUFF(pfnGetInterrupt)); 59 59 uint32_t uTagSrc; 60 int i = pVM->pdm.s.Apic.CTX_SUFF(pfnGetInterrupt)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), &uTagSrc);60 int i = pVM->pdm.s.Apic.CTX_SUFF(pfnGetInterrupt)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), pVCpu->idCpu, &uTagSrc); 61 61 AssertMsg(i <= 255 && i >= 0, ("i=%d\n", i)); 62 62 if (i >= 0) … … 215 215 * 216 216 * @returns VBox status code. 217 * @param pVM Pointer to the VM .217 * @param pVM Pointer to the VMCPU. 218 218 * @param u64Base The new base. 219 219 */ 220 VMMDECL(int) PDMApicSetBase(PVM pVM, uint64_t u64Base) 221 { 220 VMMDECL(int) PDMApicSetBase(PVMCPU pVCpu, uint64_t u64Base) 221 { 222 PVM pVM = pVCpu->CTX_SUFF(pVM); 222 223 if (pVM->pdm.s.Apic.CTX_SUFF(pDevIns)) 223 224 { 224 225 Assert(pVM->pdm.s.Apic.CTX_SUFF(pfnSetBase)); 225 226 pdmLock(pVM); 226 pVM->pdm.s.Apic.CTX_SUFF(pfnSetBase)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), u64Base); 227 pdmUnlock(pVM); 228 return VINF_SUCCESS; 229 } 230 return VERR_PDM_NO_APIC_INSTANCE; 231 } 232 233 234 /** 235 * Get the APIC base. 236 * 237 * @returns VBox status code. 238 * @param pVM Pointer to the VM. 227 pVM->pdm.s.Apic.CTX_SUFF(pfnSetBase)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), pVCpu->idCpu, u64Base); 228 229 /* Update CPUM's copy of the APIC base. */ 230 PCPUMCTX pCtx = CPUMQueryGuestCtxPtr(pVCpu); 231 Assert(pCtx); 232 pCtx->msrApicBase = pVM->pdm.s.Apic.CTX_SUFF(pfnGetBase)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), pVCpu->idCpu); 233 234 pdmUnlock(pVM); 235 return VINF_SUCCESS; 236 } 237 return VERR_PDM_NO_APIC_INSTANCE; 238 } 239 240 241 /** 242 * Get the APIC base from the APIC device. This is slow and involves 243 * taking the PDM lock, this is currently only used by CPUM to cache the APIC 244 * base once (during init./load state), all other callers should use 245 * PDMApicGetBase() and not this function. 246 * 247 * @returns VBox status code. 248 * @param pVM Pointer to the VMCPU. 239 249 * @param pu64Base Where to store the APIC base. 240 250 */ 241 VMMDECL(int) PDMApicGetBase(PVM pVM, uint64_t *pu64Base) 242 { 251 VMMDECL(int) PDMApicGetBase(PVMCPU pVCpu, uint64_t *pu64Base) 252 { 253 PVM pVM = pVCpu->CTX_SUFF(pVM); 243 254 if (pVM->pdm.s.Apic.CTX_SUFF(pDevIns)) 244 255 { 245 256 Assert(pVM->pdm.s.Apic.CTX_SUFF(pfnGetBase)); 246 257 pdmLock(pVM); 247 *pu64Base = pVM->pdm.s.Apic.CTX_SUFF(pfnGetBase)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns) );258 *pu64Base = pVM->pdm.s.Apic.CTX_SUFF(pfnGetBase)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), pVCpu->idCpu); 248 259 pdmUnlock(pVM); 249 260 return VINF_SUCCESS; … … 258 269 * 259 270 * @returns VINF_SUCCESS or VERR_PDM_NO_APIC_INSTANCE. 260 * @param p DevIns Device instance of the APIC.271 * @param pVCpu Pointer to the VMCPU. 261 272 * @param pfPending Pending state (out). 262 273 */ 263 VMMDECL(int) PDMApicHasPendingIrq(PVM pVM, bool *pfPending) 264 { 274 VMMDECL(int) PDMApicHasPendingIrq(PVMCPU pVCpu, bool *pfPending) 275 { 276 PVM pVM = pVCpu->CTX_SUFF(pVM); 265 277 if (pVM->pdm.s.Apic.CTX_SUFF(pDevIns)) 266 278 { 267 279 Assert(pVM->pdm.s.Apic.CTX_SUFF(pfnSetTPR)); 268 280 pdmLock(pVM); 269 *pfPending = pVM->pdm.s.Apic.CTX_SUFF(pfnHasPendingIrq)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns) );281 *pfPending = pVM->pdm.s.Apic.CTX_SUFF(pfnHasPendingIrq)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), pVCpu->idCpu); 270 282 pdmUnlock(pVM); 271 283 return VINF_SUCCESS; … … 316 328 *pu8TPR = pVM->pdm.s.Apic.CTX_SUFF(pfnGetTPR)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), pVCpu->idCpu); 317 329 if (pfPending) 318 *pfPending = pVM->pdm.s.Apic.CTX_SUFF(pfnHasPendingIrq)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns) );330 *pfPending = pVM->pdm.s.Apic.CTX_SUFF(pfnHasPendingIrq)(pVM->pdm.s.Apic.CTX_SUFF(pDevIns), pVCpu->idCpu); 319 331 return VINF_SUCCESS; 320 332 } -
trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp
r43509 r43657 1952 1952 { 1953 1953 RTGCPHYS GCPhysApicBase, GCPhys; 1954 PDMApicGetBase(pVM, &GCPhysApicBase); /** @todo cache this */1954 GCPhysApicBase = pCtx->msrApicBase; 1955 1955 GCPhysApicBase &= PAGE_BASE_GC_MASK; 1956 1956 … … 2117 2117 && pVM->hm.s.cPatches < RT_ELEMENTS(pVM->hm.s.aPatches)) 2118 2118 { 2119 RTGCPHYS GCPhysApicBase; 2120 PDMApicGetBase(pVM, &GCPhysApicBase); /** @todo cache this */ 2119 RTGCPHYS GCPhysApicBase = pCtx->msrApicBase; 2121 2120 GCPhysApicBase &= PAGE_BASE_GC_MASK; 2122 2121 -
trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
r43566 r43657 1166 1166 Assert((TRPMQueryTrap(pVCpu, NULL, NULL) == VERR_TRPM_NO_ACTIVE_TRAP)); 1167 1167 1168 /* 1168 /* 1169 1169 * Clear the pending event and move it over to TRPM for the rest 1170 1170 * of the world to see. … … 3505 3505 { 3506 3506 RTGCPHYS GCPhysApicBase, GCPhys; 3507 PDMApicGetBase(pVM, &GCPhysApicBase); /** @todo cache this */3507 GCPhysApicBase = pCtx->msrApicBase; 3508 3508 GCPhysApicBase &= PAGE_BASE_GC_MASK; 3509 3509 … … 3536 3536 { 3537 3537 RTGCPHYS GCPhysApicBase, GCPhys; 3538 PDMApicGetBase(pVM, &GCPhysApicBase); /* @todo cache this */3538 GCPhysApicBase = pCtx->msrApicBase; 3539 3539 GCPhysApicBase &= PAGE_BASE_GC_MASK; 3540 3540 … … 4048 4048 { 4049 4049 RTGCPHYS GCPhysApicBase; 4050 PDMApicGetBase(pVM, &GCPhysApicBase); /* @todo cache this */4050 GCPhysApicBase = pCtx->msrApicBase; 4051 4051 GCPhysApicBase &= PAGE_BASE_GC_MASK; 4052 4052 if (GCPhys == GCPhysApicBase + 0x80) … … 4108 4108 && (pVM->hm.s.vmx.msr.vmx_proc_ctls2.n.allowed1 & VMX_VMCS_CTRL_PROC_EXEC2_VIRT_APIC)) 4109 4109 { 4110 RTGCPHYS GCPhysApicBase; 4111 PDMApicGetBase(pVM, &GCPhysApicBase); /* @todo cache this */ 4110 RTGCPHYS GCPhysApicBase = pCtx->msrApicBase; 4112 4111 GCPhysApicBase &= PAGE_BASE_GC_MASK; 4113 4112 if (GCPhys == GCPhysApicBase + 0x80) … … 4648 4647 case VMX_APIC_ACCESS_TYPE_LINEAR_WRITE: 4649 4648 { 4650 RTGCPHYS GCPhys; 4651 PDMApicGetBase(pVM, &GCPhys); 4649 RTGCPHYS GCPhys = pCtx->msrApicBase; 4652 4650 GCPhys &= PAGE_BASE_GC_MASK; 4653 4651 GCPhys += VMX_EXIT_QUALIFICATION_APIC_ACCESS_OFFSET(exitQualification); -
trunk/src/VBox/VMM/VMMR3/CPUM.cpp
r43387 r43657 40 40 #include <VBox/vmm/cpumctx-v1_6.h> 41 41 #include <VBox/vmm/pgm.h> 42 #include <VBox/vmm/pdmapi.h> 42 43 #include <VBox/vmm/mm.h> 43 44 #include <VBox/vmm/selm.h> … … 1490 1491 { 1491 1492 /** @todo anything different for VCPU > 0? */ 1492 PCPUMCTX pCtx = CPUMQueryGuestCtxPtr(pVCpu);1493 PCPUMCTX pCtx = &pVCpu->cpum.s.Guest; 1493 1494 1494 1495 /* … … 1575 1576 */ 1576 1577 pCtx->msrEFER = 0; 1578 1579 /* 1580 * Get the APIC base MSR from the APIC device. For historical reasons (saved state), the APIC base 1581 * continues to reside in the APIC device and we cache it here in the VCPU for all further accesses. 1582 */ 1583 PDMApicGetBase(pVCpu, &pCtx->msrApicBase); 1577 1584 } 1578 1585 … … 1591 1598 1592 1599 #ifdef VBOX_WITH_CRASHDUMP_MAGIC 1593 PCPUMCTX pCtx = CPUMQueryGuestCtxPtr(&pVM->aCpus[i]);1600 PCPUMCTX pCtx = &pVM->aCpus[i].cpum.s.Guest; 1594 1601 1595 1602 /* Magic marker for searching in crash dumps. */ … … 2702 2709 } 2703 2710 2704 /* Notify PGM of the NXE states in case they've changed. */2705 2711 for (VMCPUID iCpu = 0; iCpu < pVM->cCpus; iCpu++) 2712 { 2713 /* Notify PGM of the NXE states in case they've changed. */ 2706 2714 PGMNotifyNxeChanged(&pVM->aCpus[iCpu], !!(pVM->aCpus[iCpu].cpum.s.Guest.msrEFER & MSR_K6_EFER_NXE)); 2715 2716 /* Cache the local APIC base from the APIC device. During init. this is done in CPUMR3ResetCpu(). */ 2717 PDMApicGetBase(&pVM->aCpus[iCpu], &pVM->aCpus[iCpu].cpum.s.Guest.msrApicBase); 2718 } 2707 2719 return VINF_SUCCESS; 2708 2720 } … … 3064 3076 pHlp->pfnPrintf(pHlp, "Guest CPUM (VCPU %d) state: %s\n", pVCpu->idCpu, pszComment); 3065 3077 3066 PCPUMCTX pCtx = CPUMQueryGuestCtxPtr(pVCpu);3078 PCPUMCTX pCtx = &pVCpu->cpum.s.Guest; 3067 3079 cpumR3InfoOne(pVM, pCtx, CPUMCTX2CORE(pCtx), pHlp, enmType, ""); 3068 3080 } -
trunk/src/VBox/VMM/VMMR3/VM.cpp
r43387 r43657 2858 2858 CPUMR3Reset(pVM); 2859 2859 } 2860 CPUMR3ResetCpu(pVCpu);2861 2860 if (pVCpu->idCpu == 0) 2862 2861 { -
trunk/src/VBox/VMM/include/CPUMInternal.mac
r41932 r43657 196 196 .Hyper.msrSFMASK resb 8 197 197 .Hyper.msrKERNELGSBASE resb 8 198 .Hyper.msrApicBase resb 8 198 199 199 200 ; … … 416 417 .Guest.msrSFMASK resb 8 417 418 .Guest.msrKERNELGSBASE resb 8 419 .Guest.msrApicBase resb 8 418 420 419 421 -
trunk/src/VBox/VMM/include/PDMInternal.h
r40920 r43657 488 488 PPDMDEVINSR3 pDevInsR3; 489 489 /** @copydoc PDMAPICREG::pfnGetInterruptR3 */ 490 DECLR3CALLBACKMEMBER(int, pfnGetInterruptR3,(PPDMDEVINS pDevIns, uint32_t *puTagSrc));490 DECLR3CALLBACKMEMBER(int, pfnGetInterruptR3,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t *puTagSrc)); 491 491 /** @copydoc PDMAPICREG::pfnHasPendingIrqR3 */ 492 DECLR3CALLBACKMEMBER(bool, pfnHasPendingIrqR3,(PPDMDEVINS pDevIns ));492 DECLR3CALLBACKMEMBER(bool, pfnHasPendingIrqR3,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 493 493 /** @copydoc PDMAPICREG::pfnSetBaseR3 */ 494 DECLR3CALLBACKMEMBER(void, pfnSetBaseR3,(PPDMDEVINS pDevIns, uint64_t u64Base));494 DECLR3CALLBACKMEMBER(void, pfnSetBaseR3,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint64_t u64Base)); 495 495 /** @copydoc PDMAPICREG::pfnGetBaseR3 */ 496 DECLR3CALLBACKMEMBER(uint64_t, pfnGetBaseR3,(PPDMDEVINS pDevIns ));496 DECLR3CALLBACKMEMBER(uint64_t, pfnGetBaseR3,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 497 497 /** @copydoc PDMAPICREG::pfnSetTPRR3 */ 498 498 DECLR3CALLBACKMEMBER(void, pfnSetTPRR3,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t u8TPR)); … … 512 512 PPDMDEVINSR0 pDevInsR0; 513 513 /** @copydoc PDMAPICREG::pfnGetInterruptR3 */ 514 DECLR0CALLBACKMEMBER(int, pfnGetInterruptR0,(PPDMDEVINS pDevIns, uint32_t *puTagSrc));514 DECLR0CALLBACKMEMBER(int, pfnGetInterruptR0,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t *puTagSrc)); 515 515 /** @copydoc PDMAPICREG::pfnHasPendingIrqR3 */ 516 DECLR0CALLBACKMEMBER(bool, pfnHasPendingIrqR0,(PPDMDEVINS pDevIns ));516 DECLR0CALLBACKMEMBER(bool, pfnHasPendingIrqR0,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 517 517 /** @copydoc PDMAPICREG::pfnSetBaseR3 */ 518 DECLR0CALLBACKMEMBER(void, pfnSetBaseR0,(PPDMDEVINS pDevIns, uint64_t u64Base));518 DECLR0CALLBACKMEMBER(void, pfnSetBaseR0,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint64_t u64Base)); 519 519 /** @copydoc PDMAPICREG::pfnGetBaseR3 */ 520 DECLR0CALLBACKMEMBER(uint64_t, pfnGetBaseR0,(PPDMDEVINS pDevIns ));520 DECLR0CALLBACKMEMBER(uint64_t, pfnGetBaseR0,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 521 521 /** @copydoc PDMAPICREG::pfnSetTPRR3 */ 522 522 DECLR0CALLBACKMEMBER(void, pfnSetTPRR0,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t u8TPR)); … … 536 536 PPDMDEVINSRC pDevInsRC; 537 537 /** @copydoc PDMAPICREG::pfnGetInterruptR3 */ 538 DECLRCCALLBACKMEMBER(int, pfnGetInterruptRC,(PPDMDEVINS pDevIns, uint32_t *puTagSrc));538 DECLRCCALLBACKMEMBER(int, pfnGetInterruptRC,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t *puTagSrc)); 539 539 /** @copydoc PDMAPICREG::pfnHasPendingIrqR3 */ 540 DECLRCCALLBACKMEMBER(bool, pfnHasPendingIrqRC,(PPDMDEVINS pDevIns ));540 DECLRCCALLBACKMEMBER(bool, pfnHasPendingIrqRC,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 541 541 /** @copydoc PDMAPICREG::pfnSetBaseR3 */ 542 DECLRCCALLBACKMEMBER(void, pfnSetBaseRC,(PPDMDEVINS pDevIns, uint64_t u64Base));542 DECLRCCALLBACKMEMBER(void, pfnSetBaseRC,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint64_t u64Base)); 543 543 /** @copydoc PDMAPICREG::pfnGetBaseR3 */ 544 DECLRCCALLBACKMEMBER(uint64_t, pfnGetBaseRC,(PPDMDEVINS pDevIns ));544 DECLRCCALLBACKMEMBER(uint64_t, pfnGetBaseRC,(PPDMDEVINS pDevIns, VMCPUID idCpu)); 545 545 /** @copydoc PDMAPICREG::pfnSetTPRR3 */ 546 546 DECLRCCALLBACKMEMBER(void, pfnSetTPRRC,(PPDMDEVINS pDevIns, VMCPUID idCpu, uint8_t u8TPR)); -
trunk/src/recompiler/VBoxRecompiler.c
r43394 r43657 4464 4464 { 4465 4465 uint64_t u64; 4466 int rc = PDMApicGetBase(env->pVM, &u64);4466 int rc = CPUMQueryGuestMsr(env->pVCpu, MSR_IA32_APICBASE, &u64); 4467 4467 if (RT_SUCCESS(rc)) 4468 4468 {
Note:
See TracChangeset
for help on using the changeset viewer.