Changeset 19437 in vbox
- Timestamp:
- May 6, 2009 2:34:05 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/pdmdev.h
r19366 r19437 1159 1159 DECLRCCALLBACKMEMBER(VMCPUID, pfnGetCpuId,(PPDMDEVINS pDevIns)); 1160 1160 1161 /** 1162 * Sends SIPI to given virtual CPU. 1163 * 1164 * @param pDevIns The APIC device instance. 1165 * @param idCpu Virtual CPU to perform SIPI on 1166 * @param iVector SIPI vector 1167 */ 1168 DECLRCCALLBACKMEMBER(void, pfnSendSipi,(PPDMDEVINS pDevIns, VMCPUID idCpu, int iVector)); 1169 1161 1170 /** Just a safety precaution. */ 1162 1171 uint32_t u32TheEnd; … … 1227 1236 DECLR0CALLBACKMEMBER(VMCPUID, pfnGetCpuId,(PPDMDEVINS pDevIns)); 1228 1237 1238 /** 1239 * Sends SIPI to given virtual CPU. 1240 * 1241 * @param pDevIns The APIC device instance. 1242 * @param idCpu Virtual CPU to perform SIPI on 1243 * @param iVector SIPI vector 1244 */ 1245 DECLR0CALLBACKMEMBER(void, pfnSendSipi,(PPDMDEVINS pDevIns, VMCPUID idCpu, int iVector)); 1246 1229 1247 /** Just a safety precaution. */ 1230 1248 uint32_t u32TheEnd; … … 1293 1311 */ 1294 1312 DECLR3CALLBACKMEMBER(VMCPUID, pfnGetCpuId,(PPDMDEVINS pDevIns)); 1313 1314 /** 1315 * Sends SIPI to given virtual CPU. 1316 * 1317 * @param pDevIns The APIC device instance. 1318 * @param idCpu Virtual CPU to perform SIPI on 1319 * @param iVector SIPI vector 1320 */ 1321 DECLR3CALLBACKMEMBER(void, pfnSendSipi,(PPDMDEVINS pDevIns, VMCPUID idCpu, int iVector)); 1295 1322 1296 1323 /** -
trunk/include/VBox/vmm.h
r19406 r19437 117 117 VMMDECL(uint32_t) VMMGetSvnRev(void); 118 118 VMMDECL(VMMSWITCHER) VMMGetSwitcher(PVM pVM); 119 VMMDECL(void) VMMSendSipi(PVM pVM, VMCPUID idCpu, int iVector); 119 120 120 121 /** @def VMMIsHwVirtExtForced -
trunk/src/VBox/Devices/PC/DevAPIC.cpp
r17968 r19437 363 363 getCpuFromLapic(dev, s)); 364 364 } 365 366 DECLINLINE(void) cpuSendSipi(APICDeviceInfo* dev, APICState *s, int vector) 367 { 368 Log2(("apic: send SIPI vector=%d\n", vector)); 369 dev->CTX_SUFF(pApicHlp)->pfnSendSipi(dev->CTX_SUFF(pDevIns), 370 getCpuFromLapic(dev, s), 371 vector); 372 } 373 374 365 375 366 376 DECLINLINE(uint32_t) getApicEnableBits(APICDeviceInfo* dev) … … 1081 1091 /** @todo: init CPUs */ 1082 1092 LogRel(("[SMP] apic_startup: %d on CPUs %d\n", vector_num, s->id)); 1093 cpuSendSipi(dev, s, vector_num); 1083 1094 #endif 1084 1095 } -
trunk/src/VBox/VMM/PDMDevMiscHlp.cpp
r19400 r19437 230 230 } 231 231 232 /** @copydoc PDMAPICHLPR3::pfnSendSipi */ 233 static DECLCALLBACK(void) pdmR3ApicHlp_SendSipi(PPDMDEVINS pDevIns, VMCPUID idCpu, int iVector) 234 { 235 PDMDEV_ASSERT_DEVINS(pDevIns); 236 VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3); 237 238 PVM pVM = pDevIns->Internal.s.pVMR3; 239 PVMCPU pCpu = VMMGetCpuById(pVM, idCpu); 240 CPUMSetGuestCS(pCpu, iVector * 0x100); 241 CPUMSetGuestEIP(pCpu, 0); 242 /** @todo: how do I unhalt VCPU? */ 243 } 232 244 233 245 /** @copydoc PDMAPICHLPR3::pfnGetRCHelpers */ … … 273 285 pdmR3ApicHlp_Unlock, 274 286 pdmR3ApicHlp_GetCpuId, 287 pdmR3ApicHlp_SendSipi, 275 288 pdmR3ApicHlp_GetRCHelpers, 276 289 pdmR3ApicHlp_GetR0Helpers, -
trunk/src/VBox/VMM/VMMAll/VMMAll.cpp
r19434 r19437 73 73 } 74 74 75 76 /** 77 * Sends SIPI to the virtual CPU by setting CS:EIP into vector-dependent state 78 * and unhalting processor 79 * 80 * @param pVM The VM to operate on. 81 * @param idCpu Virtual CPU to perform SIPI on 82 * @param iVector SIPI vector 83 */ 84 VMMDECL(void) VMMSendSipi(PVM pVM, VMCPUID idCpu, int iVector) 85 { 86 PVMCPU pCpu = VMMGetCpuById(pVM, idCpu); 87 CPUMSetGuestCS(pCpu, iVector * 0x100); 88 CPUMSetGuestEIP(pCpu, 0); 89 /** @todo: how do I unhalt VCPU? */ 90 } 75 91 76 92 /** -
trunk/src/VBox/VMM/VMMGC/PDMGCDevice.cpp
r19141 r19437 92 92 static DECLCALLBACK(void) pdmRCApicHlp_Unlock(PPDMDEVINS pDevIns); 93 93 static DECLCALLBACK(VMCPUID) pdmRCApicHlp_GetCpuId(PPDMDEVINS pDevIns); 94 static DECLCALLBACK(void) pdmRCApicHlp_SendSipi(PPDMDEVINS pDevIns, VMCPUID idCpu, int iVector); 94 95 /** @} */ 95 96 … … 167 168 pdmRCApicHlp_Unlock, 168 169 pdmRCApicHlp_GetCpuId, 170 pdmRCApicHlp_SendSipi, 169 171 PDM_APICHLPRC_VERSION 170 172 }; … … 487 489 PDMDEV_ASSERT_DEVINS(pDevIns); 488 490 return VMMGetCpuId(pDevIns->Internal.s.pVMRC); 491 } 492 493 /** @copydoc PDMAPICHLPR3::pfnSendSipi */ 494 static DECLCALLBACK(void) pdmRCApicHlp_SendSipi(PPDMDEVINS pDevIns, VMCPUID idCpu, int iVector) 495 { 496 /* we shall never send a SIPI in raw mode */ 497 AssertFailed(); 489 498 } 490 499 -
trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp
r19141 r19437 94 94 static DECLCALLBACK(void) pdmR0ApicHlp_Unlock(PPDMDEVINS pDevIns); 95 95 static DECLCALLBACK(VMCPUID) pdmR0ApicHlp_GetCpuId(PPDMDEVINS pDevIns); 96 static DECLCALLBACK(void) pdmR0ApicHlp_SendSipi(PPDMDEVINS pDevIns, VMCPUID idCpu, int iVector); 96 97 /** @} */ 97 98 … … 170 171 pdmR0ApicHlp_Unlock, 171 172 pdmR0ApicHlp_GetCpuId, 173 pdmR0ApicHlp_SendSipi, 172 174 PDM_APICHLPR0_VERSION 173 175 }; … … 503 505 } 504 506 507 /** @copydoc PDMAPICHLPR0::pfnSendSipi */ 508 static DECLCALLBACK(void) pdmR0ApicHlp_SendSipi(PPDMDEVINS pDevIns, VMCPUID idCpu, int iVector) 509 { 510 PDMDEV_ASSERT_DEVINS(pDevIns); 511 return VMMSendSipi(pDevIns->Internal.s.pVMR0, idCpu, iVector); 512 } 505 513 506 514 /** @copydoc PDMIOAPICHLPR0::pfnApicBusDeliver */
Note:
See TracChangeset
for help on using the changeset viewer.