summaryrefslogtreecommitdiff
path: root/shared-core/i915_drv.h
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2008-06-06 12:59:52 -0700
committerKeith Packard <keithp@keithp.com>2008-06-06 13:00:47 -0700
commit9f46c6935d154743162c6239903a4a9e443907bc (patch)
tree8212464335d194a7c1f909d2eb20523fbcd6b789 /shared-core/i915_drv.h
parenta708106c77f74f146722fba35eae772fb554ee9a (diff)
[intel-gem] Use timers to retire requests periodically.
Without the user IRQ running constantly, there's no wakeup when the ring empties to go retire requests and free buffers. Use a 1 second timer to make that happen more often.
Diffstat (limited to 'shared-core/i915_drv.h')
-rw-r--r--shared-core/i915_drv.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/shared-core/i915_drv.h b/shared-core/i915_drv.h
index 33fb7ca9..55af6552 100644
--- a/shared-core/i915_drv.h
+++ b/shared-core/i915_drv.h
@@ -280,6 +280,16 @@ typedef struct drm_i915_private {
*/
struct list_head request_list;
+ /**
+ * We leave the user IRQ off as much as possible,
+ * but this means that requests will finish and never
+ * be retired once the system goes idle. Set a timer to
+ * fire periodically while the ring is running. When it
+ * fires, go retire requests.
+ */
+ struct timer_list retire_timer;
+ struct work_struct retire_task;
+
uint32_t next_gem_seqno;
} mm;
@@ -463,6 +473,8 @@ int i915_gem_flush_pwrite(struct drm_gem_object *obj,
uint64_t offset, uint64_t size);
void i915_gem_lastclose(struct drm_device *dev);
void i915_gem_retire_requests(struct drm_device *dev);
+void i915_gem_retire_timeout(unsigned long data);
+void i915_gem_retire_handler(struct work_struct *work);
#endif
#ifdef __linux__