summaryrefslogtreecommitdiff
path: root/linux-core/drmP.h
diff options
context:
space:
mode:
authorJesse Barnes <jbarnes@nietzche.virtuousgeek.org>2008-07-17 13:48:14 -0400
committerJesse Barnes <jbarnes@nietzche.virtuousgeek.org>2008-07-17 13:55:24 -0400
commit2204f926abe4da87a38955c4ecf9adb73b646666 (patch)
tree0bc54a5aa8c4cd39e6eccafc1922caf86f4c2286 /linux-core/drmP.h
parentb0e4619a396f2db8c594cd0a26fd2f0ab9358095 (diff)
Avoid incorrect vblank wakeups
The current code uses the hw vblank counter exclusively, which can lead to wakeups during the active period rather than during the vblank period if the hw counter counts displayed frames rather than vblank periods. This change coverts the code over to using the counter while interrupts are enabled, fixing that issue. It also includes a couple of related changes: one to not enable the new enable/disable behavior until the modeset ioctl is called (to preserve old client behavior) and another to account for lost events due to mode setting with the new counter scheme. BSD will require similar changes to its drm_irq.c code, but they should be straightforward.
Diffstat (limited to 'linux-core/drmP.h')
-rw-r--r--linux-core/drmP.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/linux-core/drmP.h b/linux-core/drmP.h
index 331f3ac5..45a599b4 100644
--- a/linux-core/drmP.h
+++ b/linux-core/drmP.h
@@ -832,6 +832,14 @@ struct drm_device {
/** \name VBLANK IRQ support */
/*@{ */
+ /*
+ * At load time, disabling the vblank interrupt won't be allowed since
+ * old clients may not call the modeset ioctl and therefore misbehave.
+ * Once the modeset ioctl *has* been called though, we can safely
+ * disable them when unused.
+ */
+ int vblank_disable_allowed;
+
wait_queue_head_t *vbl_queue; /**< VBLANK wait queue */
atomic_t *_vblank_count; /**< number of VBLANK interrupts (driver must alloc the right number of counters) */
spinlock_t vbl_lock;