Changeset 4492 in vbox for trunk/src/VBox
- Timestamp:
- Sep 3, 2007 12:10:30 PM (17 years ago)
- Location:
- trunk/src/VBox
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/VMMDev/VBoxDev.cpp
r4194 r4492 1179 1179 1180 1180 1181 case VMMDevReq_GetMemBalloonChangeRequest: 1182 { 1183 Log(("VMMDevReq_GetMemBalloonChangeRequest\n")); 1184 if (requestHeader->size != sizeof(VMMDevGetMemBalloonChangeRequest)) 1185 { 1186 requestHeader->rc = VERR_INVALID_PARAMETER; 1187 } 1188 else 1189 { 1190 VMMDevGetMemBalloonChangeRequest *memBalloonChangeRequest = (VMMDevGetMemBalloonChangeRequest*)requestHeader; 1191 /* just pass on the information */ 1192 Log(("VMMDev: returning memory balloon size =%d\n", pData->u32MemoryBalloonSize)); 1193 memBalloonChangeRequest->u32BalloonSize = pData->u32MemoryBalloonSize; 1194 1195 if (memBalloonChangeRequest->eventAck == VMMDEV_EVENT_BALLOON_CHANGE_REQUEST) 1196 { 1197 /* Remember which mode the client has queried. */ 1198 pData->u32LastMemoryBalloonSize = pData->u32MemoryBalloonSize; 1199 } 1200 1201 requestHeader->rc = VINF_SUCCESS; 1202 } 1203 break; 1204 } 1205 1206 case VMMDevReq_ReportGuestStats: 1207 { 1208 Log(("VMMDevReq_ReportGuestStats\n")); 1209 if (requestHeader->size != sizeof(VMMDevReportGuestStats)) 1210 { 1211 requestHeader->rc = VERR_INVALID_PARAMETER; 1212 } 1213 else 1214 { 1215 VMMDevReportGuestStats *stats = (VMMDevReportGuestStats*)requestHeader; 1216 1217 /* Update the last known memory balloon size */ 1218 if (stats->guestStats.u32StatCaps & VBOX_GUEST_STAT_PHYS_MEM_BALLOON) 1219 pData->u32LastMemoryBalloonSize = stats->guestStats.u32PhysMemBalloon; 1220 1221 /* forward the call */ 1222 requestHeader->rc = pData->pDrv->pfnReportStatistics(pData->pDrv, &stats->guestStats); 1223 } 1224 break; 1225 } 1226 1181 1227 case VMMDevReq_QueryCredentials: 1182 1228 { … … 1625 1671 /* IRQ so the guest knows what's going on */ 1626 1672 VMMDevNotifyGuest (pData, VMMDEV_EVENT_SEAMLESS_MODE_CHANGE_REQUEST); 1673 } 1674 1675 return VINF_SUCCESS; 1676 } 1677 1678 static DECLCALLBACK(int) vmmdevSetMemoryBalloon(PPDMIVMMDEVPORT pInterface, uint32_t ulBalloonSize) 1679 { 1680 VMMDevState *pData = IVMMDEVPORT_2_VMMDEVSTATE(pInterface); 1681 1682 /* Verify that the new resolution is different and that guest does not yet know about it. */ 1683 bool fSame = (pData->u32LastMemoryBalloonSize == ulBalloonSize); 1684 1685 Log(("vmmdevSetMemoryBalloon: old=%d. new=%d\n", pData->u32LastMemoryBalloonSize, ulBalloonSize)); 1686 1687 if (!fSame) 1688 { 1689 /* we could validate the information here but hey, the guest can do that as well! */ 1690 pData->u32MemoryBalloonSize = ulBalloonSize; 1691 1692 /* IRQ so the guest knows what's going on */ 1693 VMMDevNotifyGuest (pData, VMMDEV_EVENT_BALLOON_CHANGE_REQUEST); 1627 1694 } 1628 1695 … … 1917 1984 pData->Port.pfnVBVAChange = vmmdevVBVAChange; 1918 1985 pData->Port.pfnRequestSeamlessChange = vmmdevRequestSeamlessChange; 1986 pData->Port.pfnSetMemoryBalloon = vmmdevSetMemoryBalloon; 1919 1987 1920 1988 /* Shared folder LED */ … … 2045 2113 /* disable seamless mode */ 2046 2114 pData->fLastSeamlessEnabled = false; 2115 2116 /* disabled memory ballooning */ 2117 pData->u32LastMemoryBalloonSize = 0; 2047 2118 2048 2119 /* Clear the event variables. -
trunk/src/VBox/Devices/VMMDev/VMMDevState.h
r4071 r4492 132 132 } credentialsJudge; 133 133 134 /* memory balloon change request */ 135 uint32_t u32MemoryBalloonSize, u32LastMemoryBalloonSize; 136 134 137 /* seamless mode change request */ 135 138 bool fLastSeamlessEnabled, fSeamlessEnabled; -
trunk/src/VBox/Main/GuestImpl.cpp
r4321 r4492 174 174 STDMETHODIMP Guest::COMSETTER(MemoryBalloonSize) (ULONG aMemoryBalloonSize) 175 175 { 176 /** @todo fail if larger than physical memory */ 177 178 AutoCaller autoCaller (this); 179 CheckComRCReturnRC (autoCaller.rc()); 180 181 AutoReaderLock alock (this); 182 183 mMemoryBalloonSize = aMemoryBalloonSize; 184 185 return S_OK; 176 AutoCaller autoCaller (this); 177 CheckComRCReturnRC (autoCaller.rc()); 178 179 AutoReaderLock alock (this); 180 181 HRESULT ret = mParent->machine()->COMSETTER(MemoryBalloonSize)(aMemoryBalloonSize); 182 if (ret == S_OK) 183 { 184 mMemoryBalloonSize = aMemoryBalloonSize; 185 /* forward the information to the VMM device */ 186 VMMDev *vmmDev = mParent->getVMMDev(); 187 if (vmmDev) 188 vmmDev->getVMMDevPort()->pfnSetMemoryBalloon(vmmDev->getVMMDevPort(), aMemoryBalloonSize); 189 } 190 191 return ret; 186 192 } 187 193 -
trunk/src/VBox/Main/MachineImpl.cpp
r4475 r4492 41 41 #include "GuestOSTypeImpl.h" 42 42 #include "VirtualBoxErrorInfoImpl.h" 43 #include "GuestImpl.h" 43 44 44 45 #include "USBProxyService.h" … … 164 165 /* default values for a newly created machine */ 165 166 mMemorySize = 128; 167 mMemoryBalloonSize = 0; 166 168 mVRAMSize = 8; 167 169 mMonitorCount = 1; … … 188 190 189 191 if (mMemorySize != that.mMemorySize || 192 mMemoryBalloonSize != that.mMemoryBalloonSize || 190 193 mVRAMSize != that.mVRAMSize || 191 194 mMonitorCount != that.mMonitorCount || … … 977 980 return S_OK; 978 981 } 982 983 984 STDMETHODIMP Machine::COMGETTER(MemoryBalloonSize) (ULONG *memoryBalloonSize) 985 { 986 if (!memoryBalloonSize) 987 return E_POINTER; 988 989 AutoCaller autoCaller (this); 990 CheckComRCReturnRC (autoCaller.rc()); 991 992 AutoReaderLock alock (this); 993 994 *memoryBalloonSize = mHWData->mMemoryBalloonSize; 995 996 return S_OK; 997 } 998 999 STDMETHODIMP Machine::COMSETTER(MemoryBalloonSize) (ULONG memoryBalloonSize) 1000 { 1001 /* check limits */ 1002 if (memoryBalloonSize >= VMMDEV_MAX_MEMORY_BALLOON(mHWData->mMemorySize)) 1003 return setError (E_INVALIDARG, 1004 tr ("Invalid memory balloon size: %lu MB (must be in range [%lu, %lu] MB)"), 1005 memoryBalloonSize, 0, VMMDEV_MAX_MEMORY_BALLOON(mHWData->mMemorySize)); 1006 1007 AutoCaller autoCaller (this); 1008 CheckComRCReturnRC (autoCaller.rc()); 1009 1010 AutoLock alock (this); 1011 1012 HRESULT rc = checkStateDependency (MutableStateDep); 1013 CheckComRCReturnRC (rc); 1014 1015 mHWData.backup(); 1016 mHWData->mMemoryBalloonSize = memoryBalloonSize; 1017 1018 return S_OK; 1019 } 1020 979 1021 980 1022 STDMETHODIMP Machine::COMGETTER(MonitorCount) (ULONG *monitorCount) … … 4011 4053 #endif 4012 4054 4055 /* Guest node (optional) */ 4056 CFGNODE GuestNode = 0; 4057 CFGLDRGetChildNode (aNode, "Guest", 0, &GuestNode); 4058 if (GuestNode) 4059 { 4060 uint32_t memoryBalloonSize; 4061 CFGLDRQueryUInt32 (GuestNode, "memoryBalloonSize", &memoryBalloonSize); 4062 mHWData->mMemoryBalloonSize = memoryBalloonSize; 4063 4064 CFGLDRReleaseNode (GuestNode); 4065 } 4066 4013 4067 /* BIOS node (required) */ 4014 4068 { … … 5910 5964 } 5911 5965 #endif 5966 5967 /* Guest node (optional) */ 5968 { 5969 CFGNODE GuestNode = 0; 5970 CFGLDRCreateChildNode (aNode, "Guest", &GuestNode); 5971 CFGLDRSetUInt32 (GuestNode, "memoryBalloonSize", mHWData->mMemoryBalloonSize); 5972 CFGLDRReleaseNode (GuestNode); 5973 } 5912 5974 5913 5975 /* BIOS (required) */ -
trunk/src/VBox/Main/VMMDevInterface.cpp
r4071 r4492 351 351 *pcRect = cRect; 352 352 } 353 354 return VINF_SUCCESS; 355 } 356 357 /** 358 * Request the statistics interval 359 * 360 * @returns VBox status code. 361 * @param pInterface Pointer to this interface. 362 * @param pulInterval Pointer to interval in seconds 363 * @thread The emulation thread. 364 */ 365 DECLCALLBACK(int) vmmdevQueryStatisticsInterval(PPDMIVMMDEVCONNECTOR pInterface, uint32_t *pulInterval) 366 { 367 PDRVMAINVMMDEV pDrv = PDMIVMMDEVCONNECTOR_2_MAINVMMDEV(pInterface); 368 ULONG val = 0; 369 370 if (!pulInterval) 371 return VERR_INVALID_POINTER; 372 373 /* store that information in IGuest */ 374 Guest* guest = pDrv->pVMMDev->getParent()->getGuest(); 375 Assert(guest); 376 if (!guest) 377 return VERR_INVALID_PARAMETER; /** @todo wrong error */ 378 379 guest->COMGETTER(StatisticsUpdateInterval)(&val); 380 *pulInterval = val; 381 return VINF_SUCCESS; 382 } 383 384 /** 385 * Report new guest statistics 386 * 387 * @returns VBox status code. 388 * @param pInterface Pointer to this interface. 389 * @param pGuestStats Guest statistics 390 * @thread The emulation thread. 391 */ 392 DECLCALLBACK(int) vmmdevReportStatistics(PPDMIVMMDEVCONNECTOR pInterface, VBoxGuestStatistics *pGuestStats) 393 { 394 PDRVMAINVMMDEV pDrv = PDMIVMMDEVCONNECTOR_2_MAINVMMDEV(pInterface); 395 396 Assert(pGuestStats); 397 if (!pGuestStats) 398 return VERR_INVALID_POINTER; 399 400 /* store that information in IGuest */ 401 Guest* guest = pDrv->pVMMDev->getParent()->getGuest(); 402 Assert(guest); 403 if (!guest) 404 return VERR_INVALID_PARAMETER; /** @todo wrong error */ 405 406 if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_CPU_LOAD) 407 guest->SetStatistic(GuestStatisticType_CPULoad, pGuestStats->u32CpuLoad); 408 409 if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_THREADS) 410 guest->SetStatistic(GuestStatisticType_Threads, pGuestStats->u32Threads); 411 412 if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_PROCESSES) 413 guest->SetStatistic(GuestStatisticType_Processes, pGuestStats->u32Processes); 414 415 if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_PHYS_MEM_TOTAL) 416 guest->SetStatistic(GuestStatisticType_PhysMemTotal, pGuestStats->u32PhysMemTotal); 417 418 if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_PHYS_MEM_AVAIL) 419 guest->SetStatistic(GuestStatisticType_PhysMemAvailable, pGuestStats->u32PhysMemAvail); 420 421 if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_PHYS_MEM_BALLOON) 422 guest->SetStatistic(GuestStatisticType_PhysMemBalloon, pGuestStats->u32PhysMemBalloon); 423 424 if (pGuestStats->u32StatCaps & VBOX_GUEST_STAT_PAGE_FILE_SIZE) 425 guest->SetStatistic(GuestStatisticType_PageFileSize, pGuestStats->u32PageFileSize); 353 426 354 427 return VINF_SUCCESS; … … 543 616 pData->Connector.pfnSetVisibleRegion = vmmdevSetVisibleRegion; 544 617 pData->Connector.pfnQueryVisibleRegion = vmmdevQueryVisibleRegion; 618 pData->Connector.pfnReportStatistics = vmmdevReportStatistics; 619 pData->Connector.pfnQueryStatisticsInterval = vmmdevQueryStatisticsInterval; 545 620 546 621 #ifdef VBOX_HGCM -
trunk/src/VBox/Main/idl/VirtualBox.xidl
r4324 r4492 409 409 <enum 410 410 name="GuestStatisticType" 411 uuid=" da89a1b7-e602-45ac-84b7-29c9d12b92d5"411 uuid="a7cffd08-665f-4156-b2e9-2b3c64e213da" 412 412 > 413 413 <const name="CPULoad" value="0"> … … 436 436 </desc> 437 437 </const> 438 <const name="PageFileSize" value="5"> 438 <const name="PhysMemBalloon" value="5"> 439 <desc> 440 Ballooned physical memory in megabytes. 441 </desc> 442 </const> 443 <const name="PageFileSize" value="6"> 439 444 <desc> 440 445 Pagefile size in megabytes. … … 2016 2021 <interface 2017 2022 name="IMachine" extends="$unknown" 2018 uuid=" 31f7169f-14da-4c55-8cb6-a3665186e35e"2023 uuid="dcfb87c4-18a9-4a1e-9b1f-6f68f920535b" 2019 2024 wsmap="managed" 2020 2025 > … … 2163 2168 2164 2169 <attribute name="memorySize" type="unsigned long"> 2165 <desc>Sytem memory size in megabytes.</desc> 2170 <desc>System memory size in megabytes.</desc> 2171 </attribute> 2172 2173 <attribute name="memoryBalloonSize" type="unsigned long"> 2174 <desc>Initial memory balloon size in megabytes.</desc> 2166 2175 </attribute> 2167 2176 -
trunk/src/VBox/Main/include/MachineImpl.h
r4071 r4492 221 221 222 222 ULONG mMemorySize; 223 ULONG mMemoryBalloonSize; 223 224 ULONG mVRAMSize; 224 225 ULONG mMonitorCount; … … 441 442 STDMETHOD(COMGETTER(MemorySize))(ULONG *memorySize); 442 443 STDMETHOD(COMSETTER(MemorySize))(ULONG memorySize); 444 STDMETHOD(COMGETTER(MemoryBalloonSize))(ULONG *memoryBalloonSize); 445 STDMETHOD(COMSETTER(MemoryBalloonSize))(ULONG memoryBalloonSize); 443 446 STDMETHOD(COMGETTER(VRAMSize))(ULONG *memorySize); 444 447 STDMETHOD(COMSETTER(VRAMSize))(ULONG memorySize); -
trunk/src/VBox/Main/xml/VirtualBox-settings-common.xsd
r4339 r4492 383 383 </xsd:complexType> 384 384 385 <xsd:complexType name="TGuest"> 386 <xsd:element name="MemoryBalloonSize" type="xsd:unsignedInt" default="0"/> 387 </xsd:complexType> 388 385 389 <xsd:complexType name="TBoot"> 386 390 <xsd:sequence>
Note:
See TracChangeset
for help on using the changeset viewer.