VirtualBox

Changeset 2721 in vbox for trunk/src


Ignore:
Timestamp:
May 18, 2007 3:52:52 PM (18 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
21317
Message:

Updated SELMR3CheckTSS so it won't assert for no good reason.

File:
1 edited

Legend:

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

    r2720 r2721  
    17331733            }
    17341734        }
    1735     }
    1736 
    1737     if (!pVM->selm.s.fSyncTSSRing0Stack)
    1738     {
    1739         RTGCPTR     pGuestTSS = pVM->selm.s.GCPtrGuestTss;
    1740         uint32_t    ESPR0;
    1741         int rc = PGMPhysReadGCPtr(pVM, &ESPR0, pGuestTSS + RT_OFFSETOF(VBOXTSS, esp0), sizeof(ESPR0));
    1742         if (VBOX_SUCCESS(rc))
    1743         {
    1744             RTSEL SelSS0;
    1745             rc = PGMPhysReadGCPtr(pVM, &SelSS0, pGuestTSS + RT_OFFSETOF(VBOXTSS, ss0), sizeof(SelSS0));
     1735
     1736        if (!pVM->selm.s.fSyncTSSRing0Stack)
     1737        {
     1738            RTGCPTR     pGuestTSS = pVM->selm.s.GCPtrGuestTss;
     1739            uint32_t    ESPR0;
     1740            int rc = PGMPhysReadGCPtr(pVM, &ESPR0, pGuestTSS + RT_OFFSETOF(VBOXTSS, esp0), sizeof(ESPR0));
    17461741            if (VBOX_SUCCESS(rc))
    17471742            {
    1748                 if (    ESPR0 == pVM->selm.s.Tss.esp1
    1749                     &&  SelSS0 == (pVM->selm.s.Tss.ss1 & ~1))
    1750                     return true;
    1751 
    1752                 RTGCPHYS GCPhys;
    1753                 uint64_t fFlags;
    1754 
    1755                 rc = PGMGstGetPage(pVM, pGuestTSS, &fFlags, &GCPhys);
    1756                 AssertRC(rc);
    1757                 AssertMsgFailed(("TSS out of sync!! (%04X:%08X vs %04X:%08X (guest)) Tss=%VGv Phys=%VGp\n",
    1758                                  (pVM->selm.s.Tss.ss1 & ~1), pVM->selm.s.Tss.esp1, SelSS0, ESPR0, pGuestTSS, GCPhys));
     1743                RTSEL SelSS0;
     1744                rc = PGMPhysReadGCPtr(pVM, &SelSS0, pGuestTSS + RT_OFFSETOF(VBOXTSS, ss0), sizeof(SelSS0));
     1745                if (VBOX_SUCCESS(rc))
     1746                {
     1747                    if (    ESPR0 == pVM->selm.s.Tss.esp1
     1748                        &&  SelSS0 == (pVM->selm.s.Tss.ss1 & ~1))
     1749                        return true;
     1750
     1751                    RTGCPHYS GCPhys;
     1752                    uint64_t fFlags;
     1753
     1754                    rc = PGMGstGetPage(pVM, pGuestTSS, &fFlags, &GCPhys);
     1755                    AssertRC(rc);
     1756                    AssertMsgFailed(("TSS out of sync!! (%04X:%08X vs %04X:%08X (guest)) Tss=%VGv Phys=%VGp\n",
     1757                                     (pVM->selm.s.Tss.ss1 & ~1), pVM->selm.s.Tss.esp1, SelSS0, ESPR0, pGuestTSS, GCPhys));
     1758                }
     1759                else
     1760                    AssertRC(rc);
    17591761            }
    17601762            else
    1761                 AssertRC(rc);
    1762         }
    1763         else
    1764             /* Happens during early Windows XP boot when it is switching page tables. */
    1765             Assert(rc == VINF_SUCCESS || ((rc == VERR_PAGE_TABLE_NOT_PRESENT || rc == VERR_PAGE_NOT_PRESENT) && !(CPUMGetGuestEFlags(pVM) & X86_EFL_IF)));
     1763                /* Happens during early Windows XP boot when it is switching page tables. */
     1764                Assert(rc == VINF_SUCCESS || ((rc == VERR_PAGE_TABLE_NOT_PRESENT || rc == VERR_PAGE_NOT_PRESENT) && !(CPUMGetGuestEFlags(pVM) & X86_EFL_IF)));
     1765        }
    17661766    }
    17671767    return false;
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