From: Daniel Vetter <daniel@ffwll.ch>
To: Michel Thierry <michel.thierry@intel.com>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH v2 14/24] drm/i915: Finish gen6/7 dynamic page table allocation
Date: Mon, 5 Jan 2015 15:45:10 +0100 [thread overview]
Message-ID: <20150105144509.GC2711@phenom.ffwll.local> (raw)
In-Reply-To: <1419354987-4622-15-git-send-email-michel.thierry@intel.com>
On Tue, Dec 23, 2014 at 05:16:17PM +0000, Michel Thierry wrote:
> From: Ben Widawsky <benjamin.widawsky@intel.com>
>
> This patch continues on the idea from the previous patch. From here on,
> in the steady state, PDEs are all pointing to the scratch page table (as
> recommended in the spec). When an object is allocated in the VA range,
> the code will determine if we need to allocate a page for the page
> table. Similarly when the object is destroyed, we will remove, and free
> the page table pointing the PDE back to the scratch page.
>
> Following patches will work to unify the code a bit as we bring in GEN8
> support. GEN6 and GEN8 are different enough that I had a hard time to
> get to this point with as much common code as I do.
>
> The aliasing PPGTT must pre-allocate all of the page tables. There are a
> few reasons for this. Two trivial ones: aliasing ppgtt goes through the
> ggtt paths, so it's hard to maintain, we currently do not restore the
> default context (assuming the previous force reload is indeed
> necessary). Most importantly though, the only way (it seems from
> empirical evidence) to invalidate the CS TLBs on non-render ring is to
> either use ring sync (which requires actually stopping the rings in
> order to synchronize when the sync completes vs. where you are in
> execution), or to reload DCLV. Since without full PPGTT we do not ever
> reload the DCLV register, there is no good way to achieve this. The
> simplest solution is just to not support dynamic page table
> creation/destruction in the aliasing PPGTT.
>
> We could always reload DCLV, but this seems like quite a bit of excess
> overhead only to save at most 2MB-4k of memory for the aliasing PPGTT
> page tables.
>
> v2: Make the page table bitmap declared inside the function (Chris)
> Simplify the way scratching address space works.
> Move the alloc/teardown tracepoints up a level in the call stack so that
> both all implementations get the trace.
>
> v3: Updated trace event to spit out a name
>
> v4: Aliasing ppgtt is now initialized differently (in setup global gtt)
>
> v5: Rebase to latest code. Also removed unnecessary aliasing ppgtt check for
> trace, as it is no longer possible after the PPGTT cleanup patch series
> of a couple of months ago (Daniel).
>
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Signed-off-by: Ben Widawsky <ben@bwidawsk.net>
> Signed-off-by: Michel Thierry <michel.thierry@intel.com> (v4+)
The tracepoints should be split into a separate patch. Although the
teardown stuff will likely disappear I guess ...
Two more comments below.
-Daniel
> ---
> drivers/gpu/drm/i915/i915_debugfs.c | 3 +-
> drivers/gpu/drm/i915/i915_gem.c | 2 +
> drivers/gpu/drm/i915/i915_gem_gtt.c | 128 ++++++++++++++++++++++++++++++++----
> drivers/gpu/drm/i915/i915_trace.h | 115 ++++++++++++++++++++++++++++++++
> 4 files changed, 236 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 60f91bc..0f63076 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -2149,6 +2149,8 @@ static void gen6_ppgtt_info(struct seq_file *m, struct drm_device *dev)
> seq_printf(m, "PP_DIR_BASE_READ: 0x%08x\n", I915_READ(RING_PP_DIR_BASE_READ(ring)));
> seq_printf(m, "PP_DIR_DCLV: 0x%08x\n", I915_READ(RING_PP_DIR_DCLV(ring)));
> }
> + seq_printf(m, "ECOCHK: 0x%08x\n\n", I915_READ(GAM_ECOCHK));
> +
> if (dev_priv->mm.aliasing_ppgtt) {
> struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
>
> @@ -2165,7 +2167,6 @@ static void gen6_ppgtt_info(struct seq_file *m, struct drm_device *dev)
> get_pid_task(file->pid, PIDTYPE_PID)->comm);
> idr_for_each(&file_priv->context_idr, per_file_ctx, m);
> }
> - seq_printf(m, "ECOCHK: 0x%08x\n", I915_READ(GAM_ECOCHK));
> }
>
> static int i915_ppgtt_info(struct seq_file *m, void *data)
> diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
> index 5d52990..1649fb2 100644
> --- a/drivers/gpu/drm/i915/i915_gem.c
> +++ b/drivers/gpu/drm/i915/i915_gem.c
> @@ -3599,6 +3599,8 @@ search_free:
>
> /* allocate before insert / bind */
> if (vma->vm->allocate_va_range) {
> + trace_i915_va_alloc(vma->vm, vma->node.start, vma->node.size,
> + VM_TO_TRACE_NAME(vma->vm));
> ret = vma->vm->allocate_va_range(vma->vm,
> vma->node.start,
> vma->node.size);
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index 54c7ca7..32a355a 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -1138,10 +1138,47 @@ static void gen6_ppgtt_unmap_pages(struct i915_hw_ppgtt *ppgtt)
> static int gen6_alloc_va_range(struct i915_address_space *vm,
> uint64_t start, uint64_t length)
> {
> + DECLARE_BITMAP(new_page_tables, GEN6_PPGTT_PD_ENTRIES);
> + struct drm_device *dev = vm->dev;
> + struct drm_i915_private *dev_priv = dev->dev_private;
> struct i915_hw_ppgtt *ppgtt =
> container_of(vm, struct i915_hw_ppgtt, base);
> struct i915_pagetab *pt;
> + const uint32_t start_save = start, length_save = length;
> uint32_t pde, temp;
> + int ret;
> +
> + BUG_ON(upper_32_bits(start));
> +
> + bitmap_zero(new_page_tables, GEN6_PPGTT_PD_ENTRIES);
> +
> + /* The allocation is done in two stages so that we can bail out with
> + * minimal amount of pain. The first stage finds new page tables that
> + * need allocation. The second stage marks use ptes within the page
> + * tables.
> + */
If we drop the bitmask tracking we could massively simplify this -
checking just the various pt pointers should be enough?
> + gen6_for_each_pde(pt, &ppgtt->pd, start, length, temp, pde) {
> + if (pt != ppgtt->scratch_pt) {
> + WARN_ON(bitmap_empty(pt->used_ptes, I915_PPGTT_PT_ENTRIES));
> + continue;
> + }
> +
> + /* We've already allocated a page table */
> + WARN_ON(!bitmap_empty(pt->used_ptes, I915_PPGTT_PT_ENTRIES));
> +
> + pt = alloc_pt_single(dev);
> + if (IS_ERR(pt)) {
> + ret = PTR_ERR(pt);
> + goto unwind_out;
> + }
> +
> + ppgtt->pd.page_tables[pde] = pt;
> + set_bit(pde, new_page_tables);
> + trace_i915_pagetable_alloc(vm, pde, start, GEN6_PDE_SHIFT);
> + }
> +
> + start = start_save;
> + length = length_save;
>
> gen6_for_each_pde(pt, &ppgtt->pd, start, length, temp, pde) {
> int j;
> @@ -1159,12 +1196,35 @@ static int gen6_alloc_va_range(struct i915_address_space *vm,
> }
> }
>
> - bitmap_or(pt->used_ptes, pt->used_ptes, tmp_bitmap,
> + if (test_and_clear_bit(pde, new_page_tables))
> + gen6_write_pdes(&ppgtt->pd, pde, pt);
> +
> + trace_i915_pagetable_map(vm, pde, pt,
> + gen6_pte_index(start),
> + gen6_pte_count(start, length),
> + I915_PPGTT_PT_ENTRIES);
> + bitmap_or(pt->used_ptes, tmp_bitmap, pt->used_ptes,
> I915_PPGTT_PT_ENTRIES);
> }
>
> + WARN_ON(!bitmap_empty(new_page_tables, GEN6_PPGTT_PD_ENTRIES));
> +
> + /* Make sure write is complete before other code can use this page
> + * table. Also require for WC mapped PTEs */
> + readl(dev_priv->gtt.gsm);
> +
> ppgtt_invalidate_tlbs(vm);
> return 0;
> +
> +unwind_out:
> + for_each_set_bit(pde, new_page_tables, GEN6_PPGTT_PD_ENTRIES) {
> + struct i915_pagetab *pt = ppgtt->pd.page_tables[pde];
> + ppgtt->pd.page_tables[pde] = NULL;
> + free_pt_single(pt, vm->dev);
> + }
> +
> + ppgtt_invalidate_tlbs(vm);
> + return ret;
> }
>
> static void gen6_teardown_va_range(struct i915_address_space *vm,
> @@ -1176,8 +1236,27 @@ static void gen6_teardown_va_range(struct i915_address_space *vm,
> uint32_t pde, temp;
>
> gen6_for_each_pde(pt, &ppgtt->pd, start, length, temp, pde) {
> +
> + if (WARN(pt == ppgtt->scratch_pt,
> + "Tried to teardown scratch page vm %p. pde %u: %llx-%llx\n",
> + vm, pde, start, start + length))
> + continue;
> +
> + trace_i915_pagetable_unmap(vm, pde, pt,
> + gen6_pte_index(start),
> + gen6_pte_count(start, length),
> + I915_PPGTT_PT_ENTRIES);
> +
> bitmap_clear(pt->used_ptes, gen6_pte_index(start),
> gen6_pte_count(start, length));
> +
> + if (bitmap_empty(pt->used_ptes, I915_PPGTT_PT_ENTRIES)) {
> + trace_i915_pagetable_destroy(vm, pde,
> + start & GENMASK_ULL(63, GEN6_PDE_SHIFT),
> + GEN6_PDE_SHIFT);
> + gen6_write_pdes(&ppgtt->pd, pde, ppgtt->scratch_pt);
> + ppgtt->pd.page_tables[pde] = ppgtt->scratch_pt;
> + }
> }
>
> ppgtt_invalidate_tlbs(vm);
> @@ -1187,9 +1266,13 @@ static void gen6_ppgtt_free(struct i915_hw_ppgtt *ppgtt)
> {
> int i;
>
> - for (i = 0; i < ppgtt->num_pd_entries; i++)
> - free_pt_single(ppgtt->pd.page_tables[i], ppgtt->base.dev);
> + for (i = 0; i < ppgtt->num_pd_entries; i++) {
> + struct i915_pagetab *pt = ppgtt->pd.page_tables[i];
> + if (pt != ppgtt->scratch_pt)
> + free_pt_single(ppgtt->pd.page_tables[i], ppgtt->base.dev);
> + }
>
> + /* Consider putting this as part of pd free. */
> free_pt_scratch(ppgtt->scratch_pt, ppgtt->base.dev);
> free_pd_single(&ppgtt->pd);
> }
> @@ -1254,7 +1337,7 @@ err_out:
> return ret;
> }
>
> -static int gen6_ppgtt_alloc(struct i915_hw_ppgtt *ppgtt)
> +static int gen6_ppgtt_alloc(struct i915_hw_ppgtt *ppgtt, bool preallocate_pt)
Imo it would be clearer to move the pt preallocation for alising ppgtt
into the ppgtt_init function. Makes for a bit a bigger diff, but will
result in less convoluted control flow since we should end up in a nice
if (alising)
/* create all pts */
else
/* allocate&use scratch_pt */
Aside: Should we only allocate the scratch_pt for !aliasing?
> {
> int ret;
>
> @@ -1262,10 +1345,14 @@ static int gen6_ppgtt_alloc(struct i915_hw_ppgtt *ppgtt)
> if (ret)
> return ret;
>
> + if (!preallocate_pt)
> + return 0;
> +
> ret = alloc_pt_range(&ppgtt->pd, 0, ppgtt->num_pd_entries,
> ppgtt->base.dev);
>
> if (ret) {
> + free_pt_scratch(ppgtt->scratch_pt, ppgtt->base.dev);
> drm_mm_remove_node(&ppgtt->node);
> return ret;
> }
> @@ -1273,7 +1360,17 @@ static int gen6_ppgtt_alloc(struct i915_hw_ppgtt *ppgtt)
> return 0;
> }
>
> -static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt)
> +static void gen6_scratch_va_range(struct i915_hw_ppgtt *ppgtt,
> + uint64_t start, uint64_t length)
> +{
> + struct i915_pagetab *unused;
> + uint32_t pde, temp;
> +
> + gen6_for_each_pde(unused, &ppgtt->pd, start, length, temp, pde)
> + ppgtt->pd.page_tables[pde] = ppgtt->scratch_pt;
> +}
> +
> +static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt, bool aliasing)
> {
> struct drm_device *dev = ppgtt->base.dev;
> struct drm_i915_private *dev_priv = dev->dev_private;
> @@ -1289,7 +1386,7 @@ static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt)
> } else
> BUG();
>
> - ret = gen6_ppgtt_alloc(ppgtt);
> + ret = gen6_ppgtt_alloc(ppgtt, aliasing);
> if (ret)
> return ret;
>
> @@ -1308,6 +1405,9 @@ static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt)
> ppgtt->pd_addr = (gen6_gtt_pte_t __iomem *)dev_priv->gtt.gsm +
> ppgtt->pd.pd_offset / sizeof(gen6_gtt_pte_t);
>
> + if (!aliasing)
> + gen6_scratch_va_range(ppgtt, 0, ppgtt->base.total);
> +
> gen6_write_page_range(dev_priv, &ppgtt->pd, 0, ppgtt->base.total);
>
> DRM_DEBUG_DRIVER("Allocated pde space (%ldM) at GTT entry: %lx\n",
> @@ -1320,7 +1420,8 @@ static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt)
> return 0;
> }
>
> -static int __hw_ppgtt_init(struct drm_device *dev, struct i915_hw_ppgtt *ppgtt)
> +static int __hw_ppgtt_init(struct drm_device *dev, struct i915_hw_ppgtt *ppgtt,
> + bool aliasing)
> {
> struct drm_i915_private *dev_priv = dev->dev_private;
>
> @@ -1328,7 +1429,7 @@ static int __hw_ppgtt_init(struct drm_device *dev, struct i915_hw_ppgtt *ppgtt)
> ppgtt->base.scratch = dev_priv->gtt.base.scratch;
>
> if (INTEL_INFO(dev)->gen < 8)
> - return gen6_ppgtt_init(ppgtt);
> + return gen6_ppgtt_init(ppgtt, aliasing);
> else
> return gen8_ppgtt_init(ppgtt, dev_priv->gtt.base.total);
> }
> @@ -1337,7 +1438,7 @@ int i915_ppgtt_init(struct drm_device *dev, struct i915_hw_ppgtt *ppgtt)
> struct drm_i915_private *dev_priv = dev->dev_private;
> int ret = 0;
>
> - ret = __hw_ppgtt_init(dev, ppgtt);
> + ret = __hw_ppgtt_init(dev, ppgtt, false);
> if (ret == 0) {
> kref_init(&ppgtt->ref);
> drm_mm_init(&ppgtt->base.mm, ppgtt->base.start,
> @@ -1445,9 +1546,14 @@ static void ppgtt_unbind_vma(struct i915_vma *vma)
> vma->node.start,
> vma->obj->base.size,
> true);
> - if (vma->vm->teardown_va_range)
> + if (vma->vm->teardown_va_range) {
> + trace_i915_va_teardown(vma->vm,
> + vma->node.start, vma->node.size,
> + VM_TO_TRACE_NAME(vma->vm));
> +
> vma->vm->teardown_va_range(vma->vm,
> vma->node.start, vma->node.size);
> + }
> }
>
> extern int intel_iommu_gfx_mapped;
> @@ -1963,7 +2069,7 @@ static int i915_gem_setup_global_gtt(struct drm_device *dev,
> if (!ppgtt)
> return -ENOMEM;
>
> - ret = __hw_ppgtt_init(dev, ppgtt);
> + ret = __hw_ppgtt_init(dev, ppgtt, true);
> if (ret != 0)
> return ret;
>
> diff --git a/drivers/gpu/drm/i915/i915_trace.h b/drivers/gpu/drm/i915/i915_trace.h
> index f004d3d..0b617c9 100644
> --- a/drivers/gpu/drm/i915/i915_trace.h
> +++ b/drivers/gpu/drm/i915/i915_trace.h
> @@ -156,6 +156,121 @@ TRACE_EVENT(i915_vma_unbind,
> __entry->obj, __entry->offset, __entry->size, __entry->vm)
> );
>
> +#define VM_TO_TRACE_NAME(vm) \
> + (i915_is_ggtt(vm) ? "GGTT" : \
> + "Private VM")
> +
> +DECLARE_EVENT_CLASS(i915_va,
> + TP_PROTO(struct i915_address_space *vm, u64 start, u64 length, const char *name),
> + TP_ARGS(vm, start, length, name),
> +
> + TP_STRUCT__entry(
> + __field(struct i915_address_space *, vm)
> + __field(u64, start)
> + __field(u64, end)
> + __string(name, name)
> + ),
> +
> + TP_fast_assign(
> + __entry->vm = vm;
> + __entry->start = start;
> + __entry->end = start + length;
> + __assign_str(name, name);
> + ),
> +
> + TP_printk("vm=%p (%s), 0x%llx-0x%llx",
> + __entry->vm, __get_str(name), __entry->start, __entry->end)
> +);
> +
> +DEFINE_EVENT(i915_va, i915_va_alloc,
> + TP_PROTO(struct i915_address_space *vm, u64 start, u64 length, const char *name),
> + TP_ARGS(vm, start, length, name)
> +);
> +
> +DEFINE_EVENT(i915_va, i915_va_teardown,
> + TP_PROTO(struct i915_address_space *vm, u64 start, u64 length, const char *name),
> + TP_ARGS(vm, start, length, name)
> +);
> +
> +DECLARE_EVENT_CLASS(i915_pagetable,
> + TP_PROTO(struct i915_address_space *vm, u32 pde, u64 start, u64 pde_shift),
> + TP_ARGS(vm, pde, start, pde_shift),
> +
> + TP_STRUCT__entry(
> + __field(struct i915_address_space *, vm)
> + __field(u32, pde)
> + __field(u64, start)
> + __field(u64, end)
> + ),
> +
> + TP_fast_assign(
> + __entry->vm = vm;
> + __entry->pde = pde;
> + __entry->start = start;
> + __entry->end = (start + (1ULL << pde_shift)) & ~((1ULL << pde_shift)-1);
> + ),
> +
> + TP_printk("vm=%p, pde=%d (0x%llx-0x%llx)",
> + __entry->vm, __entry->pde, __entry->start, __entry->end)
> +);
> +
> +DEFINE_EVENT(i915_pagetable, i915_pagetable_alloc,
> + TP_PROTO(struct i915_address_space *vm, u32 pde, u64 start, u64 pde_shift),
> + TP_ARGS(vm, pde, start, pde_shift)
> +);
> +
> +DEFINE_EVENT(i915_pagetable, i915_pagetable_destroy,
> + TP_PROTO(struct i915_address_space *vm, u32 pde, u64 start, u64 pde_shift),
> + TP_ARGS(vm, pde, start, pde_shift)
> +);
> +
> +/* Avoid extra math because we only support two sizes. The format is defined by
> + * bitmap_scnprintf. Each 32 bits is 8 HEX digits followed by comma */
> +#define TRACE_PT_SIZE(bits) \
> + ((((bits) == 1024) ? 288 : 144) + 1)
> +
> +DECLARE_EVENT_CLASS(i915_pagetable_update,
> + TP_PROTO(struct i915_address_space *vm, u32 pde,
> + struct i915_pagetab *pt, u32 first, u32 len, size_t bits),
> + TP_ARGS(vm, pde, pt, first, len, bits),
> +
> + TP_STRUCT__entry(
> + __field(struct i915_address_space *, vm)
> + __field(u32, pde)
> + __field(u32, first)
> + __field(u32, last)
> + __dynamic_array(char, cur_ptes, TRACE_PT_SIZE(bits))
> + ),
> +
> + TP_fast_assign(
> + __entry->vm = vm;
> + __entry->pde = pde;
> + __entry->first = first;
> + __entry->last = first + len;
> +
> + bitmap_scnprintf(__get_str(cur_ptes),
> + TRACE_PT_SIZE(bits),
> + pt->used_ptes,
> + bits);
> + ),
> +
> + TP_printk("vm=%p, pde=%d, updating %u:%u\t%s",
> + __entry->vm, __entry->pde, __entry->last, __entry->first,
> + __get_str(cur_ptes))
> +);
> +
> +DEFINE_EVENT(i915_pagetable_update, i915_pagetable_map,
> + TP_PROTO(struct i915_address_space *vm, u32 pde,
> + struct i915_pagetab *pt, u32 first, u32 len, size_t bits),
> + TP_ARGS(vm, pde, pt, first, len, bits)
> +);
> +
> +DEFINE_EVENT(i915_pagetable_update, i915_pagetable_unmap,
> + TP_PROTO(struct i915_address_space *vm, u32 pde,
> + struct i915_pagetab *pt, u32 first, u32 len, size_t bits),
> + TP_ARGS(vm, pde, pt, first, len, bits)
> +);
> +
> TRACE_EVENT(i915_gem_object_change_domain,
> TP_PROTO(struct drm_i915_gem_object *obj, u32 old_read, u32 old_write),
> TP_ARGS(obj, old_read, old_write),
> --
> 2.1.1
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2015-01-05 14:45 UTC|newest]
Thread overview: 229+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-12-18 17:09 [PATCH 00/24] PPGTT dynamic page allocations Michel Thierry
2014-12-18 17:09 ` [PATCH 01/24] drm/i915: Add some extra guards in evict_vm Michel Thierry
2014-12-18 17:09 ` [PATCH 02/24] drm/i915/trace: Fix offsets for 64b Michel Thierry
2014-12-18 17:10 ` [PATCH 03/24] drm/i915: Rename to GEN8_LEGACY_PDPES Michel Thierry
2014-12-18 20:40 ` Daniel Vetter
2014-12-18 20:44 ` Daniel Vetter
2014-12-19 12:32 ` Dave Gordon
2014-12-19 13:24 ` Daniel Vetter
2014-12-18 17:10 ` [PATCH 04/24] drm/i915: Setup less PPGTT on failed pagedir Michel Thierry
2014-12-18 17:10 ` [PATCH 05/24] drm/i915/gen8: Un-hardcode number of page directories Michel Thierry
2014-12-18 17:10 ` [PATCH 06/24] drm/i915: Range clearing is PPGTT agnostic Michel Thierry
2014-12-18 17:10 ` [PATCH 07/24] drm/i915: page table abstractions Michel Thierry
2014-12-18 17:10 ` [PATCH 08/24] drm/i915: Complete page table structures Michel Thierry
2014-12-18 17:10 ` [PATCH 09/24] drm/i915: Create page table allocators Michel Thierry
2014-12-18 17:10 ` [PATCH 10/24] drm/i915: Track GEN6 page table usage Michel Thierry
2014-12-18 21:06 ` Daniel Vetter
2014-12-18 17:10 ` [PATCH 11/24] drm/i915: Extract context switch skip logic Michel Thierry
2014-12-18 20:54 ` Daniel Vetter
2014-12-18 17:10 ` [PATCH 12/24] drm/i915: Track page table reload need Michel Thierry
2014-12-18 21:08 ` Daniel Vetter
2014-12-18 17:10 ` [PATCH 13/24] drm/i915: Initialize all contexts Michel Thierry
2014-12-18 17:10 ` [PATCH 14/24] drm/i915: Finish gen6/7 dynamic page table allocation Michel Thierry
2014-12-18 21:12 ` Daniel Vetter
2014-12-18 17:10 ` [PATCH 15/24] drm/i915/bdw: Use dynamic allocation idioms on free Michel Thierry
2014-12-18 17:10 ` [PATCH 16/24] drm/i915/bdw: pagedirs rework allocation Michel Thierry
2014-12-18 17:10 ` [PATCH 17/24] drm/i915/bdw: pagetable allocation rework Michel Thierry
2014-12-18 17:10 ` [PATCH 18/24] drm/i915/bdw: Update pdp switch and point unused PDPs to scratch page Michel Thierry
2014-12-18 17:10 ` [PATCH 19/24] drm/i915: num_pd_pages/num_pd_entries isn't useful Michel Thierry
2014-12-18 17:10 ` [PATCH 20/24] drm/i915: Extract PPGTT param from pagedir alloc Michel Thierry
2014-12-18 17:10 ` [PATCH 21/24] drm/i915/bdw: Split out mappings Michel Thierry
2014-12-18 17:10 ` [PATCH 22/24] drm/i915/bdw: begin bitmap tracking Michel Thierry
2014-12-18 17:10 ` [PATCH 23/24] drm/i915/bdw: Dynamic page table allocations Michel Thierry
2014-12-18 17:10 ` [PATCH 24/24] drm/i915/bdw: Dynamic page table allocations in lrc mode Michel Thierry
2014-12-18 21:16 ` [PATCH 00/24] PPGTT dynamic page allocations Daniel Vetter
2014-12-19 8:31 ` Chris Wilson
2014-12-19 8:37 ` Daniel Vetter
2014-12-19 8:50 ` Chris Wilson
2014-12-19 10:13 ` Daniel Vetter
2014-12-19 12:35 ` Michel Thierry
2014-12-19 13:10 ` Chris Wilson
2014-12-19 13:29 ` Daniel Vetter
2014-12-19 13:36 ` Chris Wilson
2014-12-19 19:08 ` Chris Wilson
2014-12-23 17:16 ` [PATCH v2 " Michel Thierry
2014-12-23 17:16 ` [PATCH v2 01/24] drm/i915: Add some extra guards in evict_vm Michel Thierry
2015-01-05 13:39 ` Daniel Vetter
2014-12-23 17:16 ` [PATCH v2 02/24] drm/i915/trace: Fix offsets for 64b Michel Thierry
2014-12-23 17:16 ` [PATCH v2 03/24] drm/i915: Rename to GEN8_LEGACY_PDPES Michel Thierry
2014-12-23 17:16 ` [PATCH v2 04/24] drm/i915: Setup less PPGTT on failed pagedir Michel Thierry
2014-12-23 17:16 ` [PATCH v2 05/24] drm/i915/gen8: Un-hardcode number of page directories Michel Thierry
2014-12-23 17:16 ` [PATCH v2 06/24] drm/i915: Range clearing is PPGTT agnostic Michel Thierry
2014-12-23 17:16 ` [PATCH v2 07/24] drm/i915: page table abstractions Michel Thierry
2015-01-05 13:47 ` Daniel Vetter
2014-12-23 17:16 ` [PATCH v2 08/24] drm/i915: Complete page table structures Michel Thierry
2014-12-23 17:16 ` [PATCH v2 09/24] drm/i915: Create page table allocators Michel Thierry
2014-12-23 17:16 ` [PATCH v2 10/24] drm/i915: Track GEN6 page table usage Michel Thierry
2015-01-05 14:29 ` Daniel Vetter
2014-12-23 17:16 ` [PATCH v2 11/24] drm/i915: Extract context switch skip and pd load logic Michel Thierry
2015-01-05 14:31 ` Daniel Vetter
2014-12-23 17:16 ` [PATCH v2 12/24] drm/i915: Track page table reload need Michel Thierry
2015-01-05 14:36 ` Daniel Vetter
2014-12-23 17:16 ` [PATCH v2 13/24] drm/i915: Initialize all contexts Michel Thierry
2014-12-23 17:16 ` [PATCH v2 14/24] drm/i915: Finish gen6/7 dynamic page table allocation Michel Thierry
2015-01-05 14:45 ` Daniel Vetter [this message]
2015-01-13 11:53 ` Michel Thierry
2015-01-13 22:09 ` Daniel Vetter
2014-12-23 17:16 ` [PATCH v2 15/24] drm/i915/bdw: Use dynamic allocation idioms on free Michel Thierry
2014-12-23 17:16 ` [PATCH v2 16/24] drm/i915/bdw: pagedirs rework allocation Michel Thierry
2014-12-23 17:16 ` [PATCH v2 17/24] drm/i915/bdw: pagetable allocation rework Michel Thierry
2014-12-23 17:16 ` [PATCH v2 18/24] drm/i915/bdw: Update pdp switch and point unused PDPs to scratch page Michel Thierry
2014-12-23 17:16 ` [PATCH v2 19/24] drm/i915: num_pd_pages/num_pd_entries isn't useful Michel Thierry
2014-12-23 17:16 ` [PATCH v2 20/24] drm/i915: Extract PPGTT param from pagedir alloc Michel Thierry
2014-12-23 17:16 ` [PATCH v2 21/24] drm/i915/bdw: Split out mappings Michel Thierry
2014-12-23 17:16 ` [PATCH v2 22/24] drm/i915/bdw: begin bitmap tracking Michel Thierry
2014-12-23 17:16 ` [PATCH v2 23/24] drm/i915/bdw: Dynamic page table allocations Michel Thierry
2015-01-05 14:52 ` Daniel Vetter
2014-12-23 17:16 ` [PATCH v2 24/24] drm/i915/bdw: Dynamic page table allocations in lrc mode Michel Thierry
2015-01-05 14:59 ` Daniel Vetter
2015-01-05 14:57 ` [PATCH v2 00/24] PPGTT dynamic page allocations Daniel Vetter
2015-01-13 11:52 ` [PATCH v3 00/25] " Michel Thierry
2015-01-13 11:52 ` [PATCH v3 01/25] drm/i915/trace: Fix offsets for 64b Michel Thierry
2015-01-13 11:52 ` [PATCH v3 02/25] drm/i915: Rename to GEN8_LEGACY_PDPES Michel Thierry
2015-01-13 11:52 ` [PATCH v3 03/25] drm/i915: Setup less PPGTT on failed page_directory Michel Thierry
2015-01-13 11:52 ` [PATCH v3 04/25] drm/i915/gen8: Un-hardcode number of page directories Michel Thierry
2015-01-13 11:52 ` [PATCH v3 05/25] drm/i915: Range clearing is PPGTT agnostic Michel Thierry
2015-01-13 11:52 ` [PATCH v3 06/25] drm/i915: page table abstractions Michel Thierry
2015-01-13 11:52 ` [PATCH v3 07/25] drm/i915: Complete page table structures Michel Thierry
2015-01-13 11:52 ` [PATCH v3 08/25] drm/i915: Create page table allocators Michel Thierry
2015-01-13 11:52 ` [PATCH v3 09/25] drm/i915: Plumb drm_device through page tables operations Michel Thierry
2015-01-13 11:52 ` [PATCH v3 10/25] drm/i915: Track GEN6 page table usage Michel Thierry
2015-01-13 11:52 ` [PATCH v3 11/25] drm/i915: Extract context switch skip and pd load logic Michel Thierry
2015-01-13 11:52 ` [PATCH v3 12/25] drm/i915: Track page table reload need Michel Thierry
2015-01-13 11:52 ` [PATCH v3 13/25] drm/i915: Initialize all contexts Michel Thierry
2015-01-13 11:52 ` [PATCH v3 14/25] drm/i915: Finish gen6/7 dynamic page table allocation Michel Thierry
2015-01-13 11:52 ` [PATCH v3 15/25] drm/i915: Add dynamic page trace events Michel Thierry
2015-01-13 11:52 ` [PATCH v3 16/25] drm/i915/bdw: Use dynamic allocation idioms on free Michel Thierry
2015-01-13 11:52 ` [PATCH v3 17/25] drm/i915/bdw: page directories rework allocation Michel Thierry
2015-01-13 11:52 ` [PATCH v3 18/25] drm/i915/bdw: pagetable allocation rework Michel Thierry
2015-01-13 11:52 ` [PATCH v3 19/25] drm/i915/bdw: Update pdp switch and point unused PDPs to scratch page Michel Thierry
2015-01-13 11:52 ` [PATCH v3 20/25] drm/i915: num_pd_pages/num_pd_entries isn't useful Michel Thierry
2015-01-13 11:52 ` [PATCH v3 21/25] drm/i915: Extract PPGTT param from page_directory alloc Michel Thierry
2015-01-13 11:52 ` [PATCH v3 22/25] drm/i915/bdw: Split out mappings Michel Thierry
2015-01-13 11:52 ` [PATCH v3 23/25] drm/i915/bdw: begin bitmap tracking Michel Thierry
2015-01-13 11:52 ` [PATCH v3 24/25] drm/i915/bdw: Dynamic page table allocations Michel Thierry
2015-01-13 11:52 ` [PATCH v3 25/25] drm/i915/bdw: Support dynamic pdp updates in lrc mode Michel Thierry
2015-01-22 17:01 ` [PATCH v4 00/24] PPGTT dynamic page allocations Michel Thierry
2015-01-22 17:01 ` [PATCH v4 01/24] drm/i915/trace: Fix offsets for 64b Michel Thierry
2015-01-27 12:16 ` Mika Kuoppala
2015-01-22 17:01 ` [PATCH v4 02/24] drm/i915: Rename to GEN8_LEGACY_PDPES Michel Thierry
2015-02-06 15:32 ` Mika Kuoppala
2015-01-22 17:01 ` [PATCH v4 03/24] drm/i915: Setup less PPGTT on failed page_directory Michel Thierry
2015-02-09 15:21 ` Mika Kuoppala
2015-01-22 17:01 ` [PATCH v4 04/24] drm/i915/gen8: Un-hardcode number of page directories Michel Thierry
2015-02-09 15:30 ` Mika Kuoppala
2015-02-09 16:33 ` Daniel Vetter
2015-01-22 17:01 ` [PATCH v4 05/24] drm/i915: page table abstractions Michel Thierry
2015-02-18 11:27 ` Mika Kuoppala
2015-02-23 15:39 ` Michel Thierry
2015-01-22 17:01 ` [PATCH v4 06/24] drm/i915: Complete page table structures Michel Thierry
2015-01-22 17:01 ` [PATCH v4 07/24] drm/i915: Create page table allocators Michel Thierry
2015-02-20 16:50 ` Mika Kuoppala
2015-02-23 15:39 ` Michel Thierry
2015-01-22 17:01 ` [PATCH v4 08/24] drm/i915: Plumb drm_device through page tables operations Michel Thierry
2015-01-22 17:01 ` [PATCH v4 09/24] drm/i915: Track GEN6 page table usage Michel Thierry
2015-02-20 16:41 ` Mika Kuoppala
2015-02-23 15:39 ` Michel Thierry
2015-01-22 17:01 ` [PATCH v4 10/24] drm/i915: Extract context switch skip and pd load logic Michel Thierry
2015-01-22 17:01 ` [PATCH v4 11/24] drm/i915: Track page table reload need Michel Thierry
2015-01-22 17:01 ` [PATCH v4 12/24] drm/i915: Initialize all contexts Michel Thierry
2015-01-22 17:01 ` [PATCH v4 13/24] drm/i915: Finish gen6/7 dynamic page table allocation Michel Thierry
2015-01-22 17:01 ` [PATCH v4 14/24] drm/i915: Add dynamic page trace events Michel Thierry
2015-01-22 17:01 ` [PATCH v4 15/24] drm/i915/bdw: Use dynamic allocation idioms on free Michel Thierry
2015-01-22 17:01 ` [PATCH v4 16/24] drm/i915/bdw: page directories rework allocation Michel Thierry
2015-01-22 17:01 ` [PATCH v4 17/24] drm/i915/bdw: pagetable allocation rework Michel Thierry
2015-01-22 17:01 ` [PATCH v4 18/24] drm/i915/bdw: Update pdp switch and point unused PDPs to scratch page Michel Thierry
2015-01-22 17:01 ` [PATCH v4 19/24] drm/i915: num_pd_pages/num_pd_entries isn't useful Michel Thierry
2015-01-22 17:01 ` [PATCH v4 20/24] drm/i915: Extract PPGTT param from page_directory alloc Michel Thierry
2015-01-22 17:01 ` [PATCH v4 21/24] drm/i915/bdw: Split out mappings Michel Thierry
2015-01-22 17:01 ` [PATCH v4 22/24] drm/i915/bdw: begin bitmap tracking Michel Thierry
2015-01-22 17:01 ` [PATCH v4 23/24] drm/i915/bdw: Dynamic page table allocations Michel Thierry
2015-01-22 17:01 ` [PATCH v4 24/24] drm/i915/bdw: Support dynamic pdp updates in lrc mode Michel Thierry
2015-02-23 15:44 ` [PATCH v5 00/32] PPGTT dynamic page allocations and 48b addressing Michel Thierry
2015-02-23 15:44 ` [PATCH v5 01/32] drm/i915: page table abstractions Michel Thierry
2015-02-24 11:14 ` [PATCH] " Michel Thierry
2015-02-24 12:03 ` Mika Kuoppala
2015-02-23 15:44 ` [PATCH v5 02/32] drm/i915: Complete page table structures Michel Thierry
2015-02-24 13:10 ` Mika Kuoppala
2015-02-23 15:44 ` [PATCH v5 03/32] drm/i915: Create page table allocators Michel Thierry
2015-02-24 13:56 ` Mika Kuoppala
2015-02-24 15:18 ` Michel Thierry
2015-02-23 15:44 ` [PATCH v5 04/32] drm/i915: Plumb drm_device through page tables operations Michel Thierry
2015-02-23 15:44 ` [PATCH v5 05/32] drm/i915: Track GEN6 page table usage Michel Thierry
2015-02-23 15:44 ` [PATCH v5 06/32] drm/i915: Extract context switch skip and pd load logic Michel Thierry
2015-02-23 15:44 ` [PATCH v5 07/32] drm/i915: Track page table reload need Michel Thierry
2015-02-23 15:44 ` [PATCH v5 08/32] drm/i915: Initialize all contexts Michel Thierry
2015-02-23 15:44 ` [PATCH v5 09/32] drm/i915: Finish gen6/7 dynamic page table allocation Michel Thierry
2015-02-23 15:44 ` [PATCH v5 10/32] drm/i915: Add dynamic page trace events Michel Thierry
2015-02-23 15:44 ` [PATCH v5 11/32] drm/i915/bdw: Use dynamic allocation idioms on free Michel Thierry
2015-02-23 15:44 ` [PATCH v5 12/32] drm/i915/bdw: page directories rework allocation Michel Thierry
2015-02-23 15:44 ` [PATCH v5 13/32] drm/i915/bdw: pagetable allocation rework Michel Thierry
2015-02-23 15:44 ` [PATCH v5 14/32] drm/i915/bdw: Update pdp switch and point unused PDPs to scratch page Michel Thierry
2015-02-23 15:44 ` [PATCH v5 15/32] drm/i915: num_pd_pages/num_pd_entries isn't useful Michel Thierry
2015-02-23 15:44 ` [PATCH v5 16/32] drm/i915: Extract PPGTT param from page_directory alloc Michel Thierry
2015-02-23 15:44 ` [PATCH v5 17/32] drm/i915/bdw: Split out mappings Michel Thierry
2015-02-23 15:44 ` [PATCH v5 18/32] drm/i915/bdw: begin bitmap tracking Michel Thierry
2015-02-23 15:44 ` [PATCH v5 19/32] drm/i915/bdw: Dynamic page table allocations Michel Thierry
2015-02-23 15:44 ` [PATCH v5 20/32] drm/i915/bdw: Support dynamic pdp updates in lrc mode Michel Thierry
2015-02-23 15:44 ` [PATCH v5 21/32] drm/i915/bdw: Make pdp allocation more dynamic Michel Thierry
2015-02-23 15:44 ` [PATCH v5 22/32] drm/i915/bdw: Abstract PDP usage Michel Thierry
2015-02-23 15:44 ` [PATCH v5 23/32] drm/i915/bdw: Add dynamic page trace events Michel Thierry
2015-02-23 15:44 ` [PATCH v5 24/32] drm/i915/bdw: Add ppgtt info for dynamic pages Michel Thierry
2015-02-23 15:44 ` [PATCH v5 25/32] drm/i915/bdw: implement alloc/free for 4lvl Michel Thierry
2015-02-23 15:44 ` [PATCH v5 26/32] drm/i915/bdw: Add 4 level switching infrastructure Michel Thierry
2015-02-23 15:44 ` [PATCH v5 27/32] drm/i915/bdw: Support 64 bit PPGTT in lrc mode Michel Thierry
2015-02-23 15:44 ` [PATCH v5 28/32] drm/i915/bdw: Generalize PTE writing for GEN8 PPGTT Michel Thierry
2015-02-23 15:44 ` [PATCH v5 29/32] drm/i915: Plumb sg_iter through va allocation ->maps Michel Thierry
2015-02-23 15:44 ` [PATCH v5 30/32] drm/i915/bdw: Add 4 level support in insert_entries and clear_range Michel Thierry
2015-02-23 15:44 ` [PATCH v5 31/32] drm/i915: Expand error state's address width to 64b Michel Thierry
2015-02-23 15:44 ` [PATCH v5 32/32] drm/i915/bdw: Flip the 48b switch Michel Thierry
2015-02-24 16:22 ` [PATCH v6 00/32] PPGTT dynamic page allocations and 48b addressing Michel Thierry
2015-02-24 16:22 ` [PATCH v6 01/32] drm/i915: page table abstractions Michel Thierry
2015-02-24 16:22 ` [PATCH v6 02/32] drm/i915: Complete page table structures Michel Thierry
2015-02-24 16:22 ` [PATCH v6 03/32] drm/i915: Create page table allocators Michel Thierry
2015-02-25 13:34 ` Mika Kuoppala
2015-03-02 18:57 ` Paulo Zanoni
2015-02-24 16:22 ` [PATCH v6 04/32] drm/i915: Plumb drm_device through page tables operations Michel Thierry
2015-02-25 14:52 ` Mika Kuoppala
2015-02-25 15:57 ` Daniel Vetter
2015-02-24 16:22 ` [PATCH v6 05/32] drm/i915: Track GEN6 page table usage Michel Thierry
2015-02-26 15:58 ` Mika Kuoppala
2015-03-10 11:19 ` Mika Kuoppala
2015-02-24 16:22 ` [PATCH v6 06/32] drm/i915: Extract context switch skip and pd load logic Michel Thierry
2015-02-27 11:46 ` Mika Kuoppala
2015-02-27 13:38 ` [PATCH] drm/i915: Extract context switch skip and add " Michel Thierry
2015-03-03 3:54 ` shuang.he
2015-03-05 14:37 ` Mika Kuoppala
2015-02-24 16:22 ` [PATCH v6 07/32] drm/i915: Track page table reload need Michel Thierry
2015-02-24 16:22 ` [PATCH v6 08/32] drm/i915: Initialize all contexts Michel Thierry
2015-02-27 13:40 ` [PATCH] " Michel Thierry
2015-03-20 10:38 ` Chris Wilson
2015-02-24 16:22 ` [PATCH v6 09/32] drm/i915: Finish gen6/7 dynamic page table allocation Michel Thierry
2015-02-24 16:22 ` [PATCH v6 10/32] drm/i915: Add dynamic page trace events Michel Thierry
2015-03-20 13:29 ` Mika Kuoppala
2015-02-24 16:22 ` [PATCH v6 11/32] drm/i915/bdw: Use dynamic allocation idioms on free Michel Thierry
2015-02-24 16:22 ` [PATCH v6 12/32] drm/i915/bdw: page directories rework allocation Michel Thierry
2015-02-24 16:22 ` [PATCH v6 13/32] drm/i915/bdw: pagetable allocation rework Michel Thierry
2015-02-24 16:22 ` [PATCH v6 14/32] drm/i915/bdw: Update pdp switch and point unused PDPs to scratch page Michel Thierry
2015-02-24 16:22 ` [PATCH v6 15/32] drm/i915: num_pd_pages/num_pd_entries isn't useful Michel Thierry
2015-02-24 16:22 ` [PATCH v6 16/32] drm/i915: Extract PPGTT param from page_directory alloc Michel Thierry
2015-02-24 16:22 ` [PATCH v6 17/32] drm/i915/bdw: Split out mappings Michel Thierry
2015-02-24 16:22 ` [PATCH v6 18/32] drm/i915/bdw: begin bitmap tracking Michel Thierry
2015-02-24 16:22 ` [PATCH v6 19/32] drm/i915/bdw: Dynamic page table allocations Michel Thierry
2015-02-24 16:22 ` [PATCH v6 20/32] drm/i915/bdw: Support dynamic pdp updates in lrc mode Michel Thierry
2015-02-24 16:22 ` [PATCH v6 21/32] drm/i915/bdw: Make pdp allocation more dynamic Michel Thierry
2015-02-24 16:22 ` [PATCH v6 22/32] drm/i915/bdw: Abstract PDP usage Michel Thierry
2015-02-24 16:22 ` [PATCH v6 23/32] drm/i915/bdw: Add dynamic page trace events Michel Thierry
2015-02-24 16:22 ` [PATCH v6 24/32] drm/i915/bdw: Add ppgtt info for dynamic pages Michel Thierry
2015-02-24 16:22 ` [PATCH v6 25/32] drm/i915/bdw: implement alloc/free for 4lvl Michel Thierry
2015-02-24 16:22 ` [PATCH v6 26/32] drm/i915/bdw: Add 4 level switching infrastructure Michel Thierry
2015-02-24 16:23 ` [PATCH v6 27/32] drm/i915/bdw: Support 64 bit PPGTT in lrc mode Michel Thierry
2015-02-24 16:23 ` [PATCH v6 28/32] drm/i915/bdw: Generalize PTE writing for GEN8 PPGTT Michel Thierry
2015-02-24 16:23 ` [PATCH v6 29/32] drm/i915: Plumb sg_iter through va allocation ->maps Michel Thierry
2015-02-24 16:23 ` [PATCH v6 30/32] drm/i915/bdw: Add 4 level support in insert_entries and clear_range Michel Thierry
2015-02-24 16:23 ` [PATCH v6 31/32] drm/i915: Expand error state's address width to 64b Michel Thierry
2015-02-24 16:23 ` [PATCH v6 32/32] drm/i915/bdw: Flip the 48b switch Michel Thierry
2015-02-24 20:31 ` [PATCH v6 00/32] PPGTT dynamic page allocations and 48b addressing Daniel Vetter
2015-02-25 10:55 ` Mika Kuoppala
2015-02-25 12:29 ` Michel Thierry
2015-02-25 14:20 ` Daniel Vetter
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=20150105144509.GC2711@phenom.ffwll.local \
--to=daniel@ffwll.ch \
--cc=intel-gfx@lists.freedesktop.org \
--cc=michel.thierry@intel.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox