VirtualBox

Ignore:
Timestamp:
Nov 11, 2024 1:09:38 AM (4 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165846
Message:

/Config.kmk,Devices/Makefile.kmk,VMM/*: Introducing VBOX_WITH_MINIMAL_R0 for win.arm64 and similar build configurations not really needing much from VMMR0.r0/VBoxSup.sys. jiraref:VBP-1449

File:
1 edited

Legend:

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

    r106061 r106920  
    6363#include <VBox/log.h>
    6464
    65 #include <iprt/asm-amd64-x86.h>
     65#ifdef RT_ARCH_AMD64
     66# include <iprt/asm-amd64-x86.h>
     67#endif
    6668#include <iprt/assert.h>
    6769#include <iprt/crc.h>
     
    139141DECLEXPORT(int) ModuleInit(void *hMod)
    140142{
     143    RT_NOREF_PV(hMod);
     144
    141145#ifdef VBOX_WITH_DTRACE_R0
    142146    /*
     
    169173        if (RT_SUCCESS(rc))
    170174        {
     175#ifndef VBOX_WITH_MINIMAL_R0
    171176            rc = GMMR0Init();
    172177            if (RT_SUCCESS(rc))
     
    180185                    if (RT_SUCCESS(rc))
    181186                    {
     187#endif /* !VBOX_WITH_MINIMAL_R0 */
    182188                        rc = IntNetR0Init();
    183189                        if (RT_SUCCESS(rc))
    184190                        {
    185 #ifdef VBOX_WITH_PCI_PASSTHROUGH
     191#ifndef VBOX_WITH_MINIMAL_R0
     192# ifdef VBOX_WITH_PCI_PASSTHROUGH
    186193                            rc = PciRawR0Init();
    187 #endif
     194# endif
    188195                            if (RT_SUCCESS(rc))
    189196                            {
     
    191198                                if (RT_SUCCESS(rc))
    192199                                {
    193 #ifdef VBOX_WITH_TRIPLE_FAULT_HACK
     200# ifdef VBOX_WITH_TRIPLE_FAULT_HACK
    194201                                    rc = vmmR0TripleFaultHackInit();
    195202                                    if (RT_SUCCESS(rc))
    196 #endif
     203# endif
    197204                                    {
    198 #ifdef VBOX_WITH_NEM_R0
     205# ifdef VBOX_WITH_NEM_R0
    199206                                        rc = NEMR0Init();
    200207                                        if (RT_SUCCESS(rc))
    201 #endif
     208# endif
     209#endif /* !VBOX_WITH_MINIMAL_R0 */
    202210                                        {
    203211                                            LogFlow(("ModuleInit: returns success\n"));
    204212                                            return VINF_SUCCESS;
    205213                                        }
     214
     215                                        /*
     216                                         * Bail out.
     217                                         */
     218#ifndef VBOX_WITH_MINIMAL_R0
    206219                                    }
    207 
    208                                     /*
    209                                      * Bail out.
    210                                      */
    211 #ifdef VBOX_WITH_TRIPLE_FAULT_HACK
     220# ifdef VBOX_WITH_TRIPLE_FAULT_HACK
    212221                                    vmmR0TripleFaultHackTerm();
    213 #endif
     222# endif
    214223                                }
    215224                                else
    216225                                    LogRel(("ModuleInit: CPUMR0ModuleInit -> %Rrc\n", rc));
    217 #ifdef VBOX_WITH_PCI_PASSTHROUGH
     226# ifdef VBOX_WITH_PCI_PASSTHROUGH
    218227                                PciRawR0Term();
    219 #endif
     228# endif
    220229                            }
    221230                            else
    222231                                LogRel(("ModuleInit: PciRawR0Init -> %Rrc\n", rc));
    223232                            IntNetR0Term();
     233#endif /* !VBOX_WITH_MINIMAL_R0 */
    224234                        }
    225235                        else
    226236                            LogRel(("ModuleInit: IntNetR0Init -> %Rrc\n", rc));
     237#ifndef VBOX_WITH_MINIMAL_R0
    227238                        PGMDeregisterStringFormatTypes();
    228239                    }
     
    237248            else
    238249                LogRel(("ModuleInit: GMMR0Init -> %Rrc\n", rc));
     250#endif /* !VBOX_WITH_MINIMAL_R0 */
    239251            GVMMR0Term();
    240252        }
     
    259271DECLEXPORT(void) ModuleTerm(void *hMod)
    260272{
    261     NOREF(hMod);
    262273    LogFlow(("ModuleTerm:\n"));
    263 
     274    RT_NOREF_PV(hMod);
     275
     276#ifndef VBOX_WITH_MINIMAL_R0
    264277    /*
    265278     * Terminate the CPUM module (Local APIC cleanup).
    266279     */
    267280    CPUMR0ModuleTerm();
     281#endif
    268282
    269283    /*
     
    272286    IntNetR0Term();
    273287
     288#ifndef VBOX_WITH_MINIMAL_R0
    274289    /*
    275290     * PGM (Darwin), HM and PciRaw global cleanup.
    276291     */
    277 #ifdef VBOX_WITH_PCI_PASSTHROUGH
     292# ifdef VBOX_WITH_PCI_PASSTHROUGH
    278293    PciRawR0Term();
    279 #endif
     294# endif
    280295    PGMDeregisterStringFormatTypes();
    281296    HMR0Term();
    282 #ifdef VBOX_WITH_TRIPLE_FAULT_HACK
     297# ifdef VBOX_WITH_TRIPLE_FAULT_HACK
    283298    vmmR0TripleFaultHackTerm();
     299# endif
     300# ifdef VBOX_WITH_NEM_R0
     301    NEMR0Term();
     302# endif
     303#endif /* !VBOX_WITH_MINIMAL_R0 */
     304
     305    /*
     306     * Destroy the GMM and GVMM instances.
     307     */
     308#ifndef VBOX_WITH_MINIMAL_R0
     309    GMMR0Term();
    284310#endif
    285 #ifdef VBOX_WITH_NEM_R0
    286     NEMR0Term();
    287 #endif
    288 
    289     /*
    290      * Destroy the GMM and GVMM instances.
    291      */
    292     GMMR0Term();
    293311    GVMMR0Term();
    294312
     
    448466    if (RT_SUCCESS(rc))
    449467    {
     468#ifndef VBOX_WITH_MINIMAL_R0
    450469        /*
    451470         * Init HM, CPUM and PGM.
     
    469488                            if (RT_SUCCESS(rc))
    470489                            {
    471 #ifdef VBOX_WITH_PCI_PASSTHROUGH
     490# ifdef VBOX_WITH_PCI_PASSTHROUGH
    472491                                rc = PciRawR0InitVM(pGVM);
    473 #endif
     492# endif
    474493                                if (RT_SUCCESS(rc))
    475494                                {
     
    477496                                    if (RT_SUCCESS(rc))
    478497                                    {
     498#endif /* !VBOX_WITH_MINIMAL_R0 */
    479499                                        GVMMR0DoneInitVM(pGVM);
     500#ifndef VBOX_WITH_MINIMAL_R0
    480501                                        PGMR0DoneInitVM(pGVM);
     502#endif
    481503
    482504                                        /*
     
    488510
    489511                                        /* bail out*/
     512#ifndef VBOX_WITH_MINIMAL_R0
    490513                                        //GIMR0TermVM(pGVM);
    491514                                    }
    492 #ifdef VBOX_WITH_PCI_PASSTHROUGH
     515# ifdef VBOX_WITH_PCI_PASSTHROUGH
    493516                                    PciRawR0TermVM(pGVM);
    494 #endif
     517# endif
    495518                                }
    496519                            }
     
    501524            HMR0TermVM(pGVM);
    502525        }
     526#endif /* !VBOX_WITH_MINIMAL_R0 */
    503527    }
    504528
     
    566590    }
    567591
    568 #ifdef VBOX_WITH_PCI_PASSTHROUGH
     592#ifndef VBOX_WITH_MINIMAL_R0
     593# ifdef VBOX_WITH_PCI_PASSTHROUGH
    569594    PciRawR0TermVM(pGVM);
     595# endif
    570596#endif
    571597
     
    575601    if (GVMMR0DoingTermVM(pGVM))
    576602    {
     603#ifndef VBOX_WITH_MINIMAL_R0
    577604        GIMR0TermVM(pGVM);
    578605
     
    580607         *        here to make sure we don't leak any shared pages if we crash... */
    581608        HMR0TermVM(pGVM);
     609#endif
    582610    }
    583611
     
    620648}
    621649
     650
     651#ifndef VBOX_WITH_MINIMAL_R0
    622652
    623653/**
     
    966996}
    967997
     998#endif /* !VBOX_WITH_MINIMAL_R0 */
    968999
    9691000/**
     
    10171048                VMCPU_FF_SET(pVCpu, VMCPU_FF_TO_R3);
    10181049
     1050#ifndef VBOX_WITH_MINIMAL_R0
    10191051            /* Invoke the HM-specific thread-context callback. */
    10201052            HMR0ThreadCtxCallback(enmEvent, pvUser);
     1053#endif
    10211054
    10221055            /* Restore preemption. */
     
    10271060        case RTTHREADCTXEVENT_OUT:
    10281061        {
     1062#ifndef VBOX_WITH_MINIMAL_R0
    10291063            /* Invoke the HM-specific thread-context callback. */
    10301064            HMR0ThreadCtxCallback(enmEvent, pvUser);
     1065#endif
    10311066
    10321067            /*
     
    10401075
    10411076        default:
     1077#ifndef VBOX_WITH_MINIMAL_R0
    10421078            /* Invoke the HM-specific thread-context callback. */
    10431079            HMR0ThreadCtxCallback(enmEvent, pvUser);
     1080#endif
    10441081            break;
    10451082    }
     
    10631100    Assert(pVCpu->vmmr0.s.hCtxHook == NIL_RTTHREADCTXHOOK);
    10641101
    1065 #if 1 /* To disable this stuff change to zero. */
     1102#ifndef VBOX_WITH_MINIMAL_R0
     1103
     1104# if 1 /* To disable this stuff change to zero. */
    10661105    int rc = RTThreadCtxHookCreate(&pVCpu->vmmr0.s.hCtxHook, 0, vmmR0ThreadCtxCallback, pVCpu);
    10671106    if (RT_SUCCESS(rc))
     
    10701109        return rc;
    10711110    }
    1072 #else
     1111# else
    10731112    RT_NOREF(vmmR0ThreadCtxCallback);
    10741113    int rc = VERR_NOT_SUPPORTED;
     1114# endif
    10751115#endif
    10761116
    10771117    pVCpu->vmmr0.s.hCtxHook = NIL_RTTHREADCTXHOOK;
    10781118    pVCpu->pGVM->vmm.s.fIsUsingContextHooks = false;
    1079     if (rc == VERR_NOT_SUPPORTED)
    1080         return VINF_SUCCESS;
    1081 
    1082     LogRelMax(32, ("RTThreadCtxHookCreate failed! rc=%Rrc pVCpu=%p idCpu=%RU32\n", rc, pVCpu, pVCpu->idCpu));
    1083     return VINF_SUCCESS; /* Just ignore it, we can live without context hooks. */
     1119#ifndef VBOX_WITH_MINIMAL_R0
     1120    if (rc != VERR_NOT_SUPPORTED) /* Just ignore it, we can live without context hooks. */
     1121        LogRelMax(32, ("RTThreadCtxHookCreate failed! rc=%Rrc pVCpu=%p idCpu=%RU32\n", rc, pVCpu, pVCpu->idCpu));
     1122#endif
     1123    return VINF_SUCCESS;
    10841124}
    10851125
     
    10931133VMMR0_INT_DECL(void) VMMR0ThreadCtxHookDestroyForEmt(PVMCPUCC pVCpu)
    10941134{
     1135#ifndef VBOX_WITH_MINIMAL_R0
    10951136    int rc = RTThreadCtxHookDestroy(pVCpu->vmmr0.s.hCtxHook);
    10961137    AssertRC(rc);
     1138#endif
    10971139    pVCpu->vmmr0.s.hCtxHook = NIL_RTTHREADCTXHOOK;
    10981140}
    10991141
     1142#ifndef VBOX_WITH_MINIMAL_R0
    11001143
    11011144/**
     
    11611204}
    11621205
     1206#endif /* !VBOX_WITH_MINIMAL_R0 */
    11631207
    11641208/**
     
    13801424    switch (enmOperation)
    13811425    {
     1426#ifndef VBOX_WITH_MINIMAL_R0
    13821427        /*
    13831428         * Run guest code using the available hardware acceleration technology.
     
    14201465                        GVMMR0SchedUpdatePeriodicPreemptionTimer(pGVM, pGVCpu->idHostCpu, TMCalcHostTimerFrequency(pGVM, pGVCpu));
    14211466
    1422 #ifdef VMM_R0_TOUCH_FPU
     1467# ifdef VMM_R0_TOUCH_FPU
    14231468                    /*
    14241469                     * Make sure we've got the FPU state loaded so and we don't need to clear
     
    14271472                     */
    14281473                    CPUMR0TouchHostFpu();
    1429 #endif
     1474# endif
    14301475                    int  rc;
    14311476                    bool fPreemptRestored = false;
     
    14791524                                rc = VERR_VMM_WRONG_HM_VMCPU_STATE;
    14801525                            }
    1481 #if 0
     1526# if 0
    14821527                            /** @todo Get rid of this. HM shouldn't disable the context hook. */
    14831528                            else if (RT_UNLIKELY(vmmR0ThreadCtxHookIsEnabled(pGVCpu)))
     
    14881533                                rc = VERR_VMM_CONTEXT_HOOK_STILL_ENABLED;
    14891534                            }
    1490 #endif
     1535# endif
    14911536
    14921537                            VMMRZCallRing3Disable(pGVCpu); /* Lazy bird: Simpler just disabling it again... */
     
    15341579                    /* Fire dtrace probe and collect statistics. */
    15351580                    VBOXVMM_R0_VMM_RETURN_TO_RING3_HM(pGVCpu, CPUMQueryGuestCtxPtr(pGVCpu), rc);
    1536 #ifdef VBOX_WITH_STATISTICS
     1581# ifdef VBOX_WITH_STATISTICS
    15371582                    vmmR0RecordRC(pGVM, pGVCpu, rc);
    1538 #endif
     1583# endif
    15391584                    VMMRZCallRing3Enable(pGVCpu);
    15401585
     
    15851630        }
    15861631
    1587 #ifdef VBOX_WITH_NEM_R0
    1588 # if defined(RT_ARCH_AMD64) && defined(RT_OS_WINDOWS)
     1632# ifdef VBOX_WITH_NEM_R0
     1633#  if defined(RT_ARCH_AMD64) && defined(RT_OS_WINDOWS)
    15891634        case VMMR0_DO_NEM_RUN:
    15901635        {
     
    15921637             * Setup the longjmp machinery and execute guest code (calls NEMR0RunGuestCode).
    15931638             */
    1594 ifdef VBOXSTRICTRC_STRICT_ENABLED
     1639 ifdef VBOXSTRICTRC_STRICT_ENABLED
    15951640            int rc = vmmR0CallRing3SetJmp2(&pGVCpu->vmmr0.s.AssertJmpBuf, (PFNVMMR0SETJMP2)NEMR0RunGuestCode, pGVM, idCpu);
    1596 else
     1641 else
    15971642            int rc = vmmR0CallRing3SetJmp2(&pGVCpu->vmmr0.s.AssertJmpBuf, NEMR0RunGuestCode, pGVM, idCpu);
    1598 endif
     1643 endif
    15991644            STAM_COUNTER_INC(&pGVM->vmm.s.StatRunGC);
    16001645
     
    16051650             */
    16061651            VBOXVMM_R0_VMM_RETURN_TO_RING3_NEM(pGVCpu, CPUMQueryGuestCtxPtr(pGVCpu), rc);
    1607 ifdef VBOX_WITH_STATISTICS
     1652 ifdef VBOX_WITH_STATISTICS
    16081653            vmmR0RecordRC(pGVM, pGVCpu, rc);
     1654#   endif
     1655            break;
     1656        }
    16091657#  endif
    1610             break;
    1611         }
    16121658# endif
    1613 #endif
     1659
     1660#endif /* !VBOX_WITH_MINIMAL_R0 */
    16141661
    16151662        /*
     
    18671914            break;
    18681915
     1916#ifndef VBOX_WITH_MINIMAL_R0
     1917
    18691918        /*
    18701919         * Attempt to enable hm mode and check the current setting.
     
    20282077            break;
    20292078
    2030 #ifdef VBOX_WITH_PAGE_SHARING
     2079# ifdef VBOX_WITH_PAGE_SHARING
    20312080        case VMMR0_DO_GMM_CHECK_SHARED_MODULES:
    20322081        {
     
    20392088            break;
    20402089        }
    2041 #endif
    2042 
    2043 #if defined(VBOX_STRICT) && HC_ARCH_BITS == 64
     2090# endif
     2091
     2092# if defined(VBOX_STRICT) && HC_ARCH_BITS == 64
    20442093        case VMMR0_DO_GMM_FIND_DUPLICATE_PAGE:
    20452094            if (u64Arg)
     
    20472096            rc = GMMR0FindDuplicatePageReq(pGVM, (PGMMFINDDUPLICATEPAGEREQ)pReqHdr);
    20482097            break;
    2049 #endif
     2098# endif
    20502099
    20512100        case VMMR0_DO_GMM_QUERY_STATISTICS:
     
    20602109            rc = GMMR0ResetStatisticsReq(pGVM, (PGMMRESETSTATISTICSSREQ)pReqHdr);
    20612110            break;
     2111
     2112#endif /* !VBOX_WITH_MINIMAL_R0 */
    20622113
    20632114        /*
     
    20882139        }
    20892140
     2141#ifndef VBOX_WITH_MINIMAL_R0
    20902142        /*
    20912143         * PDM Wrappers.
     
    21312183            break;
    21322184        }
     2185#endif /* !VBOX_WITH_MINIMAL_R0 */
    21332186
    21342187        /*
     
    21932246            break;
    21942247
    2195 #if 0 //def VBOX_WITH_PCI_PASSTHROUGH
     2248#if 0 //defined(VBOX_WITH_PCI_PASSTHROUGH) && !defined(VBOX_WITH_MINIMAL_R0)
    21962249        /*
    21972250         * Requests to host PCI driver service.
     
    22042257#endif
    22052258
     2259#ifndef VBOX_WITH_MINIMAL_R0
     2260
    22062261        /*
    22072262         * NEM requests.
    22082263         */
    2209 #ifdef VBOX_WITH_NEM_R0
    2210 # if defined(RT_ARCH_AMD64) && defined(RT_OS_WINDOWS)
     2264# ifdef VBOX_WITH_NEM_R0
     2265#  if defined(RT_ARCH_AMD64) && defined(RT_OS_WINDOWS)
    22112266        case VMMR0_DO_NEM_INIT_VM:
    22122267            if (u64Arg || pReqHdr || idCpu != 0)
     
    22632318            break;
    22642319
    2265 #   if 1 && defined(DEBUG_bird)
     2320#    if 1 && defined(DEBUG_bird)
    22662321        case VMMR0_DO_NEM_EXPERIMENT:
    22672322            if (pReqHdr)
     
    22692324            rc = NEMR0DoExperiment(pGVM, idCpu, u64Arg);
    22702325            break;
    2271 #   endif
     2326#    endif
     2327#  endif
    22722328# endif
    2273 #endif
    22742329
    22752330        /*
     
    23212376         * DBGF requests.
    23222377         */
    2323 #ifdef VBOX_WITH_DBGF_TRACING
     2378# ifdef VBOX_WITH_DBGF_TRACING
    23242379        case VMMR0_DO_DBGF_TRACER_CREATE:
    23252380        {
     
    23342389            if (!pReqHdr || u64Arg)
    23352390                return VERR_INVALID_PARAMETER;
    2336 # if 0 /** @todo */
     2391#  if 0 /** @todo */
    23372392            rc = DBGFR0TracerGenCallReqHandler(pGVM, (PDBGFTRACERGENCALLREQ)pReqHdr, idCpu);
    2338 # else
     2393#  else
    23392394            rc = VERR_NOT_IMPLEMENTED;
     2395#  endif
     2396            break;
     2397        }
    23402398# endif
    2341             break;
    2342         }
    2343 #endif
    23442399
    23452400        case VMMR0_DO_DBGF_BP_INIT:
     
    23942449            break;
    23952450        }
     2451
     2452#endif /* n!VBOX_WITH_MINIMAL_R0 */
    23962453
    23972454        /*
     
    24212478
    24222479
     2480#ifndef RT_ARCH_ARM64 /** @todo port vmmR0CallRing3SetJmpEx to ARM64 */
    24232481/**
    24242482 * This is just a longjmp wrapper function for VMMR0EntryEx calls.
     
    24372495                              pGVCpu->vmmr0.s.pSession);
    24382496}
     2497#endif
    24392498
    24402499
     
    24562515                            PSUPVMMR0REQHDR pReq, uint64_t u64Arg, PSUPDRVSESSION pSession)
    24572516{
     2517#ifndef RT_ARCH_ARM64 /** @todo port vmmR0CallRing3SetJmpEx to ARM64 - see RTAssertShouldPanic */
    24582518    /*
    24592519     * Requests that should only happen on the EMT thread will be
     
    24882548        return VERR_VM_THREAD_NOT_EMT;
    24892549    }
     2550#else
     2551    RT_NOREF(pVM);
     2552#endif
    24902553    return vmmR0EntryExWorker(pGVM, idCpu, enmOperation, pReq, u64Arg, pSession);
    24912554}
     
    31913254static bool vmmR0LoggerFlushInnerToParent(PVMMR0PERVCPULOGGER pR0Log, PRTLOGBUFFERDESC pBufDesc)
    31923255{
     3256#ifdef RT_ARCH_AMD64
    31933257    uint32_t const cbToFlush = pBufDesc->offBuf;
    31943258    if (pR0Log->fFlushToParentVmmDbg)
     
    31963260    if (pR0Log->fFlushToParentVmmRel)
    31973261        RTLogWriteVmm(pBufDesc->pchBuf, cbToFlush, true /*fRelease*/);
     3262#else
     3263    RT_NOREF(pR0Log, pBufDesc);
     3264#endif
    31983265    return true;
    31993266}
     
    36223689DECLEXPORT(bool) RTCALL RTAssertShouldPanic(void)
    36233690{
    3624 #if 0
     3691#ifdef RT_ARCH_ARM64 /** @todo port vmmR0CallRing3SetJmpEx/vmmR0CallRing3LongJmp to ARM64 */
    36253692    return true;
    36263693#else
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