aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/pvr/resman.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/pvr/resman.c')
-rw-r--r--drivers/gpu/pvr/resman.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/drivers/gpu/pvr/resman.c b/drivers/gpu/pvr/resman.c
index 5230952be84..b3a4534c809 100644
--- a/drivers/gpu/pvr/resman.c
+++ b/drivers/gpu/pvr/resman.c
@@ -122,7 +122,7 @@ static IMPLEMENT_LIST_INSERT(RESMAN_CONTEXT)
122 122
123#define PRINT_RESLIST(x, y, z) 123#define PRINT_RESLIST(x, y, z)
124 124
125static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, IMG_BOOL bExecuteCallback); 125static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, IMG_BOOL bExecuteCallback, IMG_BOOL bForceCleanup);
126 126
127static PVRSRV_ERROR FreeResourceByCriteria(PRESMAN_CONTEXT psContext, 127static PVRSRV_ERROR FreeResourceByCriteria(PRESMAN_CONTEXT psContext,
128 IMG_UINT32 ui32SearchCriteria, 128 IMG_UINT32 ui32SearchCriteria,
@@ -379,7 +379,7 @@ PRESMAN_ITEM ResManRegisterRes(PRESMAN_CONTEXT psResManContext,
379 return(psNewResItem); 379 return(psNewResItem);
380} 380}
381 381
382PVRSRV_ERROR ResManFreeResByPtr(RESMAN_ITEM *psResItem) 382PVRSRV_ERROR ResManFreeResByPtr(RESMAN_ITEM *psResItem, IMG_BOOL bForceCleanup)
383{ 383{
384 PVRSRV_ERROR eError; 384 PVRSRV_ERROR eError;
385 385
@@ -401,7 +401,7 @@ PVRSRV_ERROR ResManFreeResByPtr(RESMAN_ITEM *psResItem)
401 VALIDATERESLIST(); 401 VALIDATERESLIST();
402 402
403 403
404 eError = FreeResourceByPtr(psResItem, IMG_TRUE); 404 eError = FreeResourceByPtr(psResItem, IMG_TRUE, bForceCleanup);
405 405
406 406
407 VALIDATERESLIST(); 407 VALIDATERESLIST();
@@ -478,7 +478,7 @@ PVRSRV_ERROR ResManDissociateRes(RESMAN_ITEM *psResItem,
478 } 478 }
479 else 479 else
480 { 480 {
481 eError = FreeResourceByPtr(psResItem, IMG_FALSE); 481 eError = FreeResourceByPtr(psResItem, IMG_FALSE, CLEANUP_WITH_POLL);
482 if(eError != PVRSRV_OK) 482 if(eError != PVRSRV_OK)
483 { 483 {
484 PVR_DPF((PVR_DBG_ERROR, "ResManDissociateRes: failed to free resource by pointer")); 484 PVR_DPF((PVR_DBG_ERROR, "ResManDissociateRes: failed to free resource by pointer"));
@@ -554,9 +554,10 @@ IMG_INTERNAL PVRSRV_ERROR ResManFindResourceByPtr(PRESMAN_CONTEXT psResManContex
554} 554}
555 555
556static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, 556static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem,
557 IMG_BOOL bExecuteCallback) 557 IMG_BOOL bExecuteCallback,
558 IMG_BOOL bForceCleanup)
558{ 559{
559 PVRSRV_ERROR eError; 560 PVRSRV_ERROR eError = PVRSRV_OK;
560 561
561 PVR_ASSERT(psItem != IMG_NULL); 562 PVR_ASSERT(psItem != IMG_NULL);
562 563
@@ -591,7 +592,7 @@ static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem,
591 592
592 if (bExecuteCallback) 593 if (bExecuteCallback)
593 { 594 {
594 eError = psItem->pfnFreeResource(psItem->pvParam, psItem->ui32Param); 595 eError = psItem->pfnFreeResource(psItem->pvParam, psItem->ui32Param, bForceCleanup);
595 if (eError != PVRSRV_OK) 596 if (eError != PVRSRV_OK)
596 { 597 {
597 PVR_DPF((PVR_DBG_ERROR, "FreeResourceByPtr: ERROR calling FreeResource function")); 598 PVR_DPF((PVR_DBG_ERROR, "FreeResourceByPtr: ERROR calling FreeResource function"));
@@ -602,11 +603,7 @@ static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem,
602 ACQUIRE_SYNC_OBJ; 603 ACQUIRE_SYNC_OBJ;
603 604
604 605
605 eError = OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(RESMAN_ITEM), psItem, IMG_NULL); 606 OSFreeMem(PVRSRV_OS_PAGEABLE_HEAP, sizeof(RESMAN_ITEM), psItem, IMG_NULL);
606 if (eError != PVRSRV_OK)
607 {
608 PVR_DPF((PVR_DBG_ERROR, "FreeResourceByPtr: ERROR freeing resource list item memory"));
609 }
610 607
611 return(eError); 608 return(eError);
612} 609}
@@ -667,7 +664,7 @@ static PVRSRV_ERROR FreeResourceByCriteria(PRESMAN_CONTEXT psResManContext,
667 ui32Param)) != IMG_NULL 664 ui32Param)) != IMG_NULL
668 && eError == PVRSRV_OK) 665 && eError == PVRSRV_OK)
669 { 666 {
670 eError = FreeResourceByPtr(psCurItem, bExecuteCallback); 667 eError = FreeResourceByPtr(psCurItem, bExecuteCallback, CLEANUP_WITH_POLL);
671 } 668 }
672 669
673 return eError; 670 return eError;