VirtualBox

Ignore:
Timestamp:
Apr 1, 2009 10:11:29 PM (16 years ago)
Author:
vboxsync
Message:

PGM,EM: Handle out of memory situations more gracefully - part 1. New debugger commands: .pgmerror and .pgmerroroff.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/PGMAllBth.h

    r18330 r18617  
    7575 *
    7676 * @returns VBox status code (appropriate for trap handling and GC return).
     77 *
    7778 * @param   pVM         VM Handle.
    7879 * @param   uErr        The trap error code.
     
    764765                            return rc;
    765766                        }
     767                        if (RT_UNLIKELY(VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY)))
     768                            return VINF_EM_NO_MEMORY;
    766769                    }
    767770                    /// @todo count the above case; else
     
    17151718# ifdef PGM_SYNC_N_PAGES
    17161719                    Assert(cPages == 1 || !(uErr & X86_TRAP_PF_P));
    1717                     if (cPages > 1 && !(uErr & X86_TRAP_PF_P))
     1720                    if (    cPages > 1
     1721                        &&  !(uErr & X86_TRAP_PF_P)
     1722                        &&  !VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY))
    17181723                    {
    17191724                        /*
     
    19531958
    19541959    Assert(cPages == 1 || !(uErr & X86_TRAP_PF_P));
    1955     if (cPages > 1 && !(uErr & X86_TRAP_PF_P))
     1960    if (    cPages > 1
     1961        &&  !(uErr & X86_TRAP_PF_P)
     1962        &&  !VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY))
    19561963    {
    19571964        /*
     
    19932000                      (uint64_t)pPTDst->a[iPTDst].u,
    19942001                      pPTDst->a[iPTDst].u & PGM_PTFLAGS_TRACK_DIRTY ? " Track-Dirty" : ""));
     2002
     2003                if (RT_UNLIKELY(VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY)))
     2004                    break;
    19952005            }
    19962006            else
     
    26772687            PPGMRAMRANGE    pRam   = pVM->pgm.s.CTX_SUFF(pRamRanges);
    26782688            unsigned        iPTDst = 0;
    2679             while (iPTDst < RT_ELEMENTS(pPTDst->a))
     2689            while (     iPTDst < RT_ELEMENTS(pPTDst->a)
     2690                   &&   !VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY))
    26802691            {
    26812692                /* Advance ram range list. */
     
    27002711                            rc = pgmPhysPageMakeWritableUnlocked(pVM, pPage, GCPhys);
    27012712                            AssertRCReturn(rc, rc);
     2713                            if (VM_FF_ISPENDING(pVM, VM_FF_PGM_NO_MEMORY))
     2714                                break;
    27022715                        }
    27032716#  endif
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