Changeset 38982 in vbox for trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm
- Timestamp:
- Oct 12, 2011 8:20:21 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 74369
- Location:
- trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp
r38930 r38982 1473 1473 } 1474 1474 } 1475 1476 #if 0 1477 VOID vboxShRcTreeInit(PVBOXMP_DEVEXT pDevExt) 1478 { 1479 ExInitializeFastMutex(&pDevExt->ShRcTreeMutex); 1480 pDevExt->ShRcTree = NULL; 1481 } 1482 1483 VOID vboxShRcTreeTerm(PVBOXMP_DEVEXT pDevExt) 1484 { 1485 Assert(!pDevExt->ShRcTree); 1486 pDevExt->ShRcTree = NULL; 1487 } 1488 1489 BOOLEAN vboxShRcTreePut(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc) 1490 { 1491 HANDLE hSharedRc = pAlloc->hSharedHandle; 1492 if (!hSharedRc) 1493 { 1494 WARN(("invalid call with zero shared handle!")); 1495 return FALSE; 1496 } 1497 pAlloc->ShRcTreeEntry.Key = (AVLPVKEY)hSharedRc; 1498 ExAcquireFastMutex(&pDevExt->ShRcTreeMutex); 1499 bool bRc = RTAvlPVInsert(&pDevExt->ShRcTree, &pAlloc->ShRcTreeEntry); 1500 ExReleaseFastMutex(&pDevExt->ShRcTreeMutex); 1501 Assert(bRc); 1502 return (BOOLEAN)bRc; 1503 } 1504 1505 #define PVBOXWDDM_ALLOCATION_FROM_SHRCTREENODE(_p) ((PVBOXWDDM_ALLOCATION)(((uint8_t*)(_p)) - RT_OFFSETOF(VBOXWDDM_ALLOCATION, ShRcTreeEntry))) 1506 PVBOXWDDM_ALLOCATION vboxShRcTreeGet(PVBOXMP_DEVEXT pDevExt, HANDLE hSharedRc) 1507 { 1508 ExAcquireFastMutex(&pDevExt->ShRcTreeMutex); 1509 PAVLPVNODECORE pNode = RTAvlPVGet(&pDevExt->ShRcTree, (AVLPVKEY)hSharedRc); 1510 ExReleaseFastMutex(&pDevExt->ShRcTreeMutex); 1511 if (!pNode) 1512 return NULL; 1513 PVBOXWDDM_ALLOCATION pAlloc = PVBOXWDDM_ALLOCATION_FROM_SHRCTREENODE(pNode); 1514 return pAlloc; 1515 } 1516 1517 BOOLEAN vboxShRcTreeRemove(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc) 1518 { 1519 HANDLE hSharedRc = pAlloc->hSharedHandle; 1520 if (!hSharedRc) 1521 { 1522 WARN(("invalid call with zero shared handle!")); 1523 return FALSE; 1524 } 1525 ExAcquireFastMutex(&pDevExt->ShRcTreeMutex); 1526 PAVLPVNODECORE pNode = RTAvlPVRemove(&pDevExt->ShRcTree, (AVLPVKEY)hSharedRc); 1527 ExReleaseFastMutex(&pDevExt->ShRcTreeMutex); 1528 if (!pNode) 1529 return NULL; 1530 PVBOXWDDM_ALLOCATION pRetAlloc = PVBOXWDDM_ALLOCATION_FROM_SHRCTREENODE(pNode); 1531 Assert(pRetAlloc == pAlloc); 1532 return !!pRetAlloc; 1533 } 1534 #endif -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.h
r37734 r38982 151 151 VOID vboxWddmCounterU32Wait(uint32_t volatile * pu32, uint32_t u32Val); 152 152 153 #if 0 154 /* wine shrc handle -> allocation map */ 155 VOID vboxShRcTreeInit(PVBOXMP_DEVEXT pDevExt); 156 VOID vboxShRcTreeTerm(PVBOXMP_DEVEXT pDevExt); 157 BOOLEAN vboxShRcTreePut(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc); 158 PVBOXWDDM_ALLOCATION vboxShRcTreeGet(PVBOXMP_DEVEXT pDevExt, HANDLE hSharedRc); 159 BOOLEAN vboxShRcTreeRemove(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_ALLOCATION pAlloc); 160 #endif 161 153 162 #endif /* #ifndef ___VBoxMPMisc_h__ */ -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPTypes.h
r37889 r38982 32 32 #include "VBoxMPVbva.h" 33 33 34 #if 0 35 #include <iprt/avl.h> 36 #endif 37 34 38 /* one page size */ 35 39 #define VBOXWDDM_C_DMA_BUFFER_SIZE 0x1000 … … 118 122 VBOXWDDM_ALLOC_TYPE enmType; 119 123 volatile uint32_t cRefs; 120 // VBOXWDDM_ALLOCUSAGE_TYPE enmCurrentUsage;121 124 D3DDDI_RESOURCEFLAGS fRcFlags; 122 125 UINT SegmentId; … … 128 131 BOOLEAN bVisible; 129 132 BOOLEAN bAssigned; 133 #ifdef DEBUG 134 /* current for shared rc handling assumes that once resource has no opens, it can not be openned agaion */ 135 BOOLEAN fAssumedDeletion; 136 #endif 130 137 VBOXWDDM_SURFACE_DESC SurfDesc; 131 138 struct VBOXWDDM_RESOURCE *pResource; … … 133 140 DXGK_ALLOCATIONUSAGEHINT UsageHint; 134 141 uint32_t iIndex; 142 uint32_t cOpens; 143 LIST_ENTRY OpenList; 144 /* helps tracking when to release wine shared resource */ 145 uint32_t cShRcRefs; 146 HANDLE hSharedHandle; 147 #if 0 148 AVLPVNODECORE ShRcTreeEntry; 149 #endif 135 150 VBOXUHGSMI_SYNCHOBJECT_TYPE enmSynchType; 136 151 union … … 143 158 typedef struct VBOXWDDM_RESOURCE 144 159 { 145 uint32_tfFlags;160 VBOXWDDMDISP_RESOURCE_FLAGS fFlags; 146 161 volatile uint32_t cRefs; 147 162 VBOXWDDM_RC_DESC RcDesc; … … 251 266 } VBOXWDDM_DMA_PRIVATEDATA_CHROMIUM_CMD, *PVBOXWDDM_DMA_PRIVATEDATA_CHROMIUM_CMD; 252 267 268 typedef struct VBOXWDDM_DMA_PRIVATEDATA_ALLOCINFO_ON_SUBMIT 269 { 270 VBOXWDDM_DMA_PRIVATEDATA_BASEHDR Base; 271 VBOXWDDM_DMA_ALLOCINFO aInfos[1]; 272 } VBOXWDDM_DMA_PRIVATEDATA_ALLOCINFO_ON_SUBMIT, *PVBOXWDDM_DMA_PRIVATEDATA_ALLOCINFO_ON_SUBMIT; 273 253 274 typedef struct VBOXWDDM_OPENALLOCATION 254 275 { 276 LIST_ENTRY ListEntry; 255 277 D3DKMT_HANDLE hAllocation; 278 PVBOXWDDM_ALLOCATION pAllocation; 279 PVBOXWDDM_DEVICE pDevice; 280 uint32_t cShRcRefs; 256 281 } VBOXWDDM_OPENALLOCATION, *PVBOXWDDM_OPENALLOCATION; 257 282 -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVdma.h
r38112 r38982 178 178 PVBOXWDDM_ALLOCATION pAlloc; 179 179 VBOXVIDEOOFFSET offAlloc; 180 UINT segmentIdAlloc; 180 UINT segmentIdAlloc : 31; 181 UINT fWriteOp : 1; 181 182 D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId; 182 183 } VBOXWDDM_DMA_ALLOCINFO, *PVBOXWDDM_DMA_ALLOCINFO; -
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp
r38660 r38982 51 51 } 52 52 53 DECLINLINE(PVBOXWDDM_ALLOCATION) vboxWddmGetAllocationFrom OpenData(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_OPENALLOCATION pOa)53 DECLINLINE(PVBOXWDDM_ALLOCATION) vboxWddmGetAllocationFromHandle(PVBOXMP_DEVEXT pDevExt, D3DKMT_HANDLE hAllocation) 54 54 { 55 55 DXGKARGCB_GETHANDLEDATA GhData; 56 GhData.hObject = pOa->hAllocation;56 GhData.hObject = hAllocation; 57 57 GhData.Type = DXGK_HANDLE_ALLOCATION; 58 58 GhData.Flags.Value = 0; … … 62 62 DECLINLINE(PVBOXWDDM_ALLOCATION) vboxWddmGetAllocationFromAllocList(PVBOXMP_DEVEXT pDevExt, DXGK_ALLOCATIONLIST *pAllocList) 63 63 { 64 return vboxWddmGetAllocationFromOpenData(pDevExt, (PVBOXWDDM_OPENALLOCATION)pAllocList->hDeviceSpecificAllocation); 64 PVBOXWDDM_OPENALLOCATION pOa = (PVBOXWDDM_OPENALLOCATION)pAllocList->hDeviceSpecificAllocation; 65 return pOa->pAllocation; 65 66 } 66 67 … … 955 956 VBoxMPCmnInitCustomVideoModes(pContext); 956 957 VBoxWddmInvalidateVideoModesInfo(pContext); 958 #if 0 959 vboxShRcTreeInit(pContext); 960 #endif 957 961 958 962 #ifdef VBOX_WITH_VIDEOHWACCEL … … 1010 1014 #ifdef VBOX_WITH_VIDEOHWACCEL 1011 1015 vboxVhwaFree(pDevExt); 1016 #endif 1017 #if 0 1018 vboxShRcTreeTerm(pDevExt); 1012 1019 #endif 1013 1020 … … 1794 1801 vboxWddmAssignPrimary(pDevExt, &pDevExt->aSources[pAllocation->SurfDesc.VidPnSourceId], NULL, pAllocation->SurfDesc.VidPnSourceId); 1795 1802 } 1803 1804 #if 0 1805 if (pAllocation->enmType == VBOXWDDM_ALLOC_TYPE_UMD_RC_GENERIC) 1806 { 1807 if (pAllocation->hSharedHandle) 1808 { 1809 vboxShRcTreeRemove(pDevExt, pAllocation); 1810 } 1811 } 1812 #endif 1796 1813 break; 1797 1814 } … … 1903 1920 pAllocation->bVisible = FALSE; 1904 1921 pAllocation->bAssigned = FALSE; 1922 InitializeListHead(&pAllocation->OpenList); 1905 1923 1906 1924 switch (pAllocInfo->enmType) … … 1957 1975 { 1958 1976 pAllocationInfo->Flags.CpuVisible = 1; 1977 } 1978 else 1979 { 1980 pAllocation->hSharedHandle = (HANDLE)pAllocInfo->hSharedHandle; 1981 #if 0 1982 if (pAllocation->hSharedHandle) 1983 { 1984 vboxShRcTreePut(pDevExt, pAllocation); 1985 } 1986 #endif 1959 1987 } 1960 1988 } … … 3212 3240 case DXGK_OPERATION_FILL: 3213 3241 { 3242 Assert(pBuildPagingBuffer->Fill.FillPattern == 0); 3243 PVBOXWDDM_ALLOCATION pAlloc = (PVBOXWDDM_ALLOCATION)pBuildPagingBuffer->Fill.hAllocation; 3214 3244 // pBuildPagingBuffer->pDmaBuffer = (uint8_t*)pBuildPagingBuffer->pDmaBuffer + VBOXVDMACMD_SIZE(VBOXVDMACMD_DMA_BPB_FILL); 3215 3245 break; … … 3556 3586 case VBOXESC_UHGSMI_SUBMIT: 3557 3587 { 3588 /* submit UHGSMI command */ 3558 3589 PVBOXWDDM_CONTEXT pContext = (PVBOXWDDM_CONTEXT)pEscape->hContext; 3559 3590 PVBOXDISPIFESCAPE_UHGSMI_SUBMIT pSubmit = (PVBOXDISPIFESCAPE_UHGSMI_SUBMIT)pEscapeHdr; … … 3574 3605 case VBOXESC_UHGSMI_ALLOCATE: 3575 3606 { 3607 /* allocate UHGSMI buffer */ 3576 3608 PVBOXWDDM_CONTEXT pContext = (PVBOXWDDM_CONTEXT)pEscape->hContext; 3577 3609 PVBOXDISPIFESCAPE_UHGSMI_ALLOCATE pAlocate = (PVBOXDISPIFESCAPE_UHGSMI_ALLOCATE)pEscapeHdr; … … 3589 3621 case VBOXESC_UHGSMI_DEALLOCATE: 3590 3622 { 3623 /* deallocate UHGSMI buffer */ 3591 3624 PVBOXWDDM_CONTEXT pContext = (PVBOXWDDM_CONTEXT)pEscape->hContext; 3592 3625 PVBOXDISPIFESCAPE_UHGSMI_DEALLOCATE pDealocate = (PVBOXDISPIFESCAPE_UHGSMI_DEALLOCATE)pEscapeHdr; … … 3604 3637 case VBOXESC_GETVBOXVIDEOCMCMD: 3605 3638 { 3639 /* get the list of r0->r3 commands (d3d window visible regions reporting )*/ 3606 3640 PVBOXWDDM_CONTEXT pContext = (PVBOXWDDM_CONTEXT)pEscape->hContext; 3607 3641 PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD pRegions = (PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD)pEscapeHdr; … … 3619 3653 case VBOXESC_SETVISIBLEREGION: 3620 3654 { 3655 /* visible regions for seamless */ 3621 3656 LPRGNDATA lpRgnData = VBOXDISPIFESCAPE_DATA(pEscapeHdr, RGNDATA); 3622 3657 uint32_t cbData = VBOXDISPIFESCAPE_DATA_SIZE(pEscape->PrivateDriverDataSize); … … 3682 3717 case VBOXESC_SCREENLAYOUT: 3683 3718 { 3719 /* set screen layout (unused currently) */ 3684 3720 Assert(pEscape->PrivateDriverDataSize >= sizeof (VBOXDISPIFESCAPE_SCREENLAYOUT)); 3685 3721 if (pEscape->PrivateDriverDataSize >= sizeof (VBOXDISPIFESCAPE_SCREENLAYOUT)) … … 3711 3747 case VBOXESC_SWAPCHAININFO: 3712 3748 { 3749 /* set swapchain information */ 3713 3750 PVBOXWDDM_CONTEXT pContext = (PVBOXWDDM_CONTEXT)pEscape->hContext; 3714 3751 Status = vboxWddmSwapchainCtxEscape(pDevExt, pContext, (PVBOXDISPIFESCAPE_SWAPCHAININFO)pEscapeHdr, pEscape->PrivateDriverDataSize); … … 3717 3754 } 3718 3755 case VBOXESC_REINITVIDEOMODES: 3756 { 3757 /* clear driver's internal videomodes cache */ 3719 3758 VBoxWddmInvalidateVideoModesInfo(pDevExt); 3720 3759 Status = STATUS_SUCCESS; 3721 3760 break; 3761 } 3762 case VBOXESC_SHRC_ADDREF: 3763 case VBOXESC_SHRC_RELEASE: 3764 { 3765 PVBOXWDDM_DEVICE pDevice = (PVBOXWDDM_DEVICE)pEscape->hDevice; 3766 /* query whether the allocation represanted by the given [wine-generated] shared resource handle still exists */ 3767 if (pEscape->PrivateDriverDataSize != sizeof (VBOXDISPIFESCAPE_SHRC_REF)) 3768 { 3769 WARN(("invalid buffer size for VBOXDISPIFESCAPE_SHRC_REF, was(%d), but expected (%d)", 3770 pEscape->PrivateDriverDataSize, sizeof (VBOXDISPIFESCAPE_SHRC_REF))); 3771 Status = STATUS_INVALID_PARAMETER; 3772 break; 3773 } 3774 3775 PVBOXDISPIFESCAPE_SHRC_REF pShRcRef = (PVBOXDISPIFESCAPE_SHRC_REF)pEscapeHdr; 3776 PVBOXWDDM_ALLOCATION pAlloc = vboxWddmGetAllocationFromHandle(pDevExt, (D3DKMT_HANDLE)pShRcRef->hAlloc); 3777 if (!pAlloc) 3778 { 3779 WARN(("failed to get allocation from handle")); 3780 Status = STATUS_INVALID_PARAMETER; 3781 break; 3782 } 3783 3784 PVBOXWDDM_OPENALLOCATION pOa = NULL; 3785 for (PLIST_ENTRY pCur = pAlloc->OpenList.Flink; pCur != &pAlloc->OpenList; pCur = pCur->Flink) 3786 { 3787 PVBOXWDDM_OPENALLOCATION pCurOa = CONTAINING_RECORD(pCur, VBOXWDDM_OPENALLOCATION, ListEntry); 3788 if (pCurOa->pDevice == pDevice) 3789 { 3790 pOa = pCurOa; 3791 break; 3792 } 3793 } 3794 3795 if (!pOa) 3796 { 3797 WARN(("failed to get open allocation from alloc")); 3798 Status = STATUS_INVALID_PARAMETER; 3799 break; 3800 } 3801 3802 Assert(pAlloc->cShRcRefs >= pOa->cShRcRefs); 3803 3804 if (pEscapeHdr->escapeCode == VBOXESC_SHRC_ADDREF) 3805 { 3806 #ifdef DEBUG 3807 Assert(!pAlloc->fAssumedDeletion); 3808 #endif 3809 ++pAlloc->cShRcRefs; 3810 ++pOa->cShRcRefs; 3811 } 3812 else 3813 { 3814 Assert(pAlloc->cShRcRefs); 3815 Assert(pOa->cShRcRefs); 3816 --pAlloc->cShRcRefs; 3817 --pOa->cShRcRefs; 3818 #ifdef DEBUG 3819 Assert(!pAlloc->fAssumedDeletion); 3820 if (!pAlloc->cShRcRefs) 3821 { 3822 pAlloc->fAssumedDeletion = TRUE; 3823 } 3824 #endif 3825 } 3826 3827 pShRcRef->EscapeHdr.u32CmdSpecific = pAlloc->cShRcRefs; 3828 Status = STATUS_SUCCESS; 3829 break; 3830 } 3722 3831 case VBOXESC_DBGPRINT: 3723 3832 { … … 4580 4689 if (Status == STATUS_SUCCESS) 4581 4690 { 4582 for (UINT i = 0; i < pOpenAllocation->NumAllocations; ++i) 4691 UINT i = 0; 4692 for (; i < pOpenAllocation->NumAllocations; ++i) 4583 4693 { 4584 4694 DXGK_OPENALLOCATIONINFO* pInfo = &pOpenAllocation->pOpenAllocation[i]; 4585 4695 Assert(pInfo->PrivateDriverDataSize == sizeof (VBOXWDDM_ALLOCINFO)); 4586 4696 Assert(pInfo->pPrivateDriverData); 4697 PVBOXWDDM_ALLOCATION pAllocation = vboxWddmGetAllocationFromHandle(pDevExt, pInfo->hAllocation); 4698 if (!pAllocation) 4699 { 4700 WARN(("invalid handle")); 4701 Status = STATUS_INVALID_PARAMETER; 4702 break; 4703 } 4704 4587 4705 PVBOXWDDM_OPENALLOCATION pOa = (PVBOXWDDM_OPENALLOCATION)vboxWddmMemAllocZero(sizeof (VBOXWDDM_OPENALLOCATION)); 4706 if (!pOa) 4707 { 4708 WARN(("failed to allocation alloc info")); 4709 Status = STATUS_INSUFFICIENT_RESOURCES; 4710 break; 4711 } 4712 4713 #ifdef DEBUG 4714 for (PLIST_ENTRY pCur = pAllocation->OpenList.Flink; pCur != &pAllocation->OpenList; pCur = pCur->Flink) 4715 { 4716 PVBOXWDDM_OPENALLOCATION pCurOa = CONTAINING_RECORD(pCur, VBOXWDDM_OPENALLOCATION, ListEntry); 4717 if (pCurOa->pDevice == pDevice) 4718 { 4719 /* should not happen */ 4720 Assert(0); 4721 break; 4722 } 4723 } 4724 Assert(!pAllocation->fAssumedDeletion); 4725 #endif 4726 InsertHeadList(&pAllocation->OpenList, &pOa->ListEntry); 4588 4727 pOa->hAllocation = pInfo->hAllocation; 4728 pOa->pAllocation = pAllocation; 4729 pOa->pDevice = pDevice; 4589 4730 pInfo->hDeviceSpecificAllocation = pOa; 4590 4731 4732 4591 4733 if (pRcInfo) 4592 4734 { 4735 Assert(pAllocation->enmType == VBOXWDDM_ALLOC_TYPE_UMD_RC_GENERIC); 4736 4737 if (pInfo->PrivateDriverDataSize < sizeof (VBOXWDDM_ALLOCINFO) 4738 || !pInfo->pPrivateDriverData) 4739 { 4740 WARN(("invalid data size")); 4741 vboxWddmMemFree(pOa); 4742 Status = STATUS_INVALID_PARAMETER; 4743 break; 4744 } 4745 PVBOXWDDM_ALLOCINFO pAllocInfo = (PVBOXWDDM_ALLOCINFO)pInfo->pPrivateDriverData; 4746 4593 4747 #ifdef VBOX_WITH_VIDEOHWACCEL 4594 4748 if (pRcInfo->RcDesc.fFlags.Overlay) 4595 4749 { 4596 if (pInfo->PrivateDriverDataSize >= sizeof (VBOXWDDM_ALLOCINFO)) 4597 { 4598 PVBOXWDDM_ALLOCINFO pAllocInfo = (PVBOXWDDM_ALLOCINFO)pInfo->pPrivateDriverData; 4599 PVBOXWDDM_ALLOCATION pAllocation = vboxWddmGetAllocationFromOpenData(pDevExt, pOa); 4600 Assert(pAllocation); 4601 if (pAllocation) 4602 { 4603 /* we have queried host for some surface info, like pitch & size, 4604 * need to return it back to the UMD (User Mode Drive) */ 4605 pAllocInfo->SurfDesc = pAllocation->SurfDesc; 4606 /* success, just continue */ 4607 continue; 4608 } 4609 else 4610 Status = STATUS_INVALID_PARAMETER; 4611 } 4612 else 4613 Status = STATUS_INVALID_PARAMETER; 4614 4615 /* we are here in case of error */ 4616 AssertBreakpoint(); 4617 4618 for (UINT j = 0; j < i; ++j) 4619 { 4620 DXGK_OPENALLOCATIONINFO* pInfo2Free = &pOpenAllocation->pOpenAllocation[j]; 4621 PVBOXWDDM_OPENALLOCATION pOa2Free = (PVBOXWDDM_OPENALLOCATION)pInfo2Free->hDeviceSpecificAllocation; 4622 vboxWddmMemFree(pOa2Free); 4623 } 4750 /* we have queried host for some surface info, like pitch & size, 4751 * need to return it back to the UMD (User Mode Drive) */ 4752 pAllocInfo->SurfDesc = pAllocation->SurfDesc; 4753 /* success, just continue */ 4624 4754 } 4625 4755 #endif 4756 } 4757 4758 ++pAllocation->cOpens; 4759 } 4760 4761 if (Status != STATUS_SUCCESS) 4762 { 4763 for (UINT j = 0; j < i; ++j) 4764 { 4765 DXGK_OPENALLOCATIONINFO* pInfo2Free = &pOpenAllocation->pOpenAllocation[j]; 4766 PVBOXWDDM_OPENALLOCATION pOa2Free = (PVBOXWDDM_OPENALLOCATION)pInfo2Free->hDeviceSpecificAllocation; 4767 PVBOXWDDM_ALLOCATION pAllocation = pOa2Free->pAllocation; 4768 RemoveEntryList(&pOa2Free->ListEntry); 4769 Assert(pAllocation->cOpens); 4770 --pAllocation->cOpens; 4771 vboxWddmMemFree(pOa2Free); 4626 4772 } 4627 4773 } … … 4645 4791 vboxVDbgBreakFv(); 4646 4792 4793 PVBOXWDDM_DEVICE pDevice = (PVBOXWDDM_DEVICE)hDevice; 4794 PVBOXMP_DEVEXT pDevExt = pDevice->pAdapter; 4795 4647 4796 for (UINT i = 0; i < pCloseAllocation->NumAllocations; ++i) 4648 4797 { 4649 vboxWddmMemFree(pCloseAllocation->pOpenHandleList[i]); 4798 PVBOXWDDM_OPENALLOCATION pOa2Free = (PVBOXWDDM_OPENALLOCATION)pCloseAllocation->pOpenHandleList[i]; 4799 PVBOXWDDM_ALLOCATION pAllocation = pOa2Free->pAllocation; 4800 RemoveEntryList(&pOa2Free->ListEntry); 4801 Assert(pAllocation->cShRcRefs >= pOa2Free->cShRcRefs); 4802 pAllocation->cShRcRefs -= pOa2Free->cShRcRefs; 4803 Assert(pAllocation->cOpens); 4804 --pAllocation->cOpens; 4805 vboxWddmMemFree(pOa2Free); 4650 4806 } 4651 4807
Note:
See TracChangeset
for help on using the changeset viewer.