diff options
author | Zhenyong Chen <b07273@freescale.com> | 2014-12-30 01:27:02 +0800 |
---|---|---|
committer | Jason Liu <r64343@freescale.com> | 2015-02-02 14:16:38 +0800 |
commit | e953bad30143319290c51019a0555a084db13b0a (patch) | |
tree | 3d7f2ef06f460df753710b6a73835e9fe143e12a | |
parent | f2930bfc11e16438c70dcefe1a2fa49ea3ceb9fe (diff) |
MGS-386 [#1506] Power mutex track is buggy in gckKERNEL_Dispatch
In function gckKERNEL_Dispatch, powerMutexAcquired is used to track
power mutex. It is missing from gcvHAL_WRITE_REGISTER. And in some
places return value of gckOS_AcquireMutex is not checked.
Date: Dec 29, 2014
Signed-off-by: Zhenyong Chen <b07273@freescale.com>
Acked-by: Jason Liu
(cherry picked from commit ee66831d2511f80416ddee8c79893c5e7d9cbad0)
-rw-r--r-- | drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c index b14708d307d4..4f1ae0a0381a 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c @@ -2045,7 +2045,7 @@ gckKERNEL_Dispatch( gctUINT32 coreId = 0; gctUINT32 coreSelect = Interface->u.ReadRegisterDataEx.coreSelect; - gckOS_AcquireMutex(Kernel->os, Kernel->hardware->powerMutex, gcvINFINITE); + gcmkONERROR(gckOS_AcquireMutex(Kernel->os, Kernel->hardware->powerMutex, gcvINFINITE)); powerMutexAcquired = gcvTRUE; gcmkONERROR(gckHARDWARE_QueryPowerManagementState(Kernel->hardware, &power)); @@ -2142,7 +2142,8 @@ gckKERNEL_Dispatch( { gceCHIPPOWERSTATE power; - gckOS_AcquireMutex(Kernel->os, Kernel->hardware->powerMutex, gcvINFINITE); + gcmkONERROR(gckOS_AcquireMutex(Kernel->os, Kernel->hardware->powerMutex, gcvINFINITE)); + powerMutexAcquired = gcvTRUE; gcmkONERROR(gckHARDWARE_QueryPowerManagementState(Kernel->hardware, &power)); if (power == gcvPOWER_ON) @@ -2161,6 +2162,7 @@ gckKERNEL_Dispatch( status = gcvSTATUS_CHIP_NOT_READY; } gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->hardware->powerMutex)); + powerMutexAcquired = gcvFALSE; } #else /* No access from user land to write registers. */ |