VirtualBox

Changeset 11141 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Aug 5, 2008 5:16:08 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
34117
Message:

VMM: Try harder allocating the core code page(s). Solaris frequently throws up series of bad pages here, very little we can do about it when there is lots of memory on the system (without having to relocate during init).

File:
1 edited

Legend:

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

    r10720 r11141  
    248248        if (rc == VERR_PGM_INTERMEDIATE_PAGING_CONFLICT)
    249249        {
    250             /* try more allocations. */
    251             struct
     250            /* try more allocations - Solaris  */
     251            const unsigned cTries = 4112;
     252            struct VMMInitBadTry
    252253            {
    253254                RTR0PTR  pvR0;
     
    255256                RTHCPHYS HCPhys;
    256257                RTUINT   cb;
    257             } aBadTries[128];
     258            } *paBadTries = (struct VMMInitBadTry *)RTMemTmpAlloc(sizeof(*paBadTries) * cTries);
     259            AssertReturn(paBadTries, VERR_NO_TMP_MEMORY);
    258260            unsigned i = 0;
    259261            do
    260262            {
    261                 aBadTries[i].pvR3 = pVM->vmm.s.pvHCCoreCodeR3;
    262                 aBadTries[i].pvR0 = pVM->vmm.s.pvHCCoreCodeR0;
    263                 aBadTries[i].HCPhys = pVM->vmm.s.HCPhysCoreCode;
     263                paBadTries[i].pvR3 = pVM->vmm.s.pvHCCoreCodeR3;
     264                paBadTries[i].pvR0 = pVM->vmm.s.pvHCCoreCodeR0;
     265                paBadTries[i].HCPhys = pVM->vmm.s.HCPhysCoreCode;
    264266                i++;
    265267                pVM->vmm.s.pvHCCoreCodeR0 = NIL_RTR0PTR;
     
    270272                rc = PGMR3MapIntermediate(pVM, pVM->vmm.s.pvHCCoreCodeR0, pVM->vmm.s.HCPhysCoreCode, cbCoreCode);
    271273            } while (   rc == VERR_PGM_INTERMEDIATE_PAGING_CONFLICT
    272                      && i < RT_ELEMENTS(aBadTries) - 1);
     274                     && i < cTries - 1);
    273275
    274276            /* cleanup */
    275277            if (VBOX_FAILURE(rc))
    276278            {
    277                 aBadTries[i].pvR3   = pVM->vmm.s.pvHCCoreCodeR3;
    278                 aBadTries[i].pvR0   = pVM->vmm.s.pvHCCoreCodeR0;
    279                 aBadTries[i].HCPhys = pVM->vmm.s.HCPhysCoreCode;
    280                 aBadTries[i].cb     = pVM->vmm.s.cbCoreCode;
     279                paBadTries[i].pvR3   = pVM->vmm.s.pvHCCoreCodeR3;
     280                paBadTries[i].pvR0   = pVM->vmm.s.pvHCCoreCodeR0;
     281                paBadTries[i].HCPhys = pVM->vmm.s.HCPhysCoreCode;
     282                paBadTries[i].cb     = pVM->vmm.s.cbCoreCode;
    281283                i++;
    282284                LogRel(("Failed to allocated and map core code: rc=%Vrc\n", rc));
     
    285287            {
    286288                LogRel(("Core code alloc attempt #%d: pvR3=%p pvR0=%p HCPhys=%VHp\n",
    287                         i, aBadTries[i].pvR3, aBadTries[i].pvR0, aBadTries[i].HCPhys));
    288                 SUPContFree(aBadTries[i].pvR3, aBadTries[i].cb >> PAGE_SHIFT);
    289             }
     289                        i, paBadTries[i].pvR3, paBadTries[i].pvR0, paBadTries[i].HCPhys));
     290                SUPContFree(paBadTries[i].pvR3, paBadTries[i].cb >> PAGE_SHIFT);
     291            }
     292            RTMemTmpFree(paBadTries);
    290293        }
    291294    }
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