summaryrefslogtreecommitdiff
path: root/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
diff options
context:
space:
mode:
authorXianzhong <xianzhong.li@nxp.com>2016-11-28 10:33:26 +0800
committerLeonard Crestez <leonard.crestez@nxp.com>2018-08-24 12:41:33 +0300
commit78e1e1e8edcfbe2dbadd1c6637b4a14db328e6ad (patch)
treeb64c52642b417b4aaceb01595f56ad15f092fe37 /drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
parent9a51aa6d331f6ee7d25f1028f136187a1e0f7582 (diff)
MGS-1923 [#imx-19] use device mutex to sync command operations
kernel mutex cannot be shared with gpu0,gpu1 and bridge mode together. use device mutex to prevent the sync problem for gpu command operations. this change is reasonable and fixed one hole in existing implementation. but this patch cannot fix the GPU hang for MGS-2429. Date: Nov 28, 2016 Signed-off-by: Xianzhong <xianzhong.li@nxp.com>
Diffstat (limited to 'drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c')
-rw-r--r--drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c19
1 files changed, 8 insertions, 11 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 28d017b3526d..2ac78723b3a1 100644
--- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
+++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c
@@ -558,9 +558,6 @@ gckKERNEL_Construct(
else
#endif
{
- gcmkONERROR(
- gckOS_CreateMutex(Os, (gctPOINTER)&kernel->commitMutex));
-
/* Construct the gckHARDWARE object. */
gcmkONERROR(
gckHARDWARE_Construct(Os, kernel->core, &kernel->hardware));
@@ -885,11 +882,6 @@ gckKERNEL_Destroy(
/* Destroy the gckHARDWARE object. */
gcmkVERIFY_OK(gckHARDWARE_Destroy(Kernel->hardware));
}
-
- if (Kernel->commitMutex)
- {
- gcmkVERIFY_OK(gckOS_DeleteMutex(Kernel->os, Kernel->commitMutex));
- }
}
if (Kernel->atomClients)
@@ -2189,7 +2181,7 @@ gckKERNEL_Dispatch(
case gcvHAL_COMMIT:
gcmkONERROR(gckOS_AcquireMutex(Kernel->os,
- Kernel->commitMutex,
+ Kernel->device->commitMutex,
gcvINFINITE
));
commitMutexAcquired = gcvTRUE;
@@ -2268,7 +2260,7 @@ gckKERNEL_Dispatch(
}
}
}
- gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->commitMutex));
+ gcmkONERROR(gckOS_ReleaseMutex(Kernel->os, Kernel->device->commitMutex));
commitMutexAcquired = gcvFALSE;
break;
@@ -3099,7 +3091,7 @@ OnError:
if (commitMutexAcquired == gcvTRUE)
{
- gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, Kernel->commitMutex));
+ gcmkVERIFY_OK(gckOS_ReleaseMutex(Kernel->os, Kernel->device->commitMutex));
}
/* Return the status. */
@@ -5724,6 +5716,7 @@ gckDEVICE_Construct(
gckOS_ZeroMemory(device, gcmSIZEOF(gcsDEVICE));
gcmkONERROR(gckOS_CreateMutex(Os, &device->stuckDumpMutex));
+ gcmkONERROR(gckOS_CreateMutex(Os, &device->commitMutex));
device->os = Os;
@@ -5888,6 +5881,10 @@ gckDEVICE_Destroy(
}
}
+ if (Device->commitMutex)
+ {
+ gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Device->commitMutex));
+ }
if (Device->stuckDumpMutex)
{
gcmkVERIFY_OK(gckOS_DeleteMutex(Os, Device->stuckDumpMutex));