diff mbox

[8/8] drm/i915: Clear range when unbinding closed vma

Message ID 1481543325-2290-2-git-send-email-michal.winiarski@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Michał Winiarski Dec. 12, 2016, 11:48 a.m. UTC
Since we've introduced ppgtt shrinking, most of the vmas should already
be unbounded when ppgtt is being released.
This allows us to take care of leftovers and assert that all vmas are
unbounded, removing the iteration during ppgtt release.

Cc: Arkadiusz Hiler <arkadiusz.hiler@intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Michel Thierry <michel.thierry@intel.com>
Cc: Mika Kuoppala <mika.kuoppala@intel.com>
Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
---
 drivers/gpu/drm/i915/i915_gem_gtt.c | 36 ++----------------------------------
 drivers/gpu/drm/i915/i915_vma.c     |  7 +++----
 2 files changed, 5 insertions(+), 38 deletions(-)

Comments

Chris Wilson Dec. 12, 2016, noon UTC | #1
On Mon, Dec 12, 2016 at 12:48:45PM +0100, Michał Winiarski wrote:
> Since we've introduced ppgtt shrinking, most of the vmas should already
> be unbounded when ppgtt is being released.
> This allows us to take care of leftovers and assert that all vmas are
> unbounded, removing the iteration during ppgtt release.

No. The ppgtt is dead, we don't need to unbind piecemeal under the
struct_mutex. This is also used to avoid writes during suspend/resume.
-Chris
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 50d4861..4326dcc 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -898,22 +898,6 @@  static void gen8_ppgtt_insert_entries(struct i915_address_space *vm,
 	}
 }
 
-static void gen8_free_page_tables(struct drm_i915_private *dev_priv,
-				  struct i915_page_directory *pd)
-{
-	int i;
-
-	if (!px_page(pd))
-		return;
-
-	for (i = 0; i < I915_PDES; i++) {
-		if (pd->page_table[i]) {
-			free_pt(dev_priv, pd->page_table[i]);
-			pd->page_table[i] = NULL;
-		}
-	}
-}
-
 static int gen8_init_scratch(struct i915_address_space *vm)
 {
 	struct drm_i915_private *dev_priv = vm->i915;
@@ -1005,30 +989,14 @@  static void gen8_free_scratch(struct i915_address_space *vm)
 static void gen8_ppgtt_cleanup_3lvl(struct drm_i915_private *dev_priv,
 				    struct i915_page_directory_pointer *pdp)
 {
-	int i;
-
-	for (i = 0; i < I915_PDPES_PER_PDP(dev_priv); i++) {
-		if (pdp->page_directory[i]) {
-			gen8_free_page_tables(dev_priv, pdp->page_directory[i]);
-			pdp->page_directory[i] = NULL;
-		}
-	}
-
+	WARN_ON(pdp->num_pdpes != 0);
 	free_pdp(dev_priv, pdp);
 }
 
 static void gen8_ppgtt_cleanup_4lvl(struct drm_i915_private *dev_priv,
 				    struct i915_pml4 *pml4)
 {
-	int i;
-
-	for (i = 0; i < GEN8_PML4ES_PER_PML4; i++) {
-		if (pml4->pdps[i]) {
-			gen8_ppgtt_cleanup_3lvl(dev_priv, pml4->pdps[i]);
-			pml4->pdps[i] = NULL;
-		}
-	}
-
+	WARN_ON(pml4->num_pml4es != 0);
 	cleanup_px(dev_priv, pml4);
 }
 
diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
index 37c3eeb..248875f 100644
--- a/drivers/gpu/drm/i915/i915_vma.c
+++ b/drivers/gpu/drm/i915/i915_vma.c
@@ -603,10 +603,9 @@  int i915_vma_unbind(struct i915_vma *vma)
 		vma->flags &= ~I915_VMA_CAN_FENCE;
 	}
 
-	if (likely(!vma->vm->closed)) {
-		trace_i915_vma_unbind(vma);
-		vma->vm->unbind_vma(vma);
-	}
+	trace_i915_vma_unbind(vma);
+	vma->vm->unbind_vma(vma);
+
 	vma->flags &= ~(I915_VMA_GLOBAL_BIND | I915_VMA_LOCAL_BIND);
 
 	drm_mm_remove_node(&vma->node);