VirtualBox

Changeset 27023 in vbox for trunk/src/VBox/Additions/WINNT


Ignore:
Timestamp:
Mar 4, 2010 1:32:45 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
58333
Message:

Guest Additions: memory ballooning for guests without support for RTR0MemObjAllocPhysNC()

Location:
trunk/src/VBox/Additions/WINNT/VBoxGuest
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/VBoxGuest/VBoxGuest.cpp

    r26999 r27023  
    558558
    559559#ifdef VBOX_WITH_MANAGEMENT
    560 static int VBoxGuestSetBalloonSize(PVBOXGUESTDEVEXT pDevExt, uint32_t u32BalloonSize)
     560static int VBoxGuestSetBalloonSize(PVBOXGUESTDEVEXT pDevExt, uint32_t cBalloonChunks)
    561561{
    562562    VMMDevChangeMemBalloon *req = NULL;
     
    564564    uint32_t i;
    565565
    566     if (u32BalloonSize > pDevExt->MemBalloon.cMaxBalloons)
    567     {
    568         AssertMsgFailed(("VBoxGuestSetBalloonSize illegal balloon size %d (max=%d)\n", u32BalloonSize, pDevExt->MemBalloon.cMaxBalloons));
     566    if (cBalloonChunks > pDevExt->MemBalloon.cMaxBalloonChunks)
     567    {
     568        AssertMsgFailed(("VBoxGuestSetBalloonSize illegal balloon size %d (max=%d)\n", cBalloonChunks, pDevExt->MemBalloon.cMaxBalloonChunks));
    569569        return VERR_INVALID_PARAMETER;
    570570    }
    571571
    572     if (u32BalloonSize == pDevExt->MemBalloon.cBalloons)
     572    if (cBalloonChunks == pDevExt->MemBalloon.cBalloonChunks)
    573573        return VINF_SUCCESS;    /* nothing to do */
    574574
     
    578578        return rc;
    579579
    580     if (u32BalloonSize > pDevExt->MemBalloon.cBalloons)
     580    if (cBalloonChunks > pDevExt->MemBalloon.cBalloonChunks)
    581581    {
    582582        /* inflate */
    583         for (i = pDevExt->MemBalloon.cBalloons; i < u32BalloonSize; i++)
     583        for (i = pDevExt->MemBalloon.cBalloonChunks; i < cBalloonChunks; i++)
    584584        {
    585585#ifndef TARGET_NT4
     
    669669#endif
    670670                pDevExt->MemBalloon.paMdlMemBalloon[i] = pMdl;
    671                 pDevExt->MemBalloon.cBalloons++;
     671                pDevExt->MemBalloon.cBalloonChunks++;
    672672            }
    673673        }
     
    676676    {
    677677        /* deflate */
    678         for (i = pDevExt->MemBalloon.cBalloons; i > u32BalloonSize; i--)
     678        for (i = pDevExt->MemBalloon.cBalloonChunks; i > cBalloonChunks; i--)
    679679        {
    680680            uint32_t index = i - 1;
     
    718718
    719719                pDevExt->MemBalloon.paMdlMemBalloon[index] = NULL;
    720                 pDevExt->MemBalloon.cBalloons--;
    721             }
    722         }
    723     }
    724     Assert(pDevExt->MemBalloon.cBalloons <= pDevExt->MemBalloon.cMaxBalloons);
     720                pDevExt->MemBalloon.cBalloonChunks--;
     721            }
     722        }
     723    }
     724    Assert(pDevExt->MemBalloon.cBalloonChunks <= pDevExt->MemBalloon.cMaxBalloonChunks);
    725725
    726726end:
     
    752752            if (!pDevExt->MemBalloon.paMdlMemBalloon)
    753753            {
    754                 pDevExt->MemBalloon.cMaxBalloons = req->u32PhysMemSize;
    755                 pDevExt->MemBalloon.paMdlMemBalloon = (PMDL *)ExAllocatePool(PagedPool, req->u32PhysMemSize * sizeof(PMDL));
     754                pDevExt->MemBalloon.cMaxBalloonChunks = req->cPhysMemChunks;
     755                pDevExt->MemBalloon.paMdlMemBalloon = (PMDL *)ExAllocatePool(PagedPool, req->cPhysMemChunks * sizeof(PMDL));
    756756                Assert(pDevExt->MemBalloon.paMdlMemBalloon);
    757757                if (!pDevExt->MemBalloon.paMdlMemBalloon)
    758758                    return VERR_NO_MEMORY;
    759759            }
    760             Assert(pDevExt->MemBalloon.cMaxBalloons == req->u32PhysMemSize);
    761 
    762             rc = VBoxGuestSetBalloonSize(pDevExt, req->u32BalloonSize);
     760            Assert(pDevExt->MemBalloon.cMaxBalloonChunks == req->cPhysMemChunks);
     761
     762            rc = VBoxGuestSetBalloonSize(pDevExt, req->cBalloonChunks);
    763763            /* ignore out of memory failures */
    764764            if (rc == VERR_NO_MEMORY)
     
    766766
    767767            if (pMemBalloonSize)
    768                 *pMemBalloonSize = pDevExt->MemBalloon.cBalloons;
     768                *pMemBalloonSize = pDevExt->MemBalloon.cBalloonChunks;
    769769        }
    770770
     
    780780    ULONG dummy;
    781781
    782     pDevExt->MemBalloon.cBalloons      = 0;
    783     pDevExt->MemBalloon.cMaxBalloons    = 0;
     782    pDevExt->MemBalloon.cBalloonChunks = 0;
     783    pDevExt->MemBalloon.cMaxBalloonChunks = 0;
    784784    pDevExt->MemBalloon.paMdlMemBalloon = NULL;
    785785
     
    798798        pDevExt->MemBalloon.paMdlMemBalloon = NULL;
    799799    }
    800     Assert(pDevExt->MemBalloon.cBalloons == 0);
     800    Assert(pDevExt->MemBalloon.cBalloonChunks == 0);
    801801#endif
    802802}
     
    13821382        case VBOXGUEST_IOCTL_CHECK_BALLOON:
    13831383        {
    1384             ULONG *pMemBalloonSize = (ULONG *) pBuf;
     1384            VBoxGuestCheckBalloonInfo *pInfo = (VBoxGuestCheckBalloonInfo *)pBuf;
    13851385
    13861386            if (pStack->Parameters.DeviceIoControl.OutputBufferLength != sizeof(ULONG))
     
    13921392            }
    13931393
    1394             int rc = VBoxGuestQueryMemoryBalloon(pDevExt, pMemBalloonSize);
     1394            ULONG cMemoryBalloonChunks;
     1395            int rc = VBoxGuestQueryMemoryBalloon(pDevExt, &cMemoryBalloonChunks);
    13951396            if (RT_FAILURE(rc))
    13961397            {
     
    14011402            {
    14021403                cbOut = pStack->Parameters.DeviceIoControl.OutputBufferLength;
     1404                pInfo->cBalloonChunks = cMemoryBalloonChunks;
     1405                pInfo->fHandleInR3 = false;
    14031406            }
    14041407            break;
  • trunk/src/VBox/Additions/WINNT/VBoxGuest/VBoxGuest_Internal.h

    r25022 r27023  
    216216    struct
    217217    {
    218         uint32_t     cBalloons;
    219         uint32_t     cMaxBalloons;
     218        uint32_t     cBalloonChunks;
     219        uint32_t     cMaxBalloonChunks;
    220220        PMDL        *paMdlMemBalloon;
    221221    } MemBalloon;
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