diff options
Diffstat (limited to 'drivers/gpu/drm/drm_irq.c')
-rw-r--r-- | drivers/gpu/drm/drm_irq.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/drm/drm_irq.c b/drivers/gpu/drm/drm_irq.c index 1608f8dbfda0..724e505873cf 100644 --- a/drivers/gpu/drm/drm_irq.c +++ b/drivers/gpu/drm/drm_irq.c | |||
@@ -116,6 +116,9 @@ void drm_vblank_cleanup(struct drm_device *dev) | |||
116 | dev->num_crtcs, DRM_MEM_DRIVER); | 116 | dev->num_crtcs, DRM_MEM_DRIVER); |
117 | drm_free(dev->last_vblank, sizeof(*dev->last_vblank) * dev->num_crtcs, | 117 | drm_free(dev->last_vblank, sizeof(*dev->last_vblank) * dev->num_crtcs, |
118 | DRM_MEM_DRIVER); | 118 | DRM_MEM_DRIVER); |
119 | drm_free(dev->last_vblank_wait, | ||
120 | sizeof(*dev->last_vblank_wait) * dev->num_crtcs, | ||
121 | DRM_MEM_DRIVER); | ||
119 | drm_free(dev->vblank_inmodeset, sizeof(*dev->vblank_inmodeset) * | 122 | drm_free(dev->vblank_inmodeset, sizeof(*dev->vblank_inmodeset) * |
120 | dev->num_crtcs, DRM_MEM_DRIVER); | 123 | dev->num_crtcs, DRM_MEM_DRIVER); |
121 | 124 | ||
@@ -161,6 +164,11 @@ int drm_vblank_init(struct drm_device *dev, int num_crtcs) | |||
161 | if (!dev->last_vblank) | 164 | if (!dev->last_vblank) |
162 | goto err; | 165 | goto err; |
163 | 166 | ||
167 | dev->last_vblank_wait = drm_calloc(num_crtcs, sizeof(u32), | ||
168 | DRM_MEM_DRIVER); | ||
169 | if (!dev->last_vblank_wait) | ||
170 | goto err; | ||
171 | |||
164 | dev->vblank_inmodeset = drm_calloc(num_crtcs, sizeof(int), | 172 | dev->vblank_inmodeset = drm_calloc(num_crtcs, sizeof(int), |
165 | DRM_MEM_DRIVER); | 173 | DRM_MEM_DRIVER); |
166 | if (!dev->vblank_inmodeset) | 174 | if (!dev->vblank_inmodeset) |
@@ -642,6 +650,7 @@ int drm_wait_vblank(struct drm_device *dev, void *data, | |||
642 | } else { | 650 | } else { |
643 | DRM_DEBUG("waiting on vblank count %d, crtc %d\n", | 651 | DRM_DEBUG("waiting on vblank count %d, crtc %d\n", |
644 | vblwait->request.sequence, crtc); | 652 | vblwait->request.sequence, crtc); |
653 | dev->last_vblank_wait[crtc] = vblwait->request.sequence; | ||
645 | DRM_WAIT_ON(ret, dev->vbl_queue[crtc], 3 * DRM_HZ, | 654 | DRM_WAIT_ON(ret, dev->vbl_queue[crtc], 3 * DRM_HZ, |
646 | ((drm_vblank_count(dev, crtc) | 655 | ((drm_vblank_count(dev, crtc) |
647 | - vblwait->request.sequence) <= (1 << 23))); | 656 | - vblwait->request.sequence) <= (1 << 23))); |