VirtualBox

Changeset 19476 in vbox


Ignore:
Timestamp:
May 7, 2009 11:06:26 AM (16 years ago)
Author:
vboxsync
Message:

Moved VMMR3SendInitIpi/Sipi

Location:
trunk/src/VBox/VMM
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMM.cpp

    r19462 r19476  
    11471147}
    11481148
     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 */
     1156DECLCALLBACK(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
     1174DECLCALLBACK(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 */
     1192VMMR3DECL(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 */
     1209VMMR3DECL(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
    11491220
    11501221/**
  • trunk/src/VBox/VMM/VMMAll/VMMAll.cpp

    r19475 r19476  
    7272#endif
    7373}
    74 
    75 
    76 #ifdef IN_RING3
    77 /**
    78  * On VCPU worker for VMMSendSipi.
    79  *
    80  * @param   pVM         The VM to operate on.
    81  * @param   idCpu       Virtual CPU to perform SIPI on
    82  * @param   uVector     SIPI vector
    83  */
    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 # endif
    100 }
    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 state
    114  * and unhalting processor
    115  *
    116  * @param   pVM         The VM to operate on.
    117  * @param   idCpu       Virtual CPU to perform SIPI on
    118  * @param   uVector     SIPI vector
    119  */
    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 on
    136  */
    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 */
    14874
    14975
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette