VirtualBox

儲存庫 vbox 的更動 11945


忽略:
時間撮記:
2008-9-1 下午05:43:08 (16 年 以前)
作者:
vboxsync
訊息:

Dropped stack position/empty requirement when restoring the vmm part. A save can never be initiated when we're in a host call (from GC).

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/VMM/VMM.cpp

    r11944 r11945  
    16451645    if (VBOX_FAILURE(rc))
    16461646        return rc;
    1647     if (    GCPtrStackBottom == pVM->vmm.s.pbGCStackBottom
    1648         ||  (GCPtrStackBottom -  GCPtrESP < 32)) /** @todo This will break if we start preemting the hypervisor. */
    1649     {
    1650         /*
    1651          * We *must* set the ESP because the CPUM load + PGM load relocations will render
    1652          * the ESP in CPUM fatally invalid.
    1653          */
    1654         CPUMSetHyperESP(pVM, GCPtrESP);
    1655 
    1656         /* restore the stack. */
    1657         SSMR3GetMem(pSSM, pVM->vmm.s.pbHCStack, VMM_STACK_SIZE);
    1658 
    1659         /* terminator */
    1660         uint32_t u32;
    1661         rc = SSMR3GetU32(pSSM, &u32);
    1662         if (VBOX_FAILURE(rc))
    1663             return rc;
    1664         if (u32 != ~0U)
    1665         {
    1666             AssertMsgFailed(("u32=%#x\n", u32));
    1667             return VERR_SSM_DATA_UNIT_FORMAT_CHANGED;
    1668         }
    1669         return VINF_SUCCESS;
    1670     }
    1671 
    1672     LogRel(("The stack is not in the same place and it's not empty! GCPtrStackBottom=%VRv pbGCStackBottom=%VRv ESP=%VRv\n",
    1673             GCPtrStackBottom, pVM->vmm.s.pbGCStackBottom, GCPtrESP));
    1674     if (SSMR3HandleGetAfter(pSSM) == SSMAFTER_DEBUG_IT)
    1675         return VINF_SUCCESS; /* ignore this */
    1676     AssertFailed();
    1677     return VERR_SSM_LOAD_CONFIG_MISMATCH;
     1647
     1648    /* Previously we checked if the location of the stack was identical or that the stack was empty.
     1649     * This is not required as we can never initiate a save when GC context code performs a ring 3 call.
     1650     */
     1651    /* restore the stack. (not necessary; just consistency checking) */
     1652    SSMR3GetMem(pSSM, pVM->vmm.s.pbHCStack, VMM_STACK_SIZE);
     1653
     1654    /* terminator */
     1655    uint32_t u32;
     1656    rc = SSMR3GetU32(pSSM, &u32);
     1657    if (VBOX_FAILURE(rc))
     1658        return rc;
     1659    if (u32 != ~0U)
     1660    {
     1661        AssertMsgFailed(("u32=%#x\n", u32));
     1662        return VERR_SSM_DATA_UNIT_FORMAT_CHANGED;
     1663    }
     1664    return VINF_SUCCESS;
    16781665}
    16791666
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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