[Intel-gfx] [PATCH] drm/i915: Don't allow binding objects into the last page of the aperture.
Jesse Barnes
jbarnes at virtuousgeek.org
Wed May 13 00:34:02 CEST 2009
On Tue, 12 May 2009 15:29:56 -0700
Eric Anholt <eric at anholt.net> wrote:
> This should avoid a class of bugs where the hardware prefetches past
> the end of the object, and walks into unallocated memory when the
> object is bound to the last page of the aperture.
>
> fd.o bug #21488
> ---
> drivers/gpu/drm/i915/i915_dma.c | 12 ++++++++++--
> 1 files changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_dma.c
> b/drivers/gpu/drm/i915/i915_dma.c index 051134c..3133f99 100644
> --- a/drivers/gpu/drm/i915/i915_dma.c
> +++ b/drivers/gpu/drm/i915/i915_dma.c
> @@ -1011,8 +1011,16 @@ static int i915_load_modeset_init(struct
> drm_device *dev) /* Basic memrange allocator for stolen space (aka
> vram) */ drm_mm_init(&dev_priv->vram, 0, prealloc_size);
>
> - /* Let GEM Manage from end of prealloc space to end of
> aperture */
> - i915_gem_do_init(dev, prealloc_size, agp_size);
> + /* Let GEM Manage from end of prealloc space to end of
> aperture.
> + *
> + * However, leave one page at the end still bound to the
> scratch page.
> + * There are a number of places where the hardware apparently
> + * prefetches past the end of the object, and we've seen
> multiple
> + * hangs with the GPU head pointer stuck in a batchbuffer
> bound
> + * at the last page of the aperture. One page should be
> enough to
> + * keep any prefetching inside of the aperture.
> + */
> + i915_gem_do_init(dev, prealloc_size, agp_size - 4096);
What about objects in the middle of the aperture that are immediately
followed by unbound pages? Do we already handle that case by adding a
padding page to objects (iirc one of the docs mentions that this is
necessary).
--
Jesse Barnes, Intel Open Source Technology Center
More information about the Intel-gfx
mailing list