These values are never quite useful for dynamic allocations of the page
tables. Getting rid of them will help prevent later confusion.

TODO: this probably needs to be earlier in the series

Signed-off-by: Ben Widawsky <b...@bwidawsk.net>
---
 drivers/gpu/drm/i915/i915_debugfs.c | 11 ++++-----
 drivers/gpu/drm/i915/i915_gem_gtt.c | 45 ++++++++++---------------------------
 drivers/gpu/drm/i915/i915_gem_gtt.h |  7 ++++--
 3 files changed, 21 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c 
b/drivers/gpu/drm/i915/i915_debugfs.c
index 47baf50..09a64e6 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -1813,13 +1813,12 @@ static int i915_swizzle_info(struct seq_file *m, void 
*data)
 
 static size_t gen6_ppgtt_count_pt_pages(struct i915_hw_ppgtt *ppgtt)
 {
-       struct i915_pagedir *pd = &ppgtt->pd;
-       struct i915_pagetab **pt = &pd->page_tables[0];
+       struct i915_pagetab *pt;
        size_t cnt = 0;
-       int i;
+       uint32_t useless;
 
-       for (i = 0; i < ppgtt->num_pd_entries; i++) {
-               if (pt[i] != ppgtt->scratch_pt)
+       gen6_for_all_pdes(pt, ppgtt, useless) {
+               if (pt != ppgtt->scratch_pt)
                        cnt++;
        }
 
@@ -1842,8 +1841,6 @@ static void gen8_ppgtt_info(struct seq_file *m, struct 
drm_device *dev, int verb
        if (!ppgtt)
                return;
 
-       seq_printf(m, "Page directories: %d\n", ppgtt->num_pd_pages);
-       seq_printf(m, "Page tables: %d\n", ppgtt->num_pd_entries);
        for_each_ring(ring, dev_priv, unused) {
                seq_printf(m, "%s\n", ring->name);
                for (i = 0; i < 4; i++) {
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 5875071..d8e0a62 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -609,22 +609,14 @@ static int gen8_ppgtt_alloc_pagedirs(struct 
i915_pagedirpo *pdp,
                pdp->pagedirs[pdpe] = alloc_pd_single(ppgtt->base.dev);
                if (IS_ERR(ppgtt->pdp.pagedirs[pdpe]))
                        goto unwind_out;
-
-               ppgtt->num_pd_pages++;
        }
 
-       BUG_ON(ppgtt->num_pd_pages > GEN8_LEGACY_PDPES);
-
        return 0;
 
 unwind_out:
-       while (pdpe--) {
+       while (pdpe--)
                free_pd_single(ppgtt->pdp.pagedirs[pdpe],
                               ppgtt->base.dev);
-               ppgtt->num_pd_pages--;
-       }
-
-       WARN_ON(ppgtt->num_pd_pages);
 
        return -ENOMEM;
 }
@@ -647,12 +639,8 @@ static int gen8_ppgtt_alloc(struct i915_hw_ppgtt *ppgtt,
                                                ppgtt->base.dev);
                if (ret)
                        goto err_out;
-
-               ppgtt->num_pd_entries += I915_PDES_PER_PD;
        }
 
-       BUG_ON(pdpe > ppgtt->num_pd_pages);
-
        return 0;
 
        /* TODO: Check this for all cases */
@@ -674,7 +662,6 @@ err_out:
 static int gen8_ppgtt_init(struct i915_hw_ppgtt *ppgtt, uint64_t size)
 {
        const int max_pdp = DIV_ROUND_UP(size, 1 << 30);
-       const int min_pt_pages = I915_PDES_PER_PD * max_pdp;
        int i, j, ret;
 
        if (size % (1<<30))
@@ -723,27 +710,21 @@ static int gen8_ppgtt_init(struct i915_hw_ppgtt *ppgtt, 
uint64_t size)
        ppgtt->base.insert_entries = gen8_ppgtt_insert_entries;
        ppgtt->base.cleanup = gen8_ppgtt_cleanup;
 
-       DRM_DEBUG_DRIVER("Allocated %d pages for page directories (%d 
wasted)\n",
-                        ppgtt->num_pd_pages, ppgtt->num_pd_pages - max_pdp);
-       DRM_DEBUG_DRIVER("Allocated %d pages for page tables (%lld wasted)\n",
-                        ppgtt->num_pd_entries,
-                        (ppgtt->num_pd_entries - min_pt_pages) + size % 
(1<<30));
        return 0;
 }
 
 static void gen6_dump_ppgtt(struct i915_hw_ppgtt *ppgtt, struct seq_file *m)
 {
        struct i915_address_space *vm = &ppgtt->base;
+       struct i915_pagetab *unused;
        gen6_gtt_pte_t scratch_pte;
        uint32_t pd_entry;
-       int pte, pde;
+       uint32_t  pte, pde, temp;
+       uint32_t start = ppgtt->base.start, length = ppgtt->base.total;
 
        scratch_pte = vm->pte_encode(vm->scratch.addr, I915_CACHE_LLC, true, 0);
 
-       seq_printf(m, "  VM %p (pd_offset %x-%x):\n", vm,
-                  ppgtt->pd.pd_offset,
-                  ppgtt->pd.pd_offset + ppgtt->num_pd_entries);
-       for (pde = 0; pde < ppgtt->num_pd_entries; pde++) {
+       gen6_for_each_pde(unused, &ppgtt->pd, start, length, temp, pde) {
                u32 expected;
                gen6_gtt_pte_t *pt_vaddr;
                dma_addr_t pt_addr = ppgtt->pd.page_tables[pde]->daddr;
@@ -1221,12 +1202,12 @@ static void gen6_teardown_va_range(struct 
i915_address_space *vm,
 
 static void gen6_ppgtt_free(struct i915_hw_ppgtt *ppgtt)
 {
-       int i;
+       struct i915_pagetab *pt;
+       uint32_t pde;
 
-       for (i = 0; i < ppgtt->num_pd_entries; i++) {
-               struct i915_pagetab *pt = ppgtt->pd.page_tables[i];
+       gen6_for_all_pdes(pt, ppgtt, pde) {
                if (pt != ppgtt->scratch_pt)
-                       free_pt_single(ppgtt->pd.page_tables[i], 
ppgtt->base.dev);
+                       free_pt_single(pt, ppgtt->base.dev);
        }
 
        /* Consider putting this as part of pd free. */
@@ -1287,7 +1268,6 @@ alloc:
        if (ppgtt->node.start < dev_priv->gtt.mappable_end)
                DRM_DEBUG("Forced to use aperture for PDEs\n");
 
-       ppgtt->num_pd_entries = I915_PDES_PER_PD;
        return 0;
 
 err_out:
@@ -1306,8 +1286,7 @@ static int gen6_ppgtt_alloc(struct i915_hw_ppgtt *ppgtt, 
bool preallocate_pt)
        if (!preallocate_pt)
                return 0;
 
-       ret = alloc_pt_range(&ppgtt->pd, 0, ppgtt->num_pd_entries,
-                            ppgtt->base.dev);
+       ret = alloc_pt_range(&ppgtt->pd, 0, I915_PDES_PER_PD, ppgtt->base.dev);
        if (ret) {
                free_pt_scratch(ppgtt->scratch_pt, ppgtt->base.dev);
                drm_mm_remove_node(&ppgtt->node);
@@ -1356,7 +1335,7 @@ static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt, 
bool aliasing)
        ppgtt->base.insert_entries = gen6_ppgtt_insert_entries;
        ppgtt->base.cleanup = gen6_ppgtt_cleanup;
        ppgtt->base.start = 0;
-       ppgtt->base.total = ppgtt->num_pd_entries * GEN6_PTES_PER_PT * 
PAGE_SIZE;
+       ppgtt->base.total = I915_PDES_PER_PD * GEN6_PTES_PER_PT * PAGE_SIZE;
        ppgtt->debug_dump = gen6_dump_ppgtt;
 
        ppgtt->pd.pd_offset =
@@ -1599,7 +1578,7 @@ void i915_gem_restore_gtt_mappings(struct drm_device *dev)
                if (i915_is_ggtt(vm))
                        ppgtt = dev_priv->mm.aliasing_ppgtt;
 
-               gen6_map_page_range(dev_priv, &ppgtt->pd, 0, 
ppgtt->num_pd_entries);
+               gen6_map_page_range(dev_priv, &ppgtt->pd, 0, I915_PDES_PER_PD);
        }
 
        i915_gem_chipset_flush(dev);
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.h 
b/drivers/gpu/drm/i915/i915_gem_gtt.h
index 3c28365..18a0b68 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.h
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.h
@@ -265,8 +265,6 @@ struct i915_hw_ppgtt {
        struct i915_address_space base;
        struct kref ref;
        struct drm_mm_node node;
-       unsigned num_pd_entries;
-       unsigned num_pd_pages; /* gen8+ */
        union {
                struct i915_pagedirpo pdp;
                struct i915_pagedir pd;
@@ -333,6 +331,11 @@ struct i915_gtt {
             temp = min(temp, (unsigned)length), \
             start += temp, length -= temp)
 
+#define gen6_for_all_pdes(pt, ppgtt, iter)  \
+       for (iter = 0, pt = ppgtt->pd.page_tables[iter];                        
\
+            iter < gen6_pde_index(ppgtt->base.total);                  \
+            pt =  ppgtt->pd.page_tables[++iter])
+
 static inline uint32_t i915_pte_index(uint64_t address, uint32_t pde_shift)
 {
        const uint32_t mask = NUM_PTE(pde_shift) - 1;
-- 
2.0.4

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

Reply via email to