Merge "msm: kgsl: Re-run the events handler when inflight goes to zero"
diff --git a/drivers/gpu/msm/adreno_dispatch.c b/drivers/gpu/msm/adreno_dispatch.c
index 6072f2d..ca3db5b 100644
--- a/drivers/gpu/msm/adreno_dispatch.c
+++ b/drivers/gpu/msm/adreno_dispatch.c
@@ -1383,11 +1383,14 @@
* into suspend even if there are queued command batches
*/
+ mutex_lock(&device->mutex);
if (count && dispatcher->inflight == 0) {
- mutex_lock(&device->mutex);
kgsl_active_count_put(device);
- mutex_unlock(&device->mutex);
- }
+ /* Queue back up the event processor to catch stragglers */
+ queue_work(device->work_queue, &device->ts_expired_ws);
+ } else
+ kgsl_pwrscale_update(device);
+ mutex_unlock(&device->mutex);
/* Dispatch new commands if we have the room */
if (dispatcher->inflight < _dispatcher_inflight)
diff --git a/drivers/gpu/msm/kgsl_events.c b/drivers/gpu/msm/kgsl_events.c
index 7d89e03..4d28b55 100644
--- a/drivers/gpu/msm/kgsl_events.c
+++ b/drivers/gpu/msm/kgsl_events.c
@@ -417,19 +417,9 @@
struct kgsl_context *context, *tmp;
uint32_t timestamp;
- /*
- * Bail unless the global timestamp has advanced. We can safely do this
- * outside of the mutex for speed
- */
-
- timestamp = kgsl_readtimestamp(device, NULL, KGSL_TIMESTAMP_RETIRED);
- if (timestamp == device->events_last_timestamp)
- return;
-
mutex_lock(&device->mutex);
- device->events_last_timestamp = timestamp;
-
+ timestamp = kgsl_readtimestamp(device, NULL, KGSL_TIMESTAMP_RETIRED);
_retire_events(device, &device->events, timestamp);
_mark_next_event(device, &device->events);