All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Wilson <chris@chris-wilson.co.uk>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH 11/17] drm/i915: Avoid clearing preallocated regions from the GTT
Date: Sat, 21 Apr 2012 17:35:55 +0100	[thread overview]
Message-ID: <1335026161-15054-12-git-send-email-chris@chris-wilson.co.uk> (raw)
In-Reply-To: <1335026161-15054-1-git-send-email-chris@chris-wilson.co.uk>

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/i915_drv.h     |    2 ++
 drivers/gpu/drm/i915/i915_gem_gtt.c |   32 +++++++++++++++++++++++++++++---
 2 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 22736eb1..03f8d90 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -826,6 +826,8 @@ enum i915_cache_level {
 	I915_CACHE_LLC_MLC, /* gen6+ */
 };
 
+#define I915_GTT_RESERVED ((struct drm_mm_node *)0x1)
+
 struct drm_i915_gem_object {
 	struct drm_gem_object base;
 
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 25c8bf9..b0c20a5 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -417,16 +417,42 @@ void i915_gem_init_global_gtt(struct drm_device *dev,
 			      unsigned long end)
 {
 	drm_i915_private_t *dev_priv = dev->dev_private;
+	struct drm_mm_node *entry;
+	struct drm_i915_gem_object *obj;
 
-	/* Substract the guard page ... */
+	/* Subtract the guard page ... */
 	drm_mm_init(&dev_priv->mm.gtt_space, start, end - start - PAGE_SIZE);
 
+	/* Mark any preallocated objects as occupied */
+	list_for_each_entry(obj, &dev_priv->mm.gtt_list, gtt_list) {
+		DRM_DEBUG_KMS("reserving preallocated space: %x + %zx\n",
+			      obj->gtt_offset, obj->base.size);
+
+		BUG_ON(obj->gtt_space != I915_GTT_RESERVED);
+		obj->gtt_space = drm_mm_create_block(&dev_priv->mm.gtt_space,
+						     obj->gtt_offset,
+						     obj->base.size,
+						     false);
+		obj->has_global_gtt_mapping = 1;
+	}
+
 	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;
 
-	/* ... but ensure that we clear the entire range. */
-	intel_gtt_clear_range(start / PAGE_SIZE, (end-start) / PAGE_SIZE);
+	/* Clear any non-preallocated blocks */
+	list_for_each_entry(entry, &dev_priv->mm.gtt_space.hole_stack, hole_stack) {
+		unsigned long hole_start = entry->start + entry->size;
+		unsigned long hole_end = list_entry(entry->node_list.next,
+						    struct drm_mm_node,
+						    node_list)->start;
+
+		DRM_DEBUG_KMS("clearing unused GTT space: [%lx, %lx]\n",
+			      hole_start, hole_end);
+
+		intel_gtt_clear_range(hole_start / PAGE_SIZE,
+				      (hole_end-hole_start) / PAGE_SIZE);
+	}
 }
-- 
1.7.10

  parent reply	other threads:[~2012-04-21 16:36 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-21 16:35 [RFC] Preserve stolen objects across initialisation Chris Wilson
2012-04-21 16:35 ` [PATCH 01/17] drm/i915: Remove the list of pinned inactive objects Chris Wilson
2012-04-21 16:35 ` [PATCH 02/17] drm/i915: Remove the deferred-free list Chris Wilson
2012-04-21 16:35 ` [PATCH 03/17] drm/i915: Track unbound pages Chris Wilson
2012-04-21 16:35 ` [PATCH 04/17] drm/i915: Only pwrite through the GTT if there is space in the aperture Chris Wilson
2012-04-21 16:35 ` [PATCH 05/17] drm/i915: Try harder to allocate an mmap_offset Chris Wilson
2012-04-21 16:35 ` [PATCH 06/17] drm/i915/debugfs: Show (count, size) of purgeable objects in i915_gem_objects Chris Wilson
2012-04-21 16:35 ` [PATCH 07/17] drm/i915/tv: fix open-coded ARRAY_SIZE Chris Wilson
2012-04-21 16:35 ` [PATCH 08/17] drm: Introduce drm_mm_create_block() Chris Wilson
2012-04-21 16:35 ` [PATCH 09/17] drm/i915: Split the stolen handling for GEM out of i915_dma.c Chris Wilson
2012-04-21 16:35 ` [PATCH 10/17] drm/i915: Move GEM initialisation from i915_dma.c to i915_gem.c Chris Wilson
2012-04-21 16:35 ` Chris Wilson [this message]
2012-04-21 16:35 ` [PATCH 12/17] drm/i915: Always use the scatterlists if available for GTT insertion Chris Wilson
2012-04-21 16:35 ` [PATCH 13/17] drm/i915: Tidy handling of the scatterlist by ppgtt Chris Wilson
2012-04-21 16:35 ` [PATCH 14/17] drm/i915: Delay allocation of stolen space for FBC Chris Wilson
2012-04-21 16:35 ` [PATCH 15/17] drm/i915: Introduce i915_gem_object_create_for_stolen() Chris Wilson
2012-04-21 16:36 ` [PATCH 16/17] drm/i915: Split the framebuffer_info creation into a separate routine Chris Wilson
2012-04-21 16:36 ` [PATCH 17/17] drm/i915: Wrap the preallocated BIOS framebuffer and preserve for KMS fbcon Chris Wilson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1335026161-15054-12-git-send-email-chris@chris-wilson.co.uk \
    --to=chris@chris-wilson.co.uk \
    --cc=intel-gfx@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.