VirtualBox

Changeset 80284 in vbox


Ignore:
Timestamp:
Aug 15, 2019 9:03:16 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
132739
Message:

tstMMHyperHeap: Fixes related to VM/GVM work. bugref:9217

File:
1 edited

Legend:

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

    r76553 r80284  
    2424#include <VBox/vmm/vm.h>
    2525#include <VBox/vmm/uvm.h>
     26#include <VBox/vmm/gvm.h>
    2627#include <VBox/sup.h>
    2728#include <VBox/param.h>
     
    3536#include <iprt/string.h>
    3637
    37 /* does not work for more CPUs as SUPR3LowAlloc() would refuse to allocate more pages */
    3838#define NUM_CPUS  16
    3939
     
    4949     * Init runtime.
    5050     */
    51     RTR3InitExe(argc, &argv, 0);
     51    int rc = RTR3InitExe(argc, &argv, 0);
     52    AssertRCReturn(rc, RTEXITCODE_INIT);
    5253
    5354    /*
     
    5657    void       *pvVM = NULL;
    5758    RTR0PTR     pvR0 = NIL_RTR0PTR;
    58     SUPPAGE     aPages[RT_ALIGN_Z(sizeof(VM) + NUM_CPUS * sizeof(VMCPU), PAGE_SIZE) >> PAGE_SHIFT];
    59     int rc = SUPR3Init(NULL);
    60     if (RT_SUCCESS(rc))
    61         //rc = SUPR3LowAlloc(RT_ELEMENTS(aPages), (void **)&pVM, &pvR0, &aPages[0]);
    62         rc = SUPR3PageAllocEx(RT_ELEMENTS(aPages), 0, &pvVM, &pvR0, &aPages[0]);
    63     if (RT_FAILURE(rc))
    64     {
    65         RTPrintf("Fatal error: SUP Failure! rc=%Rrc\n", rc);
     59#ifdef VBOX_BUGREF_9217
     60    SUPPAGE     aPages[(sizeof(GVM) + NUM_CPUS * sizeof(GVMCPU)) >> PAGE_SHIFT];
     61#else
     62    SUPPAGE     aPages[(sizeof(VM) + NUM_CPUS * sizeof(VMCPU)) >> PAGE_SHIFT];
     63#endif
     64    rc = SUPR3Init(NULL);
     65    if (RT_FAILURE(rc))
     66    {
     67        RTPrintf("Fatal error: SUP failure! rc=%Rrc\n", rc);
     68        return RTEXITCODE_FAILURE;
     69    }
     70    rc = SUPR3PageAllocEx(RT_ELEMENTS(aPages), 0, &pvVM, &pvR0, &aPages[0]);
     71    if (RT_FAILURE(rc))
     72    {
     73        RTPrintf("Fatal error: Allocation failure! rc=%Rrc\n", rc);
    6674        return RTEXITCODE_FAILURE;
    6775    }
     
    6977    PVM  pVM = (PVM)pvVM;
    7078    pVM->paVMPagesR3 = aPages;
     79#ifdef VBOX_BUGREF_9217
     80    pVM->pVMR0ForCall = pvR0;
     81#else
    7182    pVM->pVMR0 = pvR0;
     83#endif
    7284
    7385    PUVM pUVM = (PUVM)RTMemPageAllocZ(RT_ALIGN_Z(sizeof(*pUVM), PAGE_SIZE));
     
    8294
    8395    pVM->cCpus = NUM_CPUS;
     96#ifdef VBOX_BUGREF_9217
     97    pVM->cbSelf = sizeof(VM);
     98    pVM->cbVCpu = sizeof(VMCPU);
     99    PVMCPU pVCpu = (PVMCPU)((uintptr_t)pVM + sizeof(GVM));
     100    for (VMCPUID idCpu = 0; idCpu < NUM_CPUS; idCpu++)
     101    {
     102        pVM->apCpusR3[idCpu] = pVCpu;
     103        pVCpu = (PVMCPU)((uintptr_t)pVCpu + sizeof(GVMCPU));
     104    }
     105#else
    84106    pVM->cbSelf = RT_UOFFSETOF_DYN(VM, aCpus[pVM->cCpus]);
     107    for (VMCPUID idCpu = 0; idCpu < NUM_CPUS; idCpu++)
     108        pVM->apCpusR3[idCpu] = &pVM->aCpus[idCpu];
     109#endif
    85110
    86111    rc = STAMR3InitUVM(pUVM);
Note: See TracChangeset for help on using the changeset viewer.

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