summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhenyong Chen <b07273@freescale.com>2014-12-30 01:27:02 +0800
committerJason Liu <r64343@freescale.com>2015-02-02 14:16:38 +0800
commite953bad30143319290c51019a0555a084db13b0a (patch)
tree3d7f2ef06f460df753710b6a73835e9fe143e12a
parentf2930bfc11e16438c70dcefe1a2fa49ea3ceb9fe (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.c6
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. */