diff options
author | Jie Zhou <b30303@freescale.com> | 2010-07-28 12:04:04 +0800 |
---|---|---|
committer | Justin Waters <justin.waters@timesys.com> | 2010-12-17 12:10:56 -0500 |
commit | ad261be3a86995295476aec460f75e1bb2cb08a5 (patch) | |
tree | b67664bc2d3e8bea1511be6bd9ac09876af3c04b | |
parent | 87a089da085f67408b721be4a6cf8f4da64f7911 (diff) |
ENGR00125616 GPU: make sure device is stopped before close
When terminating some applications such as OpenGL ES2.0 conf. test,
kgsl_device_stop is not triggered. And run such kind of application
for several times, system hang happens for inconsistency of device
states. So make sure device is stopped in kgsl_device_close, which
is only called by last running caller process.
Signed-off-by: Jie Zhou <b30303@freescale.com>
-rw-r--r-- | drivers/mxc/amd-gpu/common/gsl_device.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/mxc/amd-gpu/common/gsl_device.c b/drivers/mxc/amd-gpu/common/gsl_device.c index 6fc51eb1bdc2..bcb557e69d6d 100644 --- a/drivers/mxc/amd-gpu/common/gsl_device.c +++ b/drivers/mxc/amd-gpu/common/gsl_device.c @@ -161,6 +161,15 @@ kgsl_device_close(gsl_device_t *device) kgsl_log_write( KGSL_LOG_GROUP_DEVICE | KGSL_LOG_LEVEL_TRACE, "--> int kgsl_device_close(gsl_device_t *device=0x%08x )\n", device ); + /* make sure the device is stopped before close + kgsl_device_close is only called for last running caller process + */ + while (device->refcnt > 0) { + GSL_API_MUTEX_UNLOCK(); + kgsl_device_stop(device->id); + GSL_API_MUTEX_LOCK(); + } + // close cmdstream status = kgsl_cmdstream_close(device); if( status != GSL_SUCCESS ) return status; |