diff options
author | wu guoxing <b39297@freescale.com> | 2012-01-13 09:57:41 +0800 |
---|---|---|
committer | Jason Liu <r64343@freescale.com> | 2012-01-19 12:41:30 +0800 |
commit | 05eeb057738e4e1d52115dd9254a085e80759d96 (patch) | |
tree | b1e5d8620367b42702e88671dd982423da25fe70 /drivers/mxc | |
parent | 33d5e1fd472147efd1bfd7b9501e2e176008ba55 (diff) |
ENGR00171949:gpu-viv: change from mutex to completion for waiting pm events
viv code is using mutex to wait for pm events,
kernel will see this as a dead lock and give a warrning, as the mutex
can be hold for a long time.
Signed-off-by: Wu Guoxing <b39297@freescale.com>
Acked-by: Lily Zhang
Diffstat (limited to 'drivers/mxc')
3 files changed, 8 insertions, 9 deletions
diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c index edf4354167ad..416021a5bb18 100644 --- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c +++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.c @@ -510,8 +510,7 @@ gckHARDWARE_Construct( gcmkONERROR(gckOS_CreateSemaphore(Os, &hardware->globalSemaphore)); #if gcdPOWEROFF_TIMEOUT - gcmkONERROR(gckOS_CreateMutex(Os, &hardware->powerOffSema)); - gcmkONERROR(gckOS_AcquireMutex(Os, hardware->powerOffSema, gcvINFINITE)); + gcmkONERROR(gckOS_CreateSignal(Os, gcvFALSE, &hardware->powerOffSignal)); hardware->powerOffTimeout = gcdPOWEROFF_TIMEOUT; #endif @@ -543,9 +542,9 @@ OnError: } #if gcdPOWEROFF_TIMEOUT - if (hardware->powerOffSema != gcvNULL) + if (hardware->powerOffSignal != gcvNULL) { - gcmkVERIFY_OK(gckOS_DeleteMutex(Os, &hardware->powerOffSema)); + gcmkVERIFY_OK(gckOS_DestroySignal(Os, hardware->powerOffSignal)); } #endif @@ -595,7 +594,7 @@ gckHARDWARE_Destroy( gcmkVERIFY_OK(gckOS_DeleteMutex(Hardware->os, Hardware->powerMutex)); #if gcdPOWEROFF_TIMEOUT - gcmkVERIFY_OK(gckOS_DeleteMutex(Hardware->os, Hardware->powerOffSema)); + gcmkVERIFY_OK(gckOS_DestroySignal(Hardware->os, Hardware->powerOffSignal)); #endif /* Mark the object as unknown. */ @@ -4054,7 +4053,7 @@ gckHARDWARE_SetPowerManagementState( if (State == gcvPOWER_IDLE) { - gcmkONERROR(gckOS_ReleaseMutex(os, Hardware->powerOffSema)); + gcmkONERROR(gckOS_Signal(os, Hardware->powerOffSignal, gcvTRUE)); } #endif diff --git a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h index 37f6825563bc..cd74c0761524 100644 --- a/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h +++ b/drivers/mxc/gpu-viv/arch/XAQ2/hal/kernel/gc_hal_kernel_hardware.h @@ -78,7 +78,7 @@ struct _gckHARDWARE #if gcdPOWEROFF_TIMEOUT gctUINT32 powerOffTime; - gctPOINTER powerOffSema; + gctSIGNAL powerOffSignal; gctUINT32 powerOffTimeout; #endif }; diff --git a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c index d619b79f1b82..8b25b9fdc533 100644 --- a/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c +++ b/drivers/mxc/gpu-viv/hal/os/linux/kernel/gc_hal_kernel_device.c @@ -272,7 +272,7 @@ static int threadRoutinePM(void *ctxt) { /* wait for idle */ gcmkVERIFY_OK( - gckOS_AcquireMutex(device->os, hardware->powerOffSema, gcvINFINITE)); + gckOS_WaitSignal(device->os, hardware->powerOffSignal, gcvINFINITE)); /* We try to power off every 200 ms, until GPU is not idle */ do @@ -1487,7 +1487,7 @@ gckGALDEVICE_Stop_Threads( { gckHARDWARE hardware = Device->kernels[gcvCORE_MAJOR]->hardware; Device->killThread = gcvTRUE; - gckOS_ReleaseSemaphore(Device->os, hardware->powerOffSema); + gckOS_Signal(Device->os, hardware->powerOffSignal, gcvTRUE); kthread_stop(Device->pmThreadCtxts); Device->pmThreadCtxts = gcvNULL; |