diff options
author | Xianzhong <xianzhong.li@nxp.com> | 2016-11-28 10:33:26 +0800 |
---|---|---|
committer | Leonard Crestez <leonard.crestez@nxp.com> | 2018-08-24 12:41:33 +0300 |
commit | 78e1e1e8edcfbe2dbadd1c6637b4a14db328e6ad (patch) | |
tree | b64c52642b417b4aaceb01595f56ad15f092fe37 /drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | |
parent | 9a51aa6d331f6ee7d25f1028f136187a1e0f7582 (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.c | 19 |
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)); |