Re: [PATCH v3 12/17] drm/i915/gen8: Add ppgtt info and debug_dump

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 7/7/2015 1:56 PM, Goel, Akash wrote:
On 7/1/2015 8:57 PM, Michel Thierry wrote:
v2: Clean up patch after rebases.
v3: gen8_dump_ppgtt for 32b and 48b PPGTT.
v4: Use used_pml4es/pdpes (Akash).
v5: Rebase after Mika's ppgtt cleanup / scratch merge patch series.

Signed-off-by: Ben Widawsky <ben@xxxxxxxxxxxx>
Signed-off-by: Michel Thierry <michel.thierry@xxxxxxxxx> (v2+)
---
  drivers/gpu/drm/i915/i915_debugfs.c | 18 ++++----
  drivers/gpu/drm/i915/i915_gem_gtt.c | 92
+++++++++++++++++++++++++++++++++++++
  2 files changed, 102 insertions(+), 8 deletions(-)
+static void gen8_dump_ppgtt(struct i915_hw_ppgtt *ppgtt, struct
seq_file *m)
+{
+    struct i915_address_space *vm = &ppgtt->base;
+    uint64_t start = ppgtt->base.start;
+    uint64_t length = ppgtt->base.total;
+    gen8_pte_t scratch_pte = gen8_pte_encode(px_dma(vm->scratch_page),
+                         I915_CACHE_LLC, true);
+
+    if (!USES_FULL_48BIT_PPGTT(vm->dev)) {
+        gen8_dump_pdp(&ppgtt->pdp, start, length, scratch_pte, m);
+    } else {
+        uint64_t templ4, pml4e;
+        struct i915_pml4 *pml4 = &ppgtt->pml4;
+        struct i915_page_directory_pointer *pdp;
+
+        gen8_for_each_pml4e(pdp, pml4, start, length, templ4, pml4e) {
+            uint64_t pdp_len = length;
+            uint64_t pdp_start = start;
+
+            if (!pdp)
+                continue;
+
I think the "if (!test_bit(pml4e, pml4->used_pml4es))" check is
foolproof & should suffice.
No real need of the extra check of 'if (!pdp)'.
Same for pdpe & pde loops in gen8_dump_pdp function

Right, I'll changed it to use test_bit across the board, also remove the unnecessary pdp_len/pdp_start variables:
-        if (!pd)
-            continue;
-
         if(!test_bit(pdpe, pdp->used_pdpes))
             continue;
-----------
-            if (!pt)
+            if(!test_bit(pde, pd->used_pdes))
                 continue;
-----------
         gen8_for_each_pml4e(pdp, pml4, start, length, templ4, pml4e) {
-            uint64_t pdp_len = length;
-            uint64_t pdp_start = start;
-
-            if (!pdp)
-                continue;
-
             if (!test_bit(pml4e, pml4->used_pml4es))
                 continue;

             seq_printf(m, "    PML4E #%llu\n", pml4e);
-            gen8_dump_pdp(pdp, pdp_start, pdp_len, scratch_pte, m);
+            gen8_dump_pdp(pdp, start, length, scratch_pte, m);
-----------

+            if (!test_bit(pml4e, pml4->used_pml4es))
+                continue;
+
+            seq_printf(m, "    PML4E #%llu\n", pml4e);
+            gen8_dump_pdp(pdp, pdp_start, pdp_len, scratch_pte, m);
+        }
+    }
+}
+
  /*
   * GEN8 legacy ppgtt programming is accomplished through a max 4 PDP
registers
   * with a net effect resembling a 2-level page table in normal x86
terms. Each
@@ -1359,6 +1450,7 @@ static int gen8_ppgtt_init(struct i915_hw_ppgtt
*ppgtt)
      ppgtt->base.clear_range = gen8_ppgtt_clear_range;
      ppgtt->base.unbind_vma = ppgtt_unbind_vma;
      ppgtt->base.bind_vma = ppgtt_bind_vma;
+    ppgtt->debug_dump = gen8_dump_ppgtt;

      if (USES_FULL_48BIT_PPGTT(ppgtt->base.dev)) {
          ret = setup_px(ppgtt->base.dev, &ppgtt->pml4);

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




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux