drm/i915: Increase the amount of defense before computing vblank timestamps
Reported-by: Chris Clayton <chris2553@googlemail.com> Tested-by: Chris Clayton <chris2553@googlemail.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
parent
bee4a186c1
commit
4041b85323
@ -274,24 +274,35 @@ int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int i915_get_vblank_timestamp(struct drm_device *dev, int crtc,
|
int i915_get_vblank_timestamp(struct drm_device *dev, int pipe,
|
||||||
int *max_error,
|
int *max_error,
|
||||||
struct timeval *vblank_time,
|
struct timeval *vblank_time,
|
||||||
unsigned flags)
|
unsigned flags)
|
||||||
{
|
{
|
||||||
struct drm_crtc *drmcrtc;
|
struct drm_i915_private *dev_priv = dev->dev_private;
|
||||||
|
struct drm_crtc *crtc;
|
||||||
|
|
||||||
if (crtc < 0 || crtc >= dev->num_crtcs) {
|
if (pipe < 0 || pipe >= dev_priv->num_pipe) {
|
||||||
DRM_ERROR("Invalid crtc %d\n", crtc);
|
DRM_ERROR("Invalid crtc %d\n", pipe);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get drm_crtc to timestamp: */
|
/* Get drm_crtc to timestamp: */
|
||||||
drmcrtc = intel_get_crtc_for_pipe(dev, crtc);
|
crtc = intel_get_crtc_for_pipe(dev, pipe);
|
||||||
|
if (crtc == NULL) {
|
||||||
|
DRM_ERROR("Invalid crtc %d\n", pipe);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!crtc->enabled) {
|
||||||
|
DRM_DEBUG_KMS("crtc %d is disabled\n", pipe);
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
/* Helper routine in DRM core does all the work: */
|
/* Helper routine in DRM core does all the work: */
|
||||||
return drm_calc_vbltimestamp_from_scanoutpos(dev, crtc, max_error,
|
return drm_calc_vbltimestamp_from_scanoutpos(dev, pipe, max_error,
|
||||||
vblank_time, flags, drmcrtc);
|
vblank_time, flags,
|
||||||
|
crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user