public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
* [PATCH v2 01/22] drm/i915: Micro-optimise i915_get_ggtt_vma_pages()
@ 2017-02-10 19:38 Chris Wilson
  2017-02-10 19:38 ` [PATCH v2 02/22] drm/i915: Micro-optimise gen6_ppgtt_insert_entries() Chris Wilson
                   ` (21 more replies)
  0 siblings, 22 replies; 31+ messages in thread
From: Chris Wilson @ 2017-02-10 19:38 UTC (permalink / raw)
  To: intel-gfx; +Cc: matthew.auld, mika.kuoppala

The predominant VMA class is normal GTT, so allow gcc to emphasize that
path and avoid unnecessary stack movement.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com>
---
 drivers/gpu/drm/i915/i915_gem_gtt.c | 61 +++++++++++++++++++------------------
 1 file changed, 32 insertions(+), 29 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index eebbffdb9a0b..68169694d268 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -2622,14 +2622,16 @@ static int ggtt_bind_vma(struct i915_vma *vma,
 {
 	struct drm_i915_private *i915 = vma->vm->i915;
 	struct drm_i915_gem_object *obj = vma->obj;
-	u32 pte_flags = 0;
-	int ret;
+	u32 pte_flags;
 
-	ret = i915_get_ggtt_vma_pages(vma);
-	if (ret)
-		return ret;
+	if (unlikely(!vma->pages)) {
+		int ret = i915_get_ggtt_vma_pages(vma);
+		if (ret)
+			return ret;
+	}
 
 	/* Currently applicable only to VLV */
+	pte_flags = 0;
 	if (obj->gt_ro)
 		pte_flags |= PTE_READ_ONLY;
 
@@ -2654,18 +2656,18 @@ static int aliasing_gtt_bind_vma(struct i915_vma *vma,
 {
 	struct drm_i915_private *i915 = vma->vm->i915;
 	u32 pte_flags;
-	int ret;
 
-	ret = i915_get_ggtt_vma_pages(vma);
-	if (ret)
-		return ret;
+	if (unlikely(!vma->pages)) {
+		int ret = i915_get_ggtt_vma_pages(vma);
+		if (ret)
+			return ret;
+	}
 
 	/* Currently applicable only to VLV */
 	pte_flags = 0;
 	if (vma->obj->gt_ro)
 		pte_flags |= PTE_READ_ONLY;
 
-
 	if (flags & I915_VMA_GLOBAL_BIND) {
 		intel_runtime_pm_get(i915);
 		vma->vm->insert_entries(vma->vm,
@@ -3431,9 +3433,9 @@ rotate_pages(const dma_addr_t *in, unsigned int offset,
 	return sg;
 }
 
-static struct sg_table *
-intel_rotate_fb_obj_pages(const struct intel_rotation_info *rot_info,
-			  struct drm_i915_gem_object *obj)
+static noinline struct sg_table *
+intel_rotate_pages(struct intel_rotation_info *rot_info,
+		   struct drm_i915_gem_object *obj)
 {
 	const size_t n_pages = obj->base.size / PAGE_SIZE;
 	unsigned int size = intel_rotation_info_size(rot_info);
@@ -3494,7 +3496,7 @@ intel_rotate_fb_obj_pages(const struct intel_rotation_info *rot_info,
 	return ERR_PTR(ret);
 }
 
-static struct sg_table *
+static noinline struct sg_table *
 intel_partial_pages(const struct i915_ggtt_view *view,
 		    struct drm_i915_gem_object *obj)
 {
@@ -3548,7 +3550,7 @@ intel_partial_pages(const struct i915_ggtt_view *view,
 static int
 i915_get_ggtt_vma_pages(struct i915_vma *vma)
 {
-	int ret = 0;
+	int ret;
 
 	/* The vma->pages are only valid within the lifespan of the borrowed
 	 * obj->mm.pages. When the obj->mm.pages sg_table is regenerated, so
@@ -3557,32 +3559,33 @@ i915_get_ggtt_vma_pages(struct i915_vma *vma)
 	 */
 	GEM_BUG_ON(!i915_gem_object_has_pinned_pages(vma->obj));
 
-	if (vma->pages)
+	switch (vma->ggtt_view.type) {
+	case I915_GGTT_VIEW_NORMAL:
+		vma->pages = vma->obj->mm.pages;
 		return 0;
 
-	if (vma->ggtt_view.type == I915_GGTT_VIEW_NORMAL)
-		vma->pages = vma->obj->mm.pages;
-	else if (vma->ggtt_view.type == I915_GGTT_VIEW_ROTATED)
+	case I915_GGTT_VIEW_ROTATED:
 		vma->pages =
-			intel_rotate_fb_obj_pages(&vma->ggtt_view.rotated,
-						  vma->obj);
-	else if (vma->ggtt_view.type == I915_GGTT_VIEW_PARTIAL)
+			intel_rotate_pages(&vma->ggtt_view.rotated, vma->obj);
+		break;
+
+	case I915_GGTT_VIEW_PARTIAL:
 		vma->pages = intel_partial_pages(&vma->ggtt_view, vma->obj);
-	else
+		break;
+
+	default:
 		WARN_ONCE(1, "GGTT view %u not implemented!\n",
 			  vma->ggtt_view.type);
+		return -EINVAL;
+	}
 
-	if (!vma->pages) {
-		DRM_ERROR("Failed to get pages for GGTT view type %u!\n",
-			  vma->ggtt_view.type);
-		ret = -EINVAL;
-	} else if (IS_ERR(vma->pages)) {
+	ret = 0;
+	if (unlikely(IS_ERR(vma->pages))) {
 		ret = PTR_ERR(vma->pages);
 		vma->pages = NULL;
 		DRM_ERROR("Failed to get pages for VMA view type %u (%d)!\n",
 			  vma->ggtt_view.type, ret);
 	}
-
 	return ret;
 }
 
-- 
2.11.0

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2017-02-14 15:56 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-02-10 19:38 [PATCH v2 01/22] drm/i915: Micro-optimise i915_get_ggtt_vma_pages() Chris Wilson
2017-02-10 19:38 ` [PATCH v2 02/22] drm/i915: Micro-optimise gen6_ppgtt_insert_entries() Chris Wilson
2017-02-10 19:38 ` [PATCH v2 03/22] drm/i915: Micro-optimise gen8_ppgtt_insert_entries() Chris Wilson
2017-02-13 14:58   ` Mika Kuoppala
2017-02-13 15:12     ` Chris Wilson
2017-02-13 15:44   ` [PATCH v3] " Chris Wilson
2017-02-10 19:38 ` [PATCH v2 04/22] drm/i915: Don't special case teardown of aliasing_ppgtt Chris Wilson
2017-02-10 19:38 ` [PATCH v2 05/22] drm/i915: Split ggtt/alasing_gtt unbind_vma Chris Wilson
2017-02-10 19:38 ` [PATCH v2 06/22] drm/i915: Convert clflushed pagetables over to WC maps Chris Wilson
2017-02-10 19:38 ` [PATCH v2 07/22] drm/i915: Remove kmap/kunmap wrappers Chris Wilson
2017-02-10 19:38 ` [PATCH v2 08/22] drm/i915: Move allocate_va_range to GTT Chris Wilson
2017-02-10 19:38 ` [PATCH v2 09/22] drm/i915: Always preallocate gen6/7 ppgtt Chris Wilson
2017-02-10 19:38 ` [PATCH v2 10/22] drm/i915: Remove redundant clear of appgtt Chris Wilson
2017-02-10 19:38 ` [PATCH v2 11/22] drm/i915: Tidy gen6_write_pde() Chris Wilson
2017-02-10 19:38 ` [PATCH v2 12/22] drm/i915: Remove bitmap tracking for used-ptes Chris Wilson
2017-02-10 19:38 ` [PATCH v2 13/22] drm/i915: Remove bitmap tracking for used-pdes Chris Wilson
2017-02-10 19:38 ` [PATCH v2 14/22] drm/i915: Remove bitmap tracking for used-pdpes Chris Wilson
2017-02-10 19:38 ` [PATCH v2 15/22] drm/i915: Remove bitmap tracking for used-pml4 Chris Wilson
2017-02-10 19:38 ` [PATCH v2 16/22] drm/i915: Remove superfluous posting reads after clear GGTT Chris Wilson
2017-02-10 19:38 ` [PATCH v2 17/22] drm/i915: Always mark the PDP as dirty when altered Chris Wilson
2017-02-10 19:38 ` [PATCH v2 18/22] drm/i915: Remove defunct GTT tracepoints Chris Wilson
2017-02-10 19:38 ` [PATCH v2 19/22] drm/i915: Remove unused ppgtt->enable() Chris Wilson
2017-02-10 19:38 ` [PATCH v2 20/22] drm/i915: Remove i915_address_space.start Chris Wilson
2017-02-13 14:47   ` Matthew Auld
2017-02-10 19:38 ` [PATCH v2 21/22] drm/i915: Only preallocate the aliasing GTT to the extents of the global GTT Chris Wilson
2017-02-14 15:56   ` Matthew Auld
2017-02-10 19:38 ` [PATCH v2 22/22] drm/i915: Differentiate the aliasing_ppgtt with an invalid filp Chris Wilson
2017-02-13 15:07   ` Matthew Auld
2017-02-14  9:47   ` [PATCH] drm/i915: Use preferred kernel types in i915_gem_gtt.c Chris Wilson
2017-02-14 12:01     ` Joonas Lahtinen
2017-02-14 11:22 ` ✓ Fi.CI.BAT: success for series starting with [v2,01/22] drm/i915: Micro-optimise i915_get_ggtt_vma_pages() (rev3) Patchwork

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox