VirtualBox

Changeset 13872 in vbox


Ignore:
Timestamp:
Nov 5, 2008 3:00:48 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
38870
Message:

Pass the VMCPU id on to all hwaccm functions.

Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • 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        {
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