|
@@ -877,6 +877,7 @@ u32 drm_vblank_count(struct drm_device *dev, int crtc)
|
|
|
|
|
|
if (WARN_ON(crtc >= dev->num_crtcs))
|
|
|
return 0;
|
|
|
+
|
|
|
return vblank->count;
|
|
|
}
|
|
|
EXPORT_SYMBOL(drm_vblank_count);
|
|
@@ -1110,10 +1111,10 @@ void drm_vblank_put(struct drm_device *dev, int crtc)
|
|
|
{
|
|
|
struct drm_vblank_crtc *vblank = &dev->vblank[crtc];
|
|
|
|
|
|
- if (WARN_ON(atomic_read(&vblank->refcount) == 0))
|
|
|
+ if (WARN_ON(crtc >= dev->num_crtcs))
|
|
|
return;
|
|
|
|
|
|
- if (WARN_ON(crtc >= dev->num_crtcs))
|
|
|
+ if (WARN_ON(atomic_read(&vblank->refcount) == 0))
|
|
|
return;
|
|
|
|
|
|
/* Last user schedules interrupt disable */
|
|
@@ -1158,6 +1159,9 @@ void drm_wait_one_vblank(struct drm_device *dev, int crtc)
|
|
|
int ret;
|
|
|
u32 last;
|
|
|
|
|
|
+ if (WARN_ON(crtc >= dev->num_crtcs))
|
|
|
+ return;
|
|
|
+
|
|
|
ret = drm_vblank_get(dev, crtc);
|
|
|
if (WARN(ret, "vblank not available on crtc %i, ret=%i\n", crtc, ret))
|
|
|
return;
|
|
@@ -1428,6 +1432,9 @@ void drm_vblank_post_modeset(struct drm_device *dev, int crtc)
|
|
|
if (!dev->num_crtcs)
|
|
|
return;
|
|
|
|
|
|
+ if (WARN_ON(crtc >= dev->num_crtcs))
|
|
|
+ return;
|
|
|
+
|
|
|
if (vblank->inmodeset) {
|
|
|
spin_lock_irqsave(&dev->vbl_lock, irqflags);
|
|
|
dev->vblank_disable_allowed = true;
|