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 | |
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')
-rw-r--r-- | drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.c | 19 | ||||
-rw-r--r-- | drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h | 5 |
2 files changed, 11 insertions, 13 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)); diff --git a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h index e8083dbf1d00..6249e266d9ba 100644 --- a/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h +++ b/drivers/mxc/gpu-viv/hal/kernel/gc_hal_kernel.h @@ -651,8 +651,6 @@ struct _gckKERNEL gckDEVICE device; gctUINT chipID; - - gctPOINTER commitMutex; }; struct _FrequencyHistory @@ -1184,6 +1182,9 @@ typedef struct _gcsDEVICE /* Mutex to make sure stuck dump for multiple cores doesn't interleave. */ gctPOINTER stuckDumpMutex; + + /* Mutex for multi-core combine mode command submission */ + gctPOINTER commitMutex; } gcsDEVICE; |