From patchwork Wed May 31 18:52:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Matthew Auld X-Patchwork-Id: 9757967 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id DDDEB602BF for ; Wed, 31 May 2017 18:52:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CF6CB2834A for ; Wed, 31 May 2017 18:52:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C1DF22849E; Wed, 31 May 2017 18:52:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4F5CE2834A for ; Wed, 31 May 2017 18:52:30 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2DCAA6E2E7; Wed, 31 May 2017 18:52:28 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id D57656E2E2 for ; Wed, 31 May 2017 18:52:21 +0000 (UTC) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 31 May 2017 11:52:21 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos; i="5.39,275,1493708400"; d="scan'208"; a="1155033191" Received: from sgallagh-mobl1.ger.corp.intel.com (HELO mwahaha.ger.corp.intel.com) ([10.252.0.34]) by fmsmga001.fm.intel.com with ESMTP; 31 May 2017 11:52:20 -0700 From: Matthew Auld To: intel-gfx@lists.freedesktop.org Date: Wed, 31 May 2017 19:52:02 +0100 Message-Id: <20170531185210.29189-8-matthew.auld@intel.com> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20170531185210.29189-1-matthew.auld@intel.com> References: <20170531185210.29189-1-matthew.auld@intel.com> Subject: [Intel-gfx] [PATCH 07/15] drm/i915: pass mm.gtt_page_sizes to ppgtt insert_entries X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP In preparation for supporting huge-pages for the ppgtt, we need to know the details of mm.page_sizes at insertion time, such that we can we can easily determine the page sizes we are allowed to use. This is especially true for 64K where we can't just arbitrarily use it, since we require aligning/padding the vm space to 2M, which sometimes we can't enforce. Signed-off-by: Matthew Auld Cc: Joonas Lahtinen --- drivers/gpu/drm/i915/i915_gem_gtt.c | 24 ++++++++++++++++-------- drivers/gpu/drm/i915/i915_gem_gtt.h | 3 +++ drivers/gpu/drm/i915/selftests/i915_gem_gtt.c | 3 ++- drivers/gpu/drm/i915/selftests/mock_gtt.c | 1 + 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c index 0c1008a2bbda..935656802f09 100644 --- a/drivers/gpu/drm/i915/i915_gem_gtt.c +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c @@ -208,7 +208,8 @@ static int ppgtt_bind_vma(struct i915_vma *vma, pte_flags |= PTE_READ_ONLY; vma->vm->insert_entries(vma->vm, vma->pages, vma->node.start, - cache_level, pte_flags); + &vma->obj->mm.page_sizes, cache_level, + pte_flags); return 0; } @@ -909,6 +910,7 @@ gen8_ppgtt_insert_pte_entries(struct i915_hw_ppgtt *ppgtt, static void gen8_ppgtt_insert_3lvl(struct i915_address_space *vm, struct sg_table *pages, u64 start, + struct i915_page_sizes *page_sizes, enum i915_cache_level cache_level, u32 unused) { @@ -927,6 +929,7 @@ static void gen8_ppgtt_insert_3lvl(struct i915_address_space *vm, static void gen8_ppgtt_insert_4lvl(struct i915_address_space *vm, struct sg_table *pages, u64 start, + struct i915_page_sizes *page_sizes, enum i915_cache_level cache_level, u32 unused) { @@ -1623,6 +1626,7 @@ static void gen6_ppgtt_clear_range(struct i915_address_space *vm, static void gen6_ppgtt_insert_entries(struct i915_address_space *vm, struct sg_table *pages, u64 start, + struct i915_page_sizes *page_sizes, enum i915_cache_level cache_level, u32 flags) { @@ -2092,6 +2096,7 @@ static void gen8_ggtt_insert_page(struct i915_address_space *vm, static void gen8_ggtt_insert_entries(struct i915_address_space *vm, struct sg_table *st, u64 start, + struct i915_page_sizes *page_sizes, enum i915_cache_level level, u32 unused) { @@ -2139,6 +2144,7 @@ static void gen6_ggtt_insert_page(struct i915_address_space *vm, static void gen6_ggtt_insert_entries(struct i915_address_space *vm, struct sg_table *st, u64 start, + struct i915_page_sizes *page_sizes, enum i915_cache_level level, u32 flags) { @@ -2238,7 +2244,7 @@ static int bxt_vtd_ggtt_insert_entries__cb(void *_arg) { struct insert_entries *arg = _arg; - gen8_ggtt_insert_entries(arg->vm, arg->st, arg->start, arg->level, 0); + gen8_ggtt_insert_entries(arg->vm, arg->st, arg->start, 0, arg->level, 0); bxt_vtd_ggtt_wa(arg->vm); return 0; @@ -2247,6 +2253,7 @@ static int bxt_vtd_ggtt_insert_entries__cb(void *_arg) static void bxt_vtd_ggtt_insert_entries__BKL(struct i915_address_space *vm, struct sg_table *st, u64 start, + struct i915_page_sizes *page_sizes, enum i915_cache_level level, u32 unused) { @@ -2318,6 +2325,7 @@ static void i915_ggtt_insert_page(struct i915_address_space *vm, static void i915_ggtt_insert_entries(struct i915_address_space *vm, struct sg_table *pages, u64 start, + struct i915_page_sizes *page_sizes, enum i915_cache_level cache_level, u32 unused) { @@ -2353,7 +2361,7 @@ static int ggtt_bind_vma(struct i915_vma *vma, pte_flags |= PTE_READ_ONLY; intel_runtime_pm_get(i915); - vma->vm->insert_entries(vma->vm, vma->pages, vma->node.start, + vma->vm->insert_entries(vma->vm, vma->pages, vma->node.start, 0, cache_level, pte_flags); intel_runtime_pm_put(i915); @@ -2407,16 +2415,16 @@ static int aliasing_gtt_bind_vma(struct i915_vma *vma, goto err_pages; } - appgtt->base.insert_entries(&appgtt->base, - vma->pages, vma->node.start, + appgtt->base.insert_entries(&appgtt->base, vma->pages, + vma->node.start, + &vma->obj->mm.page_sizes, cache_level, pte_flags); } if (flags & I915_VMA_GLOBAL_BIND) { intel_runtime_pm_get(i915); - vma->vm->insert_entries(vma->vm, - vma->pages, vma->node.start, - cache_level, pte_flags); + vma->vm->insert_entries(vma->vm, vma->pages, vma->node.start, + 0, cache_level, pte_flags); intel_runtime_pm_put(i915); } diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h b/drivers/gpu/drm/i915/i915_gem_gtt.h index f8db231c28aa..d45729b9da0c 100644 --- a/drivers/gpu/drm/i915/i915_gem_gtt.h +++ b/drivers/gpu/drm/i915/i915_gem_gtt.h @@ -206,6 +206,8 @@ enum i915_cache_level; struct i915_vma; +struct i915_page_sizes; + struct i915_page_dma { struct page *page; union { @@ -320,6 +322,7 @@ struct i915_address_space { void (*insert_entries)(struct i915_address_space *vm, struct sg_table *st, u64 start, + struct i915_page_sizes *page_sizes, enum i915_cache_level cache_level, u32 flags); void (*cleanup)(struct i915_address_space *vm); diff --git a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c index 50710e3f1caa..81c0d6b87e68 100644 --- a/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c +++ b/drivers/gpu/drm/i915/selftests/i915_gem_gtt.c @@ -256,7 +256,8 @@ static int lowlevel_hole(struct drm_i915_private *i915, break; vm->insert_entries(vm, obj->mm.pages, addr, - I915_CACHE_NONE, 0); + &obj->mm.page_sizes, I915_CACHE_NONE, + 0); } count = n; diff --git a/drivers/gpu/drm/i915/selftests/mock_gtt.c b/drivers/gpu/drm/i915/selftests/mock_gtt.c index a61309c7cb3e..4d594eaf0b53 100644 --- a/drivers/gpu/drm/i915/selftests/mock_gtt.c +++ b/drivers/gpu/drm/i915/selftests/mock_gtt.c @@ -35,6 +35,7 @@ static void mock_insert_page(struct i915_address_space *vm, static void mock_insert_entries(struct i915_address_space *vm, struct sg_table *st, u64 start, + struct i915_page_sizes *page_sizes, enum i915_cache_level level, u32 flags) { }