diff options
Diffstat (limited to 'drivers/gpu/pvr/resman.c')
-rw-r--r-- | drivers/gpu/pvr/resman.c | 23 |
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 | ||
125 | static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, IMG_BOOL bExecuteCallback); | 125 | static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, IMG_BOOL bExecuteCallback, IMG_BOOL bForceCleanup); |
126 | 126 | ||
127 | static PVRSRV_ERROR FreeResourceByCriteria(PRESMAN_CONTEXT psContext, | 127 | static 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 | ||
382 | PVRSRV_ERROR ResManFreeResByPtr(RESMAN_ITEM *psResItem) | 382 | PVRSRV_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 | ||
556 | static PVRSRV_ERROR FreeResourceByPtr(RESMAN_ITEM *psItem, | 556 | static 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; |