[i915] 2D driver may reset Frame count value, this may lead driver
authorZou Nan hai <nanhai.zou@intel.com>
Mon, 3 Mar 2008 06:49:49 +0000 (14:49 +0800)
committerZou Nan hai <nanhai.zou@intel.com>
Mon, 3 Mar 2008 06:49:49 +0000 (14:49 +0800)
  to leap it's vblank count a huge value.
  This will stall some applications that switch video mode if vblank_mode is set to a non zero value in drirc.

shared-core/i915_irq.c

index fd08b6e..126f037 100644 (file)
@@ -406,6 +406,13 @@ u32 i915_get_vblank_counter(struct drm_device *dev, int plane)
        if (i915_in_vblank(dev, pipe))
                count++;
 #endif
+       /* count may be reset by other driver(e.g. 2D driver), 
+          we have no way to know if it is wrapped or resetted 
+          when count is zero. do a rough guess.
+       */
+       if (count == 0 && dev->last_vblank[pipe] < dev->max_vblank_count/2)
+               dev->last_vblank[pipe] = 0; 
+       
        return count;
 }