From 0e46b52536b83148c547298cbe9a3b5b25b1d0fe Mon Sep 17 00:00:00 2001 From: Jie Zhou Date: Wed, 28 Jul 2010 12:04:04 +0800 Subject: 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 --- drivers/mxc/amd-gpu/common/gsl_device.c | 9 +++++++++ 1 file changed, 9 insertions(+) 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; -- cgit v1.2.3