VirtualBox

Changeset 13872

Show
Ignore:
Timestamp:
11/05/08 16:00:48 (2 months ago)
Author:
vboxsync
Message:

Pass the VMCPU id on to all hwaccm functions.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/include/VBox/hwaccm.h

    r13832 r13872  
    124124 */ 
    125125VMMR0DECL(int)   HWACCMR0SetupVM(PVM pVM); 
    126 VMMR0DECL(int)   HWACCMR0RunGuestCode(PVM pVM); 
    127 VMMR0DECL(int)   HWACCMR0Enter(PVM pVM); 
    128 VMMR0DECL(int)   HWACCMR0Leave(PVM pVM); 
     126VMMR0DECL(int)   HWACCMR0RunGuestCode(PVM pVM, RTCPUID idVCpu); 
     127VMMR0DECL(int)   HWACCMR0Enter(PVM pVM, RTCPUID idVCpu); 
     128VMMR0DECL(int)   HWACCMR0Leave(PVM pVM, RTCPUID idVCpu); 
    129129VMMR0DECL(int)   HWACCMR0InvalidatePage(PVM pVM, RTGCPTR GCVirt); 
    130130VMMR0DECL(int)   HWACCMR0FlushTLB(PVM pVM); 
  • trunk/src/VBox/VMM/HWACCMInternal.h

    r13750 r13872  
    519519 
    520520/* Dummy callback handlers. */ 
    521 VMMR0DECL(int) HWACCMR0DummyEnter(PVM pVM, PHWACCM_CPUINFO pCpu); 
    522 VMMR0DECL(int) HWACCMR0DummyLeave(PVM pVM, CPUMCTX *pCtx); 
     521VMMR0DECL(int) HWACCMR0DummyEnter(PVM pVM, RTCPUID idVCpu, PHWACCM_CPUINFO pCpu); 
     522VMMR0DECL(int) HWACCMR0DummyLeave(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx); 
    523523VMMR0DECL(int) HWACCMR0DummyEnableCpu(PHWACCM_CPUINFO pCpu, PVM pVM, void *pvPageCpu, RTHCPHYS pPageCpuPhys); 
    524524VMMR0DECL(int) HWACCMR0DummyDisableCpu(PHWACCM_CPUINFO pCpu, void *pvPageCpu, RTHCPHYS pPageCpuPhys); 
     
    526526VMMR0DECL(int) HWACCMR0DummyTermVM(PVM pVM); 
    527527VMMR0DECL(int) HWACCMR0DummySetupVM(PVM pVM); 
    528 VMMR0DECL(int) HWACCMR0DummyRunGuestCode(PVM pVM, CPUMCTX *pCtx); 
    529 VMMR0DECL(int) HWACCMR0DummySaveHostState(PVM pVM); 
    530 VMMR0DECL(int) HWACCMR0DummyLoadGuestState(PVM pVM, CPUMCTX *pCtx); 
     528VMMR0DECL(int) HWACCMR0DummyRunGuestCode(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx); 
     529VMMR0DECL(int) HWACCMR0DummySaveHostState(PVM pVM, RTCPUID idVCpu); 
     530VMMR0DECL(int) HWACCMR0DummyLoadGuestState(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx); 
    531531 
    532532#endif /* IN_RING0 */ 
  • trunk/src/VBox/VMM/VMMInternal.h

    r13832 r13872  
    450450 * @param   pVM     The VM handle. 
    451451 */ 
    452 typedef DECLCALLBACK(int) FNVMMR0SETJMP(PVM pVM); 
     452typedef DECLCALLBACK(int) FNVMMR0SETJMP(PVM pVM, uint32_t idCpu); 
    453453/** Pointer to FNVMMR0SETJMP(). */ 
    454454typedef FNVMMR0SETJMP *PFNVMMR0SETJMP; 
     
    466466 * @param   pVM         The argument of that function. 
    467467 */ 
    468 DECLASM(int)    vmmR0CallHostSetJmp(PVMMR0JMPBUF pJmpBuf, PFNVMMR0SETJMP pfn, PVM pVM); 
     468DECLASM(int)    vmmR0CallHostSetJmp(PVMMR0JMPBUF pJmpBuf, PFNVMMR0SETJMP pfn, PVM pVM, uint32_t idCpu); 
    469469 
    470470/** 
  • trunk/src/VBox/VMM/VMMR0/HWACCMR0.cpp

    r13825 r13872  
    6565 
    6666    /** Ring 0 handlers for VT-x and AMD-V. */ 
    67     DECLR0CALLBACKMEMBER(int, pfnEnterSession,(PVM pVM, PHWACCM_CPUINFO pCpu)); 
    68     DECLR0CALLBACKMEMBER(int, pfnLeaveSession,(PVM pVM, CPUMCTX *pCtx)); 
    69     DECLR0CALLBACKMEMBER(int, pfnSaveHostState,(PVM pVM)); 
    70     DECLR0CALLBACKMEMBER(int, pfnLoadGuestState,(PVM pVM, CPUMCTX *pCtx)); 
    71     DECLR0CALLBACKMEMBER(int, pfnRunGuestCode,(PVM pVM, CPUMCTX *pCtx)); 
     67    DECLR0CALLBACKMEMBER(int, pfnEnterSession,(PVM pVM, RTCPUID idVCpu, PHWACCM_CPUINFO pCpu)); 
     68    DECLR0CALLBACKMEMBER(int, pfnLeaveSession,(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx)); 
     69    DECLR0CALLBACKMEMBER(int, pfnSaveHostState,(PVM pVM, RTCPUID idVCpu)); 
     70    DECLR0CALLBACKMEMBER(int, pfnLoadGuestState,(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx)); 
     71    DECLR0CALLBACKMEMBER(int, pfnRunGuestCode,(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx)); 
    7272    DECLR0CALLBACKMEMBER(int, pfnEnableCpu, (PHWACCM_CPUINFO pCpu, PVM pVM, void *pvPageCpu, RTHCPHYS pPageCpuPhys)); 
    7373    DECLR0CALLBACKMEMBER(int, pfnDisableCpu, (PHWACCM_CPUINFO pCpu, void *pvPageCpu, RTHCPHYS pPageCpuPhys)); 
     
    865865 * @returns VBox status code. 
    866866 * @param   pVM         The VM to operate on. 
    867  */ 
    868 VMMR0DECL(int) HWACCMR0Enter(PVM pVM) 
     867 * @param   idVCpu      VMCPUD id. 
     868 */ 
     869VMMR0DECL(int) HWACCMR0Enter(PVM pVM, RTCPUID idVCpu) 
    869870{ 
    870871    PCPUMCTX        pCtx; 
     
    894895        pVM->hwaccm.s.u64RegisterMask = UINT64_C(0xFFFFFFFF); 
    895896 
    896     rc  = HWACCMR0Globals.pfnEnterSession(pVM, pCpu); 
     897    rc  = HWACCMR0Globals.pfnEnterSession(pVM, idVCpu, pCpu); 
    897898    AssertRC(rc); 
    898899    /* We must save the host context here (VT-x) as we might be rescheduled on a different cpu after a long jump back to ring 3. */ 
    899     rc |= HWACCMR0Globals.pfnSaveHostState(pVM); 
     900    rc |= HWACCMR0Globals.pfnSaveHostState(pVM, idVCpu); 
    900901    AssertRC(rc); 
    901     rc |= HWACCMR0Globals.pfnLoadGuestState(pVM, pCtx); 
     902    rc |= HWACCMR0Globals.pfnLoadGuestState(pVM, idVCpu, pCtx); 
    902903    AssertRC(rc); 
    903904 
     
    919920 * @returns VBox status code. 
    920921 * @param   pVM         The VM to operate on. 
    921  */ 
    922 VMMR0DECL(int) HWACCMR0Leave(PVM pVM) 
     922 * @param   idVCpu      VMCPUD id. 
     923 */ 
     924VMMR0DECL(int) HWACCMR0Leave(PVM pVM, RTCPUID idVCpu) 
    923925{ 
    924926    PCPUMCTX        pCtx; 
     
    944946    } 
    945947 
    946     rc = HWACCMR0Globals.pfnLeaveSession(pVM, pCtx); 
     948    rc = HWACCMR0Globals.pfnLeaveSession(pVM, idVCpu, pCtx); 
    947949 
    948950#ifdef VBOX_STRICT 
     
    961963 * @returns VBox status code. 
    962964 * @param   pVM         The VM to operate on. 
    963  */ 
    964 VMMR0DECL(int) HWACCMR0RunGuestCode(PVM pVM) 
     965 * @param   idVCpu      VMCPUD id. 
     966 */ 
     967VMMR0DECL(int) HWACCMR0RunGuestCode(PVM pVM, RTCPUID idVCpu) 
    965968{ 
    966969    CPUMCTX *pCtx; 
     
    978981    pCtx = CPUMQueryGuestCtxPtr(pVM); 
    979982 
    980     return HWACCMR0Globals.pfnRunGuestCode(pVM, pCtx); 
     983    return HWACCMR0Globals.pfnRunGuestCode(pVM, idVCpu, pCtx); 
    981984} 
    982985 
     
    12771280 
    12781281/* Dummy callback handlers. */ 
    1279 VMMR0DECL(int) HWACCMR0DummyEnter(PVM pVM, PHWACCM_CPUINFO pCpu) 
     1282VMMR0DECL(int) HWACCMR0DummyEnter(PVM pVM, RTCPUID idVCpu, PHWACCM_CPUINFO pCpu) 
    12801283{ 
    12811284    return VINF_SUCCESS; 
    12821285} 
    12831286 
    1284 VMMR0DECL(int) HWACCMR0DummyLeave(PVM pVM, PCPUMCTX pCtx) 
     1287VMMR0DECL(int) HWACCMR0DummyLeave(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx) 
    12851288{ 
    12861289    return VINF_SUCCESS; 
     
    13121315} 
    13131316 
    1314 VMMR0DECL(int) HWACCMR0DummyRunGuestCode(PVM pVM, CPUMCTX *pCtx) 
     1317VMMR0DECL(int) HWACCMR0DummyRunGuestCode(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx) 
    13151318{ 
    13161319    return VINF_SUCCESS; 
    13171320} 
    13181321 
    1319 VMMR0DECL(int) HWACCMR0DummySaveHostState(PVM pVM
     1322VMMR0DECL(int) HWACCMR0DummySaveHostState(PVM pVM, RTCPUID idVCpu
    13201323{ 
    13211324    return VINF_SUCCESS; 
    13221325} 
    13231326 
    1324 VMMR0DECL(int) HWACCMR0DummyLoadGuestState(PVM pVM, CPUMCTX *pCtx) 
     1327VMMR0DECL(int) HWACCMR0DummyLoadGuestState(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx) 
    13251328{ 
    13261329    return VINF_SUCCESS; 
  • trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp

    r13825 r13872  
    514514 * @returns VBox status code. 
    515515 * @param   pVM         The VM to operate on. 
     516 * @param   idVCpu      VPCPU id. 
    516517 */ 
    517 VMMR0DECL(int) SVMR0SaveHostState(PVM pVM
     518VMMR0DECL(int) SVMR0SaveHostState(PVM pVM, RTCPUID idVCpu
    518519{ 
     520    NOREF(pVM); 
     521    NOREF(idVCpu); 
    519522    /* Nothing to do here. */ 
    520523    return VINF_SUCCESS; 
     
    524527 * Loads the guest state 
    525528 * 
    526  * NOTE: Don't do anything here that can cause a jump back to ring 3!!!!! 
    527  * 
    528529 * @returns VBox status code. 
    529530 * @param   pVM         The VM to operate on. 
     531 * @param   idVCpu      VPCPU id. 
    530532 * @param   pCtx        Guest context 
    531533 */ 
    532 VMMR0DECL(int) SVMR0LoadGuestState(PVM pVM, CPUMCTX *pCtx) 
     534VMMR0DECL(int) SVMR0LoadGuestState(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx) 
    533535{ 
    534536    RTGCUINTPTR val; 
     
    781783 
    782784/** 
    783  * Runs guest code in an SVM VM. 
    784  * 
    785  * @todo This can be much more efficient, when we only sync that which has actually changed. (this is the first attempt only) 
     785 * Runs guest code in an AMD-V VM. 
    786786 * 
    787787 * @returns VBox status code. 
    788788 * @param   pVM         The VM to operate on. 
     789 * @param   idVCpu      VPCPU id. 
    789790 * @param   pCtx        Guest context 
    790791 */ 
    791 VMMR0DECL(int) SVMR0RunGuestCode(PVM pVM, CPUMCTX *pCtx) 
     792VMMR0DECL(int) SVMR0RunGuestCode(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx) 
    792793{ 
    793794    int         rc = VINF_SUCCESS; 
     
    931932 
    932933    /* Load the guest state; *must* be here as it sets up the shadow cr0 for lazy fpu syncing! */ 
    933     rc = SVMR0LoadGuestState(pVM, pCtx); 
     934    rc = SVMR0LoadGuestState(pVM, idVCpu, pCtx); 
    934935    if (rc != VINF_SUCCESS) 
    935936    { 
     
    20452046 * @returns VBox status code. 
    20462047 * @param   pVM         The VM to operate on. 
     2048 * @param   idVCpu      VPCPU id. 
    20472049 * @param   pCpu        CPU info struct 
    20482050 */ 
    2049 VMMR0DECL(int) SVMR0Enter(PVM pVM, PHWACCM_CPUINFO pCpu) 
     2051VMMR0DECL(int) SVMR0Enter(PVM pVM, RTCPUID idVCpu, PHWACCM_CPUINFO pCpu) 
    20502052{ 
    20512053    Assert(pVM->hwaccm.s.svm.fSupported); 
     
    20662068 * @returns VBox status code. 
    20672069 * @param   pVM         The VM to operate on. 
     2070 * @param   idVCpu      VPCPU id. 
    20682071 * @param   pCtx        CPU context 
    20692072 */ 
    2070 VMMR0DECL(int) SVMR0Leave(PVM pVM, PCPUMCTX pCtx) 
     2073VMMR0DECL(int) SVMR0Leave(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx) 
    20712074{ 
    20722075    SVM_VMCB *pVMCB = (SVM_VMCB *)pVM->hwaccm.s.svm.pVMCB; 
  • trunk/src/VBox/VMM/VMMR0/HWSVMR0.h

    r13514 r13872  
    4747 * @returns VBox status code. 
    4848 * @param   pVM         The VM to operate on. 
     49 * @param   idVCpu      VPCPU id. 
    4950 * @param   pCpu        CPU info struct 
    5051 */ 
    51 VMMR0DECL(int) SVMR0Enter(PVM pVM, PHWACCM_CPUINFO pCpu); 
     52VMMR0DECL(int) SVMR0Enter(PVM pVM, RTCPUID idVCpu, PHWACCM_CPUINFO pCpu); 
    5253 
    5354/** 
     
    5657 * @returns VBox status code. 
    5758 * @param   pVM         The VM to operate on. 
     59 * @param   idVCpu      VPCPU id. 
    5860 * @param   pCtx        CPU context 
    5961 */ 
    60 VMMR0DECL(int) SVMR0Leave(PVM pVM, PCPUMCTX pCtx); 
     62VMMR0DECL(int) SVMR0Leave(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx); 
    6163 
    6264/** 
     
    111113 * @returns VBox status code. 
    112114 * @param   pVM         The VM to operate on. 
     115 * @param   idVCpu      VPCPU id. 
    113116 * @param   pCtx        Guest context 
    114117 */ 
    115 VMMR0DECL(int) SVMR0RunGuestCode(PVM pVM, CPUMCTX *pCtx); 
     118VMMR0DECL(int) SVMR0RunGuestCode(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx); 
    116119 
    117120 
     
    121124 * @returns VBox status code. 
    122125 * @param   pVM         The VM to operate on. 
     126 * @param   idVCpu      VPCPU id. 
    123127 */ 
    124 VMMR0DECL(int) SVMR0SaveHostState(PVM pVM); 
     128VMMR0DECL(int) SVMR0SaveHostState(PVM pVM, RTCPUID idVCpu); 
    125129 
    126130/** 
     
    129133 * @returns VBox status code. 
    130134 * @param   pVM         The VM to operate on. 
     135 * @param   idVCpu      VPCPU id. 
    131136 * @param   pCtx        Guest context 
    132137 */ 
    133 VMMR0DECL(int) SVMR0LoadGuestState(PVM pVM, CPUMCTX *pCtx); 
     138VMMR0DECL(int) SVMR0LoadGuestState(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx); 
    134139 
    135140 
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r13825 r13872  
    755755 * @returns VBox status code. 
    756756 * @param   pVM         The VM to operate on. 
     757 * @param   idVCpu      VPCPU id. 
    757758 */ 
    758 VMMR0DECL(int) VMXR0SaveHostState(PVM pVM
     759VMMR0DECL(int) VMXR0SaveHostState(PVM pVM, RTCPUID idVCpu
    759760{ 
    760761    int rc = VINF_SUCCESS; 
     
    935936 * @returns VBox status code. 
    936937 * @param   pVM         The VM to operate on. 
     938 * @param   idVCpu      VPCPU id. 
    937939 * @param   pCtx        Guest context 
    938940 */ 
    939 VMMR0DECL(int) VMXR0LoadGuestState(PVM pVM, CPUMCTX *pCtx) 
     941VMMR0DECL(int) VMXR0LoadGuestState(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx) 
    940942{ 
    941943    int         rc = VINF_SUCCESS; 
     
    16751677 * @returns VBox status code. 
    16761678 * @param   pVM         The VM to operate on. 
     1679 * @param   idVCpu      VPCPU id. 
    16771680 * @param   pCtx        Guest context 
    16781681 */ 
    1679 VMMR0DECL(int) VMXR0RunGuestCode(PVM pVM, CPUMCTX *pCtx) 
     1682VMMR0DECL(int) VMXR0RunGuestCode(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx) 
    16801683{ 
    16811684    int         rc = VINF_SUCCESS; 
     
    18831886#endif 
    18841887    /* Save the host state first. */ 
    1885     rc  = VMXR0SaveHostState(pVM); 
     1888    rc  = VMXR0SaveHostState(pVM, idVCpu); 
    18861889    if (rc != VINF_SUCCESS) 
    18871890    { 
     
    18901893    } 
    18911894    /* Load the guest state */ 
    1892     rc = VMXR0LoadGuestState(pVM, pCtx); 
     1895    rc = VMXR0LoadGuestState(pVM, idVCpu, pCtx); 
    18931896    if (rc != VINF_SUCCESS) 
    18941897    { 
     
    29602963 * @returns VBox status code. 
    29612964 * @param   pVM         The VM to operate on. 
     2965 * @param   idVCpu      VPCPU id. 
    29622966 * @param   pCpu        CPU info struct 
    29632967 */ 
    2964 VMMR0DECL(int) VMXR0Enter(PVM pVM, PHWACCM_CPUINFO pCpu) 
     2968VMMR0DECL(int) VMXR0Enter(PVM pVM, RTCPUID idVCpu, PHWACCM_CPUINFO pCpu) 
    29652969{ 
    29662970    Assert(pVM->hwaccm.s.vmx.fSupported); 
     
    29882992 * @returns VBox status code. 
    29892993 * @param   pVM         The VM to operate on. 
     2994 * @param   idVCpu      VPCPU id. 
    29902995 * @param   pCtx        CPU context 
    29912996 */ 
    2992 VMMR0DECL(int) VMXR0Leave(PVM pVM, PCPUMCTX pCtx) 
     2997VMMR0DECL(int) VMXR0Leave(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx) 
    29932998{ 
    29942999    Assert(pVM->hwaccm.s.vmx.fSupported); 
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.h

    r13514 r13872  
    4747 * @returns VBox status code. 
    4848 * @param   pVM         The VM to operate on. 
     49 * @param   idVCpu      VPCPU id. 
    4950 * @param   pCpu        CPU info struct 
    5051 */ 
    51 VMMR0DECL(int) VMXR0Enter(PVM pVMm, PHWACCM_CPUINFO pCpu); 
     52VMMR0DECL(int) VMXR0Enter(PVM pVM, RTCPUID idVCpu, PHWACCM_CPUINFO pCpu); 
    5253 
    5354/** 
     
    5657 * @returns VBox status code. 
    5758 * @param   pVM         The VM to operate on. 
     59 * @param   idVCpu      VPCPU id. 
    5860 * @param   pCtx        CPU context 
    5961 */ 
    60 VMMR0DECL(int) VMXR0Leave(PVM pVM, PCPUMCTX pCtx); 
     62VMMR0DECL(int) VMXR0Leave(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx); 
    6163 
    6264 
     
    112114 * @returns VBox status code. 
    113115 * @param   pVM         The VM to operate on. 
    114  */ 
    115 VMMR0DECL(int) VMXR0SaveHostState(PVM pVM); 
     116 * @param   idVCpu      VPCPU id. 
     117 */ 
     118VMMR0DECL(int) VMXR0SaveHostState(PVM pVM, RTCPUID idVCpu); 
    116119 
    117120/** 
     
    120123 * @returns VBox status code. 
    121124 * @param   pVM         The VM to operate on. 
    122  * @param   pCtx        Guest context 
    123  */ 
    124 VMMR0DECL(int) VMXR0LoadGuestState(PVM pVM, CPUMCTX *pCtx); 
     125 * @param   idVCpu      VPCPU id. 
     126 * @param   pCtx        Guest context 
     127 */ 
     128VMMR0DECL(int) VMXR0LoadGuestState(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx); 
    125129 
    126130 
     
    130134 * @returns VBox status code. 
    131135 * @param   pVM         The VM to operate on. 
    132  * @param   pCtx        Guest context 
    133  */ 
    134 VMMR0DECL(int) VMXR0RunGuestCode(PVM pVM, CPUMCTX *pCtx); 
     136 * @param   idVCpu      VPCPU id. 
     137 * @param   pCtx        Guest context 
     138 */ 
     139VMMR0DECL(int) VMXR0RunGuestCode(PVM pVM, RTCPUID idVCpu, PCPUMCTX pCtx); 
    135140 
    136141 
  • trunk/src/VBox/VMM/VMMR0/VMMR0.cpp

    r13871 r13872  
    633633            if (!HWACCMR0SuspendPending()) 
    634634            { 
    635                 rc = HWACCMR0Enter(pVM); 
     635                rc = HWACCMR0Enter(pVM, idCPU); 
    636636                if (RT_SUCCESS(rc)) 
    637637                { 
    638                     rc = vmmR0CallHostSetJmp(&pVM->vmm.s.CallHostR0JmpBuf, HWACCMR0RunGuestCode, pVM); /* this may resume code. */ 
    639                     int rc2 = HWACCMR0Leave(pVM); 
     638                    rc = vmmR0CallHostSetJmp(&pVM->vmm.s.CallHostR0JmpBuf, HWACCMR0RunGuestCode, pVM, idCPU); /* this may resume code. */ 
     639                    int rc2 = HWACCMR0Leave(pVM, idCPU); 
    640640                    AssertRC(rc2); 
    641641                } 
  • trunk/src/VBox/VMM/VMMR0/VMMR0A.asm

    r8155 r13872  
    4444; 
    4545; @returns  VINF_SUCCESS on success or whatever is passed to vmmR0CallHostLongJmp. 
    46 ; @param    pJmpBuf msc:rcx gcc:rdi x86:[esp+4]     Our jmp_buf. 
    47 ; @param    pfn     msc:rdx gcc:rsi x86:[esp+8]     The function to be called when not resuming. 
    48 ; @param    pvUser  msc:r8  gcc:rdx x86:[esp+c]     The argument of that function. 
     46; @param    pJmpBuf msc:rcx gcc:rdi x86:[esp+0x04]     Our jmp_buf. 
     47; @param    pfn     msc:rdx gcc:rsi x86:[esp+0x08]     The function to be called when not resuming. 
     48; @param    pvUser1 msc:r8  gcc:rdx x86:[esp+0x0c]     The argument of that function. 
     49; @param    pvUser2 msc:r9  gcc:rcx x86:[esp+0x10]     The argument of that function. 
    4950; 
    5051BEGINPROC vmmR0CallHostSetJmp 
     
    7071    jnz     .resume 
    7172 
    72     mov     ecx, [esp + 0ch]            ; pvArg 
     73    mov     ecx, [esp + 0ch]            ; pvArg1 
     74    mov     edx, [esp + 10h]            ; pvArg2 
    7375    mov     eax, [esp + 08h]            ; pfn 
    74     sub     esp, 12                     ; align the stack on a 16-byte boundrary. 
     76    sub     esp, 16                     ; align the stack on a 16-byte boundrary. 
    7577    mov     [esp], ecx 
     78    mov     [esp+4], edx 
    7679    call    eax 
    77     add     esp, 12 
     80    add     esp, 16 
    7881    mov     edx, [esp + 4h]             ; pJmpBuf 
    7982 
     
    149152 %else 
    150153    sub     rsp, 10h 
    151     mov     r8, rdx                     ; pvUser (save it like MSC) 
     154    mov     r8, rdx                     ; pvUser1 (save it like MSC) 
     155    mov     r9, rcx                     ; pvUser2 (save it like MSC) 
    152156    mov     r11, rsi                    ; pfn 
    153157    mov     rdx, rdi                    ; pJmpBuf 
     
    178182 %ifdef ASM_CALL64_MSC 
    179183    mov     rcx, r8                     ; pvUser -> arg0 
     184    mov     rdx, r9 
    180185 %else 
    181186    mov     rdi, r8                     ; pvUser -> arg0 
     187    mov     rsi, r9 
    182188 %endif 
    183189    call    r11 
  • trunk/src/VBox/VMM/testcase/tstVMMR0CallHost-1.cpp

    r11822 r13872  
    6060 
    6161 
    62 DECLCALLBACK(int) tst2(intptr_t i
     62DECLCALLBACK(int) tst2(intptr_t i, intptr_t i2
    6363{ 
    6464    if (i < 0 || i > 8192) 
    6565    { 
    6666        RTPrintf("tstVMMR0CallHost-1: FAILURE - i=%d is out of range [0..8192]\n", i); 
     67        return 1; 
     68    } 
     69    if (i2 != 0) 
     70    { 
     71        RTPrintf("tstVMMR0CallHost-1: FAILURE - i2=%d is out of range [0]\n", i2); 
    6772        return 1; 
    6873    } 
     
    8186    for (int i = iFrom; i < iTo; i += iInc) 
    8287    { 
    83         int rc = vmmR0CallHostSetJmp(&g_Jmp, (PFNVMMR0SETJMP)tst2, (PVM)i); 
     88        int rc = vmmR0CallHostSetJmp(&g_Jmp, (PFNVMMR0SETJMP)tst2, (PVM)i, 0); 
    8489        if (rc != 0 && rc != 42) 
    8590        { 

© 2008 Sun Microsystems, Inc.
ContactPrivacy policy