Skip to content

Commit

Permalink
drm/i915: clear the entire gtt when using gem
Browse files Browse the repository at this point in the history
We've lost our guard page somewhere in the gtt rewrite, this patch
here will restore it.

Exercised by i-g-t/tests/gem_cs_prefetch.

v2: Substract the guard page from the range we're supposed to manage
with gem. Suggested by Chris Wilson to increase the odds of old ums +
gem userspace not blowing up. To compensate for the loss of a page,
don't substract the guard page in the modeset init code any longer.

Tested-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44748
Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
  • Loading branch information
Daniel Vetter committed Mar 27, 2012
1 parent 9021f28 commit d1dd20a
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 5 deletions.
4 changes: 1 addition & 3 deletions drivers/gpu/drm/i915/i915_dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -1207,8 +1207,6 @@ static int i915_load_gem_init(struct drm_device *dev)
/* PPGTT pdes are stolen from global gtt ptes, so shrink the
* aperture accordingly when using aliasing ppgtt. */
gtt_size -= I915_PPGTT_PD_ENTRIES*PAGE_SIZE;
/* For paranoia keep the guard page in between. */
gtt_size -= PAGE_SIZE;

i915_gem_init_global_gtt(dev, 0, mappable_size, gtt_size);

Expand All @@ -1227,7 +1225,7 @@ static int i915_load_gem_init(struct drm_device *dev)
* aperture.
*/
i915_gem_init_global_gtt(dev, 0, mappable_size,
gtt_size - PAGE_SIZE);
gtt_size);
}

ret = i915_gem_init_hw(dev);
Expand Down
5 changes: 3 additions & 2 deletions drivers/gpu/drm/i915/i915_gem_gtt.c
Original file line number Diff line number Diff line change
Expand Up @@ -429,14 +429,15 @@ void i915_gem_init_global_gtt(struct drm_device *dev,
{
drm_i915_private_t *dev_priv = dev->dev_private;

drm_mm_init(&dev_priv->mm.gtt_space, start, end - start);
/* Substract the guard page ... */
drm_mm_init(&dev_priv->mm.gtt_space, start, end - start - PAGE_SIZE);

dev_priv->mm.gtt_start = start;
dev_priv->mm.gtt_mappable_end = mappable_end;
dev_priv->mm.gtt_end = end;
dev_priv->mm.gtt_total = end - start;
dev_priv->mm.mappable_gtt_total = min(end, mappable_end) - start;

/* Take over this portion of the GTT */
/* ... but ensure that we clear the entire range. */
intel_gtt_clear_range(start / PAGE_SIZE, (end-start) / PAGE_SIZE);
}

0 comments on commit d1dd20a

Please sign in to comment.