Changeset 28422 in vbox
- Timestamp:
- Apr 16, 2010 3:47:03 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 60188
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/gmm.h
r28036 r28422 34 34 #include <VBox/gvmm.h> 35 35 #include <VBox/sup.h> 36 #include <VBox/VMMDev.h> /* for VMMDEVSHAREDREGIONDESC */ 36 37 37 38 RT_C_DECLS_BEGIN … … 297 298 GMMR0DECL(int) GMMR0MapUnmapChunk(PVM pVM, VMCPUID idCpu, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3); 298 299 GMMR0DECL(int) GMMR0SeedChunk(PVM pVM, VMCPUID idCpu, RTR3PTR pvR3); 300 GMMR0DECL(int) GMMR0RegisterSharedModule(PVM pVM, VMCPUID idCpu, char *pszModuleName, char *pszVersion, RTGCPTR GCBaseAddr, uint32_t cbModule, unsigned cRegions, VMMDEVSHAREDREGIONDESC *pRegions); 301 GMMR0DECL(int) GMMR0UnregisterSharedModule(PVM pVM, VMCPUID idCpu, char *pszModuleName, char *pszVersion, RTGCPTR GCBaseAddr, uint32_t cbModule); 302 GMMR0DECL(int) GMMR0CheckSharedModules(PVM pVM, VMCPUID idCpu); 299 303 300 304 … … 454 458 455 459 GMMR0DECL(int) GMMR0FreeLargePageReq(PVM pVM, VMCPUID idCpu, PGMMFREELARGEPAGEREQ pReq); 460 461 /** 462 * Request buffer for GMMR0RegisterSharedModuleReq / VMMR0_DO_GMM_REGISTER_SHARED_MODULE. 463 * @see GMMR0RegisterSharedModule. 464 */ 465 typedef struct GMMREGISTERSHAREDMODULEREQ 466 { 467 /** The header. */ 468 SUPVMMR0REQHDR Hdr; 469 /** Shared module size. */ 470 uint32_t cbModule; 471 /** Number of included region descriptors */ 472 uint32_t cRegions; 473 /** Base address of the shared module. */ 474 RTGCPTR64 GCBaseAddr; 475 /** Module name */ 476 char szName[128]; 477 /** Module version */ 478 char szVersion[16]; 479 /** Shared region descriptor(s). */ 480 VMMDEVSHAREDREGIONDESC aRegions[1]; 481 } GMMREGISTERSHAREDMODULEREQ; 482 /** Pointer to a GMMR0RegisterSharedModuleReq / VMMR0_DO_GMM_REGISTER_SHARED_MODULE request buffer. */ 483 typedef GMMREGISTERSHAREDMODULEREQ *PGMMREGISTERSHAREDMODULEREQ; 484 485 GMMR0DECL(int) GMMR0RegisterSharedModuleReq(PVM pVM, VMCPUID idCpu, PGMMREGISTERSHAREDMODULEREQ pReq); 486 487 488 /** 489 * Request buffer for GMMR0UnregisterSharedModuleReq / VMMR0_DO_GMM_UNREGISTER_SHARED_MODULE. 490 * @see GMMR0UnregisterSharedModule. 491 */ 492 typedef struct GMMUNREGISTERSHAREDMODULEREQ 493 { 494 /** The header. */ 495 SUPVMMR0REQHDR Hdr; 496 /** Shared module size. */ 497 uint32_t cbModule; 498 /** Align at 8 byte boundary. */ 499 uint32_t u32Alignment; 500 /** Base address of the shared module. */ 501 RTGCPTR64 GCBaseAddr; 502 /** Module name */ 503 char szName[128]; 504 /** Module version */ 505 char szVersion[16]; 506 } GMMUNREGISTERSHAREDMODULEREQ; 507 /** Pointer to a GMMR0UnregisterSharedModuleReq / VMMR0_DO_GMM_UNREGISTER_SHARED_MODULE request buffer. */ 508 typedef GMMUNREGISTERSHAREDMODULEREQ *PGMMUNREGISTERSHAREDMODULEREQ; 509 510 GMMR0DECL(int) GMMR0UnregisterSharedModuleReq(PVM pVM, VMCPUID idCpu, PGMMUNREGISTERSHAREDMODULEREQ pReq); 456 511 457 512 … … 478 533 GMMR3DECL(int) GMMR3BalloonedPages(PVM pVM, GMMBALLOONACTION enmAction, uint32_t cBalloonedPages); 479 534 GMMR3DECL(int) GMMR3QueryVMMMemoryStats(PVM pVM, uint64_t *pcTotalAllocPages, uint64_t *pcTotalFreePages, uint64_t *pcTotalBalloonPages); 535 GMMR3DECL(int) GMMR3RegisterSharedModule(PVM pVM, char *pszModuleName, char *pszVersion, RTGCPTR GCBaseAddr, uint32_t cbModule, 536 unsigned cRegions, VMMDEVSHAREDREGIONDESC *pRegions); 537 GMMR3DECL(int) GMMR3UnregisterSharedModule(PVM pVM, char *pszModuleName, char *pszVersion, RTGCPTR GCBaseAddr, uint32_t cbModule); 538 GMMR3DECL(int) GMMR3CheckSharedModules(PVM pVM); 480 539 /** @} */ 481 540 #endif /* IN_RING3 */ -
trunk/include/VBox/vmm.h
r28036 r28422 308 308 /** Call GMMR0SeedChunk(). */ 309 309 VMMR0_DO_GMM_SEED_CHUNK, 310 /** Call GMMR0RegisterSharedModule. */ 311 VMMR0_DO_GMM_REGISTER_SHARED_MODULE, 312 /** Call GMMR0UnregisterSharedModule. */ 313 VMMR0_DO_GMM_UNREGISTER_SHARED_MODULE, 314 /** Call GMMR0CheckSharedModules. */ 315 VMMR0_DO_GMM_CHECK_SHARED_MODULES, 310 316 311 317 /** Set a GVMM or GMM configuration value. */ -
trunk/src/VBox/VMM/GMM.cpp
r28039 r28422 35 35 #include <VBox/log.h> 36 36 #include <iprt/mem.h> 37 #include <iprt/string.h> 37 38 38 39 … … 354 355 } 355 356 357 358 /** 359 * @see GMMR0RegisterSharedModule 360 */ 361 GMMR3DECL(int) GMMR3RegisterSharedModule(PVM pVM, char *pszModuleName, char *pszVersion, RTGCPTR GCBaseAddr, uint32_t cbModule, 362 unsigned cRegions, VMMDEVSHAREDREGIONDESC *pRegions) 363 { 364 PGMMREGISTERSHAREDMODULEREQ pReq; 365 int rc; 366 367 /* Sanity check. */ 368 AssertReturn(cRegions < VMMDEVSHAREDREGIONDESC_MAX, VERR_INVALID_PARAMETER); 369 370 pReq = (PGMMREGISTERSHAREDMODULEREQ)RTMemAllocZ(RT_OFFSETOF(GMMREGISTERSHAREDMODULEREQ, aRegions[cRegions])); 371 AssertReturn(pReq, VERR_NO_MEMORY); 372 373 pReq->Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 374 pReq->Hdr.cbReq = sizeof(*pReq); 375 pReq->GCBaseAddr = GCBaseAddr; 376 pReq->cbModule = cbModule; 377 pReq->cRegions = cRegions; 378 for (unsigned i = 0; i < cRegions; i++) 379 pReq->aRegions[i] = pRegions[i]; 380 381 if ( RTStrCopy(pReq->szName, sizeof(pReq->szName), pszModuleName) != VINF_SUCCESS 382 || RTStrCopy(pReq->szVersion, sizeof(pReq->szVersion), pszVersion) != VINF_SUCCESS) 383 { 384 rc = VERR_BUFFER_OVERFLOW; 385 goto end; 386 } 387 388 rc = VMMR3CallR0(pVM, VMMR0_DO_GMM_REGISTER_SHARED_MODULE, 0, &pReq->Hdr); 389 end: 390 RTMemFree(pReq); 391 return rc; 392 } 393 394 /** 395 * @see GMMR0RegisterSharedModule 396 */ 397 GMMR3DECL(int) GMMR3UnregisterSharedModule(PVM pVM, char *pszModuleName, char *pszVersion, RTGCPTR GCBaseAddr, uint32_t cbModule) 398 { 399 GMMUNREGISTERSHAREDMODULEREQ Req; 400 Req.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 401 Req.Hdr.cbReq = sizeof(Req); 402 403 Req.GCBaseAddr = GCBaseAddr; 404 Req.cbModule = cbModule; 405 406 if ( RTStrCopy(Req.szName, sizeof(Req.szName), pszModuleName) != VINF_SUCCESS 407 || RTStrCopy(Req.szVersion, sizeof(Req.szVersion), pszVersion) != VINF_SUCCESS) 408 { 409 return VERR_BUFFER_OVERFLOW; 410 } 411 412 return VMMR3CallR0(pVM, VMMR0_DO_GMM_UNREGISTER_SHARED_MODULE, 0, &Req.Hdr); 413 } 414 415 /** 416 * @see GMMR0CheckSharedModules 417 */ 418 GMMR3DECL(int) GMMR3CheckSharedModules(PVM pVM) 419 { 420 return VMMR3CallR0(pVM, VMMR0_DO_GMM_CHECK_SHARED_MODULES, 0, NULL); 421 } -
trunk/src/VBox/VMM/PGMSharedPage.cpp
r28421 r28422 52 52 unsigned cRegions, VMMDEVSHAREDREGIONDESC *pRegions) 53 53 { 54 return VERR_NOT_IMPLEMENTED;54 return GMMR3RegisterSharedModule(pVM, pszModuleName, pszVersion, GCBaseAddr, cbModule, cRegions, pRegions); 55 55 } 56 56 … … 68 68 VMMR3DECL(int) PGMR3SharedModuleUnregister(PVM pVM, char *pszModuleName, char *pszVersion, RTGCPTR GCBaseAddr, uint32_t cbModule) 69 69 { 70 return VERR_NOT_IMPLEMENTED;70 return GMMR3UnregisterSharedModule(pVM, pszModuleName, pszVersion, GCBaseAddr, cbModule); 71 71 } 72 72 … … 80 80 VMMR3DECL(int) PGMR3SharedModuleCheck(PVM pVM) 81 81 { 82 return VERR_NOT_IMPLEMENTED;82 return GMMR3CheckSharedModules(pVM); 83 83 } -
trunk/src/VBox/VMM/VMMR0/GMMR0.cpp
r28043 r28422 3314 3314 } 3315 3315 3316 3317 /** 3318 * Registers a new shared module for the VM 3319 * 3320 * @returns VBox status code. 3321 * @param pVM VM handle 3322 * @param idCpu VCPU id 3323 * @param pszModuleName Module name 3324 * @param pszVersion Module version 3325 * @param GCBaseAddr Module base address 3326 * @param cbModule Module size 3327 * @param cRegions Number of shared region descriptors 3328 * @param pRegions Shared region(s) 3329 */ 3330 GMMR0DECL(int) GMMR0RegisterSharedModule(PVM pVM, VMCPUID idCpu, char *pszModuleName, char *pszVersion, RTGCPTR GCBaseAddr, uint32_t cbModule, 3331 unsigned cRegions, VMMDEVSHAREDREGIONDESC *pRegions) 3332 { 3333 return VERR_NOT_IMPLEMENTED; 3334 } 3335 3336 3337 /** 3338 * VMMR0 request wrapper for GMMR0RegisterSharedModule. 3339 * 3340 * @returns see GMMR0RegisterSharedModule. 3341 * @param pVM Pointer to the shared VM structure. 3342 * @param idCpu VCPU id 3343 * @param pReq The request packet. 3344 */ 3345 GMMR0DECL(int) GMMR0RegisterSharedModuleReq(PVM pVM, VMCPUID idCpu, PGMMREGISTERSHAREDMODULEREQ pReq) 3346 { 3347 /* 3348 * Validate input and pass it on. 3349 */ 3350 AssertPtrReturn(pVM, VERR_INVALID_POINTER); 3351 AssertPtrReturn(pReq, VERR_INVALID_POINTER); 3352 AssertMsgReturn(pReq->Hdr.cbReq >= sizeof(*pReq) && pReq->Hdr.cbReq == RT_OFFSETOF(GMMREGISTERSHAREDMODULEREQ, aRegions[pReq->cRegions]), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER); 3353 3354 return GMMR0RegisterSharedModule(pVM, idCpu, pReq->szName, pReq->szVersion, pReq->GCBaseAddr, pReq->cbModule, pReq->cRegions, pReq->aRegions); 3355 } 3356 3357 /** 3358 * Unregisters a shared module for the VM 3359 * 3360 * @returns VBox status code. 3361 * @param pVM VM handle 3362 * @param idCpu VCPU id 3363 * @param pszModuleName Module name 3364 * @param pszVersion Module version 3365 * @param GCBaseAddr Module base address 3366 * @param cbModule Module size 3367 */ 3368 GMMR0DECL(int) GMMR0UnregisterSharedModule(PVM pVM, VMCPUID idCpu, char *pszModuleName, char *pszVersion, RTGCPTR GCBaseAddr, uint32_t cbModule) 3369 { 3370 return VERR_NOT_IMPLEMENTED; 3371 } 3372 3373 /** 3374 * VMMR0 request wrapper for GMMR0UnregisterSharedModule. 3375 * 3376 * @returns see GMMR0UnregisterSharedModule. 3377 * @param pVM Pointer to the shared VM structure. 3378 * @param idCpu VCPU id 3379 * @param pReq The request packet. 3380 */ 3381 GMMR0DECL(int) GMMR0UnregisterSharedModuleReq(PVM pVM, VMCPUID idCpu, PGMMUNREGISTERSHAREDMODULEREQ pReq) 3382 { 3383 /* 3384 * Validate input and pass it on. 3385 */ 3386 AssertPtrReturn(pVM, VERR_INVALID_POINTER); 3387 AssertPtrReturn(pReq, VERR_INVALID_POINTER); 3388 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(*pReq), ("%#x != %#x\n", pReq->Hdr.cbReq, sizeof(*pReq)), VERR_INVALID_PARAMETER); 3389 3390 return GMMR0UnregisterSharedModule(pVM, idCpu, pReq->szName, pReq->szVersion, pReq->GCBaseAddr, pReq->cbModule); 3391 } 3392 3393 3394 /** 3395 * Checks regsitered modules for shared pages 3396 * 3397 * @returns VBox status code. 3398 * @param pVM VM handle 3399 * @param idCpu VCPU id 3400 */ 3401 GMMR0DECL(int) GMMR0CheckSharedModules(PVM pVM, VMCPUID idCpu) 3402 { 3403 return VERR_NOT_IMPLEMENTED; 3404 } -
trunk/src/VBox/VMM/VMMR0/VMMR0.cpp
r28320 r28422 936 936 return GMMR0SeedChunk(pVM, idCpu, (RTR3PTR)u64Arg); 937 937 938 case VMMR0_DO_GMM_REGISTER_SHARED_MODULE: 939 if (u64Arg) 940 return VERR_INVALID_PARAMETER; 941 return GMMR0RegisterSharedModuleReq(pVM, idCpu, (PGMMREGISTERSHAREDMODULEREQ)pReqHdr); 942 943 case VMMR0_DO_GMM_UNREGISTER_SHARED_MODULE: 944 if (u64Arg) 945 return VERR_INVALID_PARAMETER; 946 return GMMR0UnregisterSharedModuleReq(pVM, idCpu, (PGMMUNREGISTERSHAREDMODULEREQ)pReqHdr); 947 948 case VMMR0_DO_GMM_CHECK_SHARED_MODULES: 949 if ( u64Arg 950 || pReqHdr) 951 return VERR_INVALID_PARAMETER; 952 return GMMR0CheckSharedModules(pVM, idCpu); 953 938 954 /* 939 955 * A quick GCFGM mock-up.
Note:
See TracChangeset
for help on using the changeset viewer.