Changeset 19476 in vbox
- Timestamp:
- May 7, 2009 11:06:26 AM (16 years ago)
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMM.cpp
r19462 r19476 1147 1147 } 1148 1148 1149 /** 1150 * On VCPU worker for VMMSendSipi. 1151 * 1152 * @param pVM The VM to operate on. 1153 * @param idCpu Virtual CPU to perform SIPI on 1154 * @param uVector SIPI vector 1155 */ 1156 DECLCALLBACK(int) vmmR3SendSipi(PVM pVM, VMCPUID idCpu, uint32_t uVector) 1157 { 1158 PVMCPU pVCpu = VMMGetCpuById(pVM, idCpu); 1159 VMCPU_ASSERT_EMT(pVCpu); 1160 1161 /** @todo what are we supposed to do if the processor is already running? */ 1162 CPUMSetGuestCS(pVCpu, uVector * 0x100); 1163 CPUMSetGuestEIP(pVCpu, 0); 1164 1165 # if 1 /* If we keep the EMSTATE_WAIT_SIPI method, then move this to EM.cpp. */ 1166 return VINF_EM_RESCHEDULE; 1167 # else /* And if we go the VMCPU::enmState way it can stay here. */ 1168 VMCPU_ASSERT_STATE(pVCpu, VMCPUSTATE_STOPPED); 1169 VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED); 1170 return VINF_SUCCESS; 1171 # endif 1172 } 1173 1174 DECLCALLBACK(int) vmmR3SendInitIpi(PVM pVM, VMCPUID idCpu) 1175 { 1176 PVMCPU pVCpu = VMMGetCpuById(pVM, idCpu); 1177 VMCPU_ASSERT_EMT(pVCpu); 1178 1179 /** @todo: reset CPU and halt till SIPI */ 1180 1181 return VINF_SUCCESS; 1182 } 1183 1184 /** 1185 * Sends SIPI to the virtual CPU by setting CS:EIP into vector-dependent state 1186 * and unhalting processor 1187 * 1188 * @param pVM The VM to operate on. 1189 * @param idCpu Virtual CPU to perform SIPI on 1190 * @param uVector SIPI vector 1191 */ 1192 VMMR3DECL(void) VMMR3SendSipi(PVM pVM, VMCPUID idCpu, uint32_t uVector) 1193 { 1194 AssertReturnVoid(idCpu < pVM->cCPUs); 1195 1196 PVMREQ pReq; 1197 int rc = VMR3ReqCallU(pVM->pUVM, idCpu, &pReq, RT_INDEFINITE_WAIT, 0, 1198 (PFNRT)vmmR3SendSipi, 3, pVM, idCpu, uVector); 1199 AssertRC(rc); 1200 VMR3ReqFree(pReq); 1201 } 1202 1203 /** 1204 * Sends init IPI to the virtual CPU. 1205 * 1206 * @param pVM The VM to operate on. 1207 * @param idCpu Virtual CPU to perform int IPI on 1208 */ 1209 VMMR3DECL(void) VMMR3SendInitIpi(PVM pVM, VMCPUID idCpu) 1210 { 1211 AssertReturnVoid(idCpu < pVM->cCPUs); 1212 1213 PVMREQ pReq; 1214 int rc = VMR3ReqCallU(pVM->pUVM, idCpu, &pReq, RT_INDEFINITE_WAIT, 0, 1215 (PFNRT)vmmR3SendInitIpi, 2, pVM, idCpu); 1216 AssertRC(rc); 1217 VMR3ReqFree(pReq); 1218 } 1219 1149 1220 1150 1221 /** -
trunk/src/VBox/VMM/VMMAll/VMMAll.cpp
r19475 r19476 72 72 #endif 73 73 } 74 75 76 #ifdef IN_RING377 /**78 * On VCPU worker for VMMSendSipi.79 *80 * @param pVM The VM to operate on.81 * @param idCpu Virtual CPU to perform SIPI on82 * @param uVector SIPI vector83 */84 DECLCALLBACK(int) vmmR3SendSipi(PVM pVM, VMCPUID idCpu, uint32_t uVector)85 {86 PVMCPU pVCpu = VMMGetCpuById(pVM, idCpu);87 VMCPU_ASSERT_EMT(pVCpu);88 89 /** @todo what are we supposed to do if the processor is already running? */90 CPUMSetGuestCS(pVCpu, uVector * 0x100);91 CPUMSetGuestEIP(pVCpu, 0);92 93 # if 1 /* If we keep the EMSTATE_WAIT_SIPI method, then move this to EM.cpp. */94 return VINF_EM_RESCHEDULE;95 # else /* And if we go the VMCPU::enmState way it can stay here. */96 VMCPU_ASSERT_STATE(pVCpu, VMCPUSTATE_STOPPED);97 VMCPU_SET_STATE(pVCpu, VMCPUSTATE_STARTED);98 return VINF_SUCCESS;99 # endif100 }101 102 DECLCALLBACK(int) vmmR3SendInitIpi(PVM pVM, VMCPUID idCpu)103 {104 PVMCPU pVCpu = VMMGetCpuById(pVM, idCpu);105 VMCPU_ASSERT_EMT(pVCpu);106 107 /** @todo: reset CPU and halt till SIPI */108 109 return VINF_SUCCESS;110 }111 112 /**113 * Sends SIPI to the virtual CPU by setting CS:EIP into vector-dependent state114 * and unhalting processor115 *116 * @param pVM The VM to operate on.117 * @param idCpu Virtual CPU to perform SIPI on118 * @param uVector SIPI vector119 */120 VMMR3DECL(void) VMMR3SendSipi(PVM pVM, VMCPUID idCpu, uint32_t uVector)121 {122 AssertReturnVoid(idCpu < pVM->cCPUs);123 124 PVMREQ pReq;125 int rc = VMR3ReqCallU(pVM->pUVM, idCpu, &pReq, RT_INDEFINITE_WAIT, 0,126 (PFNRT)vmmR3SendSipi, 3, pVM, idCpu, uVector);127 AssertRC(rc);128 VMR3ReqFree(pReq);129 }130 131 /**132 * Sends init IPI to the virtual CPU.133 *134 * @param pVM The VM to operate on.135 * @param idCpu Virtual CPU to perform int IPI on136 */137 VMMR3DECL(void) VMMR3SendInitIpi(PVM pVM, VMCPUID idCpu)138 {139 AssertReturnVoid(idCpu < pVM->cCPUs);140 141 PVMREQ pReq;142 int rc = VMR3ReqCallU(pVM->pUVM, idCpu, &pReq, RT_INDEFINITE_WAIT, 0,143 (PFNRT)vmmR3SendInitIpi, 2, pVM, idCpu);144 AssertRC(rc);145 VMR3ReqFree(pReq);146 }147 #endif /* IN_RING3 */148 74 149 75
Note:
See TracChangeset
for help on using the changeset viewer.