VirtualBox

Changeset 19468 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
May 7, 2009 9:03:15 AM (16 years ago)
Author:
vboxsync
Message:

VMM: better SIPI sending, reschedule to R3 as needed

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

Legend:

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

    r19456 r19468  
    232232
    233233/** @copydoc PDMAPICHLPR3::pfnSendSipi */
    234 static DECLCALLBACK(void) pdmR3ApicHlp_SendSipi(PPDMDEVINS pDevIns, VMCPUID idCpu, int iVector) /** @todo why signed? */
    235 {
    236     PDMDEV_ASSERT_DEVINS(pDevIns);
    237     VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);
    238 
    239     PVM pVM = pDevIns->Internal.s.pVMR3;
    240     PVMCPU pCpu = VMMGetCpuById(pVM, idCpu);
    241     CPUMSetGuestCS(pCpu, iVector * 0x100);
    242     CPUMSetGuestEIP(pCpu, 0);
    243     /** @todo: how do I unhalt VCPU?
    244      *  bird: See VMMSendSipi. */
    245 
     234static DECLCALLBACK(void) pdmR3ApicHlp_SendSipi(PPDMDEVINS pDevIns, VMCPUID idCpu, uint32_t uVector)
     235{
     236    PDMDEV_ASSERT_DEVINS(pDevIns);
     237    VM_ASSERT_EMT(pDevIns->Internal.s.pVMR3);
     238    VMMR3SendSipi(pDevIns->Internal.s.pVMR3, idCpu, uVector);
    246239}
    247240
  • trunk/src/VBox/VMM/VMMAll/VMMAll.cpp

    r19450 r19468  
    9999# endif
    100100}
    101 #endif /* IN_RING3 */
    102 
    103101
    104102/**
     
    108106 * @param   pVM         The VM to operate on.
    109107 * @param   idCpu       Virtual CPU to perform SIPI on
    110  * @param   iVector     SIPI vector
    111  */
    112 VMMDECL(void) VMMSendSipi(PVM pVM, VMCPUID idCpu, int iVector) /** @todo why is iVector signed? */
     108 * @param   uVector     SIPI vector
     109 */
     110VMMR3DECL(void) VMMR3SendSipi(PVM pVM, VMCPUID idCpu,  uint32_t uVector)
    113111{
    114112    AssertReturnVoid(idCpu < pVM->cCPUs);
    115113
    116 #ifdef IN_RING3
    117114    PVMREQ pReq;
    118115    int rc = VMR3ReqCallU(pVM->pUVM, idCpu, &pReq, RT_INDEFINITE_WAIT, 0,
    119                           (PFNRT)vmmR3SendSipi, 3, pVM, idCpu, (uint32_t)iVector);
     116                          (PFNRT)vmmR3SendSipi, 3, pVM, idCpu, uVector);
    120117    AssertRC(rc);
    121118    VMR3ReqFree(pReq);
    122 #else
    123     AssertMsgFailed(("has to be done in ring-3, fix the code.\n"));
    124 #endif
    125 }
     119}
     120#endif /* IN_RING3 */
    126121
    127122
  • trunk/src/VBox/VMM/VMMGC/PDMGCDevice.cpp

    r19447 r19468  
    9292static DECLCALLBACK(void) pdmRCApicHlp_Unlock(PPDMDEVINS pDevIns);
    9393static DECLCALLBACK(VMCPUID) pdmRCApicHlp_GetCpuId(PPDMDEVINS pDevIns);
    94 static DECLCALLBACK(void) pdmRCApicHlp_SendSipi(PPDMDEVINS pDevIns, VMCPUID idCpu, int iVector);
    9594/** @} */
    9695
     
    168167    pdmRCApicHlp_Unlock,
    169168    pdmRCApicHlp_GetCpuId,
    170     pdmRCApicHlp_SendSipi,
    171169    PDM_APICHLPRC_VERSION
    172170};
     
    490488    return VMMGetCpuId(pDevIns->Internal.s.pVMRC);
    491489}
    492 
    493 
    494 /** @copydoc PDMAPICHLPRC::pfnSendSipi */
    495 static DECLCALLBACK(void) pdmRCApicHlp_SendSipi(PPDMDEVINS pDevIns, VMCPUID idCpu, int iVector)
    496 {
    497     /* we shall never send a SIPI in raw mode */
    498     AssertFailed();
    499 }
    500 
    501 
    502 
    503490
    504491/** @copydoc PDMIOAPICHLPRC::pfnApicBusDeliver */
  • trunk/src/VBox/VMM/VMMR0/PDMR0Device.cpp

    r19446 r19468  
    9494static DECLCALLBACK(void) pdmR0ApicHlp_Unlock(PPDMDEVINS pDevIns);
    9595static DECLCALLBACK(VMCPUID) pdmR0ApicHlp_GetCpuId(PPDMDEVINS pDevIns);
    96 static DECLCALLBACK(void) pdmR0ApicHlp_SendSipi(PPDMDEVINS pDevIns, VMCPUID idCpu, int iVector);
    9796/** @} */
    9897
     
    171170    pdmR0ApicHlp_Unlock,
    172171    pdmR0ApicHlp_GetCpuId,
    173     pdmR0ApicHlp_SendSipi,
    174172    PDM_APICHLPR0_VERSION
    175173};
     
    504502    return VMMGetCpuId(pDevIns->Internal.s.pVMR0);
    505503}
    506 
    507 
    508 /** @copydoc PDMAPICHLPR0::pfnSendSipi */
    509 static DECLCALLBACK(void) pdmR0ApicHlp_SendSipi(PPDMDEVINS pDevIns, VMCPUID idCpu, int iVector)
    510 {
    511     PDMDEV_ASSERT_DEVINS(pDevIns);
    512     return VMMSendSipi(pDevIns->Internal.s.pVMR0, idCpu, iVector);
    513 }
    514 
    515 
    516 
    517 
    518504
    519505/** @copydoc PDMIOAPICHLPR0::pfnApicBusDeliver */
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