From 8094cd5af9beca63cafb697ea1e5818a428dd3c1 Mon Sep 17 00:00:00 2001 From: wu guoxing Date: Tue, 27 Dec 2011 13:43:55 +0800 Subject: [PATCH] ENGR00170946:gpu:fix gpu kernel module can not be removed issue fix gpu kernel module can not be removed issue Signed-off-by: Wu Guoxing Acked-by: Lily Zhang --- .../hal/kernel/gc_hal_kernel_hardware_vg.c | 25 ++++++++----------- .../hal/kernel/gc_hal_kernel_hardware_vg.h | 2 +- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c index a9aec1484508..296b333cd763 100644 --- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c +++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.c @@ -139,21 +139,16 @@ _TimeIdleThread( /* Cast the object. */ gckVGHARDWARE hardware = (gckVGHARDWARE) ThreadParameter; - gcmkVERIFY_OK(gckOS_AcquireSemaphore( - hardware->os, - hardware->idleSemaphore)); - while(gcvTRUE) { + gcmkVERIFY_OK(gckOS_WaitSignal(hardware->os, + hardware->idleSignal, gcvINFINITE)); + if (hardware->killThread) { break; } - gcmkVERIFY_OK(gckOS_AcquireSemaphore( - hardware->os, - hardware->idleSemaphore)); - do { gcmkVERIFY_OK(gckOS_GetTicks(¤tTime)); @@ -245,7 +240,7 @@ gckVGHARDWARE_Construct( hardware->chipMinorFeatures2 = chipMinorFeatures2; hardware->powerMutex = gcvNULL; - hardware->idleSemaphore = gcvNULL; + hardware->idleSignal = gcvNULL; hardware->chipPowerState = gcvPOWER_OFF; hardware->chipPowerStateGlobal = gcvPOWER_ON; hardware->clockState = gcvTRUE; @@ -270,8 +265,7 @@ gckVGHARDWARE_Construct( gcmkVERIFY_OK(gckVGHARDWARE_SetFastClear(hardware, -1)); gcmkERR_BREAK(gckOS_CreateMutex(Os, &hardware->powerMutex)); - - gcmkERR_BREAK(gckOS_CreateSemaphore(Os, &hardware->idleSemaphore)); + gcmkERR_BREAK(gckOS_CreateSignal(Os, gcvTRUE, &hardware->idleSignal)); #if gcdPOWER_MANAGEMENT gcmkERR_BREAK(gckOS_StartThread( hardware->os, @@ -326,6 +320,7 @@ gckVGHARDWARE_Destroy( #if gcdPOWER_MANAGEMENT Hardware->killThread = gcvTRUE; + gcmkVERIFY_OK(gckOS_Signal(Hardware->os, Hardware->idleSignal, gcvTRUE)); gcmkVERIFY_OK(gckOS_StopThread(Hardware->os, Hardware->timeIdleThread)); #endif /* Mark the object as unknown. */ @@ -337,10 +332,10 @@ gckVGHARDWARE_Destroy( Hardware->os, Hardware->powerMutex)); } - if (Hardware->idleSemaphore != gcvNULL) + if (Hardware->idleSignal != gcvNULL) { - gcmkVERIFY_OK(gckOS_DestroySemaphore( - Hardware->os, Hardware->idleSemaphore)); + gcmkVERIFY_OK(gckOS_DestroySignal( + Hardware->os, Hardware->idleSignal)); } /* Free the object. */ @@ -1790,7 +1785,7 @@ gckVGHARDWARE_SetPowerManagementState( if (State == gcvPOWER_IDLE) { - gcmkONERROR(gckOS_ReleaseSemaphore(os, Hardware->idleSemaphore)); + gcmkVERIFY_OK(gckOS_Signal(os, Hardware->idleSignal, gcvTRUE)); } /* Reset power off time */ gcmkVERIFY_OK(gckOS_GetTicks(¤tTime)); diff --git a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h index a4ec3eb05afc..cff634f8bbec 100644 --- a/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h +++ b/drivers/mxc/gpu-viv/arch/GC350/hal/kernel/gc_hal_kernel_hardware_vg.h @@ -57,7 +57,7 @@ struct _gckVGHARDWARE gctBOOL clockState; gctBOOL powerState; gctPOINTER powerMutex; - gctSEMAPHORE idleSemaphore; + gctSIGNAL idleSignal; gctUINT32 powerProcess; gctUINT32 powerThread; gceCHIPPOWERSTATE chipPowerState; -- 2.39.5