All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 01/19] drm/i915: Micro-optimise i915_get_ggtt_vma_pages()
@ 2017-02-02 15:02 Chris Wilson
  2017-02-02 15:02 ` [PATCH 02/19] drm/i915: Micro-optimise gen6_ppgtt_insert_entries() Chris Wilson
                   ` (19 more replies)
  0 siblings, 20 replies; 46+ messages in thread
From: Chris Wilson @ 2017-02-02 15:02 UTC (permalink / raw)
  To: intel-gfx; +Cc: 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>
---
 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 ec360ab939b8..f8cef51cf24c 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -2615,14 +2615,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;
 
@@ -2647,18 +2649,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,
@@ -3397,9 +3399,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);
@@ -3460,7 +3462,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)
 {
@@ -3514,7 +3516,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
@@ -3523,32 +3525,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] 46+ messages in thread

end of thread, other threads:[~2017-02-10 11:26 UTC | newest]

Thread overview: 46+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-02-02 15:02 [PATCH 01/19] drm/i915: Micro-optimise i915_get_ggtt_vma_pages() Chris Wilson
2017-02-02 15:02 ` [PATCH 02/19] drm/i915: Micro-optimise gen6_ppgtt_insert_entries() Chris Wilson
2017-02-09 11:34   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 03/19] drm/i915: Micro-optimise gen8_ppgtt_insert_entries() Chris Wilson
2017-02-02 15:32   ` Chris Wilson
2017-02-02 15:57     ` Tvrtko Ursulin
2017-02-02 16:10       ` Chris Wilson
2017-02-02 16:39         ` Tvrtko Ursulin
2017-02-02 17:05           ` Chris Wilson
2017-02-02 17:17             ` Tvrtko Ursulin
2017-02-03  8:34               ` Chris Wilson
2017-02-02 15:02 ` [PATCH 04/19] drm/i915: Don't special case teardown of aliasing_ppgtt Chris Wilson
2017-02-06 14:21   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 05/19] drm/i915: Split ggtt/alasing_gtt unbind_vma Chris Wilson
2017-02-06 15:07   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 06/19] drm/i915: Convert clflushed pagetables over to WC maps Chris Wilson
2017-02-09 15:08   ` Mika Kuoppala
2017-02-09 15:11     ` Mika Kuoppala
2017-02-02 15:02 ` [PATCH 07/19] drm/i915: Remove kmap/kunmap wrappers Chris Wilson
2017-02-10 11:25   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 08/19] drm/i915: Remove user-triggerable WARN for large objects Chris Wilson
2017-02-02 15:07   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 09/19] drm/i915: Move allocate_va_range to GTT Chris Wilson
2017-02-07 10:01   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 10/19] drm/i915: Remove redundant clear of appgtt Chris Wilson
2017-02-07 10:06   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 11/19] drm/i915: Tidy gen6_write_pde() Chris Wilson
2017-02-07 10:18   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 12/19] drm/i915: Remove bitmap tracking for used-ptes Chris Wilson
2017-02-06 20:32   ` Michał Winiarski
2017-02-02 15:02 ` [PATCH 13/19] drm/i915: Remove bitmap tracking for used-pdes Chris Wilson
2017-02-08 16:30   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 14/19] drm/i915: Remove bitmap tracking for used-pdpes Chris Wilson
2017-02-08 17:42   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 15/19] drm/i915: Remove bitmap tracking for used-pml4 Chris Wilson
2017-02-08 17:47   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 16/19] drm/i915: Remove superfluous posting reads after clear GGTT Chris Wilson
2017-02-08 17:48   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 17/19] drm/i915: Always mark the PDP as dirty when altered Chris Wilson
2017-02-08 17:53   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 18/19] drm/i915: Remove defunct GTT tracepoints Chris Wilson
2017-02-08 18:01   ` Matthew Auld
2017-02-02 15:02 ` [PATCH 19/19] drm/i915: Remove unused ppgtt->enable() Chris Wilson
2017-02-03 13:04   ` Joonas Lahtinen
2017-02-02 17:54 ` ✓ Fi.CI.BAT: success for series starting with [01/19] drm/i915: Micro-optimise i915_get_ggtt_vma_pages() Patchwork
2017-02-07 15:30 ` [PATCH 01/19] " Mika Kuoppala

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.