VirtualBox

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


Ignore:
Timestamp:
Aug 17, 2010 2:51:12 PM (14 years ago)
Author:
vboxsync
Message:

FT updates

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

Legend:

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

    r31734 r31737  
    2121*******************************************************************************/
    2222#define LOG_GROUP LOG_GROUP_FTM
     23#include "FTMInternal.h"
     24#include <VBox/vm.h>
    2325#include <VBox/vmm.h>
    24 #include <VBox/vm.h>
    2526#include <VBox/err.h>
    2627#include <VBox/param.h>
    27 #include "FTMInternal.h"
     28#include <VBox/ssm.h>
    2829
    2930#include <iprt/assert.h>
     31#include <iprt/thread.h>
     32#include <iprt/string.h>
     33#include <iprt/mem.h>
    3034#include <VBox/log.h>
    3135
     36/**
     37 * Initializes the FTM.
     38 *
     39 * @returns VBox status code.
     40 * @param   pVM         The VM to operate on.
     41 */
     42VMMR3DECL(int) FTMR3Init(PVM pVM)
     43{
     44    /** @todo saved state for master nodes! */
     45    pVM->ftm.s.pszAddress     = NULL;
     46    pVM->fFaultTolerantMaster = false;
     47    return VINF_SUCCESS;
     48}
     49
     50/**
     51 * Terminates the FTM.
     52 *
     53 * Termination means cleaning up and freeing all resources,
     54 * the VM it self is at this point powered off or suspended.
     55 *
     56 * @returns VBox status code.
     57 * @param   pVM         The VM to operate on.
     58 */
     59VMMR3DECL(int) FTMR3Term(PVM pVM)
     60{
     61    if (pVM->ftm.s.pszAddress)
     62        RTMemFree(pVM->ftm.s.pszAddress);
     63
     64    return VINF_SUCCESS;
     65}
     66
     67/**
     68 * Thread function which starts syncing process for this master VM
     69 *
     70 * @param   Thread      The thread id.
     71 * @param   pvUser      Not used
     72 * @return  VINF_SUCCESS (ignored).
     73 *
     74 * @note Locks the Console object for writing.
     75 */
     76static DECLCALLBACK(int) ftmR3MasterThread(RTTHREAD Thread, void *pvUser)
     77{
     78    return VINF_SUCCESS;
     79}
    3280
    3381/**
     
    4896VMMR3DECL(int) FTMR3PowerOn(PVM pVM, bool fMaster, unsigned uInterval, const char *pszAddress, unsigned uPort)
    4997{
     98    int rc;
     99
    50100    VMSTATE enmVMState = VMR3GetState(pVM);
    51101    AssertMsgReturn(enmVMState == VMSTATE_POWERING_ON,
     
    53103                    VERR_INTERNAL_ERROR_4);
    54104
     105    pVM->ftm.s.uInterval  = uInterval;
     106    pVM->ftm.s.uPort      = uPort;
     107    pVM->ftm.s.pszAddress = RTStrDup(pszAddress);
    55108    if (fMaster)
    56109    {
     110        rc = RTThreadCreate(NULL, ftmR3MasterThread, NULL,
     111                            0, RTTHREADTYPE_IO /* higher than normal priority */, 0, "ftmR3MasterThread");
     112        if (RT_FAILURE(rc))
     113            return rc;
     114
     115        pVM->fFaultTolerantMaster = true;
    57116        return VMR3PowerOn(pVM);
    58117    }
  • trunk/src/VBox/VMM/VM.cpp

    r31695 r31737  
    6262#include <VBox/iom.h>
    6363#include <VBox/ssm.h>
     64#include <VBox/ftm.h>
    6465#include <VBox/hwaccm.h>
    6566#include "VMInternal.h"
     
    836837                        if (RT_SUCCESS(rc))
    837838                        {
    838                             rc = VMMR3Init(pVM);
     839                            rc = FTMR3Init(pVM);
    839840                            if (RT_SUCCESS(rc))
    840841                            {
    841                                 rc = SELMR3Init(pVM);
     842                                rc = VMMR3Init(pVM);
    842843                                if (RT_SUCCESS(rc))
    843844                                {
    844                                     rc = TRPMR3Init(pVM);
     845                                    rc = SELMR3Init(pVM);
    845846                                    if (RT_SUCCESS(rc))
    846847                                    {
    847                                         rc = CSAMR3Init(pVM);
     848                                        rc = TRPMR3Init(pVM);
    848849                                        if (RT_SUCCESS(rc))
    849850                                        {
    850                                             rc = PATMR3Init(pVM);
     851                                            rc = CSAMR3Init(pVM);
    851852                                            if (RT_SUCCESS(rc))
    852853                                            {
    853                                                 rc = IOMR3Init(pVM);
     854                                                rc = PATMR3Init(pVM);
    854855                                                if (RT_SUCCESS(rc))
    855856                                                {
    856                                                     rc = EMR3Init(pVM);
     857                                                    rc = IOMR3Init(pVM);
    857858                                                    if (RT_SUCCESS(rc))
    858859                                                    {
    859                                                         rc = DBGFR3Init(pVM);
     860                                                        rc = EMR3Init(pVM);
    860861                                                        if (RT_SUCCESS(rc))
    861862                                                        {
    862                                                             rc = PDMR3Init(pVM);
     863                                                            rc = DBGFR3Init(pVM);
    863864                                                            if (RT_SUCCESS(rc))
    864865                                                            {
    865                                                                 rc = PGMR3InitDynMap(pVM);
    866                                                                 if (RT_SUCCESS(rc))
    867                                                                     rc = MMR3HyperInitFinalize(pVM);
    868                                                                 if (RT_SUCCESS(rc))
    869                                                                     rc = PATMR3InitFinalize(pVM);
    870                                                                 if (RT_SUCCESS(rc))
    871                                                                     rc = PGMR3InitFinalize(pVM);
    872                                                                 if (RT_SUCCESS(rc))
    873                                                                     rc = SELMR3InitFinalize(pVM);
    874                                                                 if (RT_SUCCESS(rc))
    875                                                                     rc = TMR3InitFinalize(pVM);
    876                                                                 if (RT_SUCCESS(rc))
    877                                                                     rc = VMMR3InitFinalize(pVM);
    878                                                                 if (RT_SUCCESS(rc))
    879                                                                     rc = REMR3InitFinalize(pVM);
    880                                                                 if (RT_SUCCESS(rc))
    881                                                                     rc = vmR3InitDoCompleted(pVM, VMINITCOMPLETED_RING3);
     866                                                                rc = PDMR3Init(pVM);
    882867                                                                if (RT_SUCCESS(rc))
    883868                                                                {
    884                                                                     LogFlow(("vmR3InitRing3: returns %Rrc\n", VINF_SUCCESS));
    885                                                                     return VINF_SUCCESS;
     869                                                                    rc = PGMR3InitDynMap(pVM);
     870                                                                    if (RT_SUCCESS(rc))
     871                                                                        rc = MMR3HyperInitFinalize(pVM);
     872                                                                    if (RT_SUCCESS(rc))
     873                                                                        rc = PATMR3InitFinalize(pVM);
     874                                                                    if (RT_SUCCESS(rc))
     875                                                                        rc = PGMR3InitFinalize(pVM);
     876                                                                    if (RT_SUCCESS(rc))
     877                                                                        rc = SELMR3InitFinalize(pVM);
     878                                                                    if (RT_SUCCESS(rc))
     879                                                                        rc = TMR3InitFinalize(pVM);
     880                                                                    if (RT_SUCCESS(rc))
     881                                                                        rc = VMMR3InitFinalize(pVM);
     882                                                                    if (RT_SUCCESS(rc))
     883                                                                        rc = REMR3InitFinalize(pVM);
     884                                                                    if (RT_SUCCESS(rc))
     885                                                                        rc = vmR3InitDoCompleted(pVM, VMINITCOMPLETED_RING3);
     886                                                                    if (RT_SUCCESS(rc))
     887                                                                    {
     888                                                                        LogFlow(("vmR3InitRing3: returns %Rrc\n", VINF_SUCCESS));
     889                                                                        return VINF_SUCCESS;
     890                                                                    }
     891                                                                    int rc2 = PDMR3Term(pVM);
     892                                                                    AssertRC(rc2);
    886893                                                                }
    887                                                                 int rc2 = PDMR3Term(pVM);
     894                                                                int rc2 = DBGFR3Term(pVM);
    888895                                                                AssertRC(rc2);
    889896                                                            }
    890                                                             int rc2 = DBGFR3Term(pVM);
     897                                                            int rc2 = EMR3Term(pVM);
    891898                                                            AssertRC(rc2);
    892899                                                        }
    893                                                         int rc2 = EMR3Term(pVM);
     900                                                        int rc2 = IOMR3Term(pVM);
    894901                                                        AssertRC(rc2);
    895902                                                    }
    896                                                     int rc2 = IOMR3Term(pVM);
     903                                                    int rc2 = PATMR3Term(pVM);
    897904                                                    AssertRC(rc2);
    898905                                                }
    899                                                 int rc2 = PATMR3Term(pVM);
     906                                                int rc2 = CSAMR3Term(pVM);
    900907                                                AssertRC(rc2);
    901908                                            }
    902                                             int rc2 = CSAMR3Term(pVM);
     909                                            int rc2 = TRPMR3Term(pVM);
    903910                                            AssertRC(rc2);
    904911                                        }
    905                                         int rc2 = TRPMR3Term(pVM);
     912                                        int rc2 = SELMR3Term(pVM);
    906913                                        AssertRC(rc2);
    907914                                    }
    908                                     int rc2 = SELMR3Term(pVM);
     915                                    int rc2 = VMMR3Term(pVM);
    909916                                    AssertRC(rc2);
    910917                                }
    911                                 int rc2 = VMMR3Term(pVM);
     918                                int rc2 = FTMR3Term(pVM);
    912919                                AssertRC(rc2);
    913920                            }
     
    22442251#endif
    22452252        AssertRC(rc);
     2253        rc = FTMR3Term(pVM);
     2254        AssertRC(rc);
    22462255        rc = DBGFR3Term(pVM);
    22472256        AssertRC(rc);
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