Re: [PATCH 12/21] drm/i915: support 2M pages for the 48b PPGTT

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

 



Quoting Matthew Auld (2017-09-22 18:32:43)
> Support inserting 2M gtt pages into the 48b PPGTT.
> 
> v2: sanity check sg->length against page_size
> 
> v3: don't recalculate rem on each loop
>     whitespace breakup
> 
> Signed-off-by: Matthew Auld <matthew.auld@xxxxxxxxx>
> Cc: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx>
> Cc: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
> ---
>  drivers/gpu/drm/i915/i915_gem_gtt.c | 78 +++++++++++++++++++++++++++++++++++--
>  drivers/gpu/drm/i915/i915_gem_gtt.h |  2 +
>  2 files changed, 76 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index a3897676e0bc..8cdb5361b582 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -1016,6 +1016,71 @@ static void gen8_ppgtt_insert_3lvl(struct i915_address_space *vm,
>                                       cache_level);
>  }
>  
> +static void gen8_ppgtt_insert_huge_entries(struct i915_vma *vma,
> +                                          struct i915_page_directory_pointer **pdps,
> +                                          struct sgt_dma *iter,
> +                                          enum i915_cache_level cache_level)
> +{
> +       const gen8_pte_t pte_encode = gen8_pte_encode(0, cache_level);
> +       u64 start = vma->node.start;
> +       dma_addr_t rem = iter->sg->length;
> +
> +       do {
> +               struct gen8_insert_pte idx = gen8_insert_pte(start);
> +               struct i915_page_directory_pointer *pdp = pdps[idx.pml4e];
> +               struct i915_page_directory *pd = pdp->page_directory[idx.pdpe];
> +               unsigned int page_size;
> +               gen8_pte_t encode = pte_encode;
> +               gen8_pte_t *vaddr;
> +               u16 index, max;
> +
> +               if (vma->page_sizes.sg & I915_GTT_PAGE_SIZE_2M &&
> +                   IS_ALIGNED(iter->dma, I915_GTT_PAGE_SIZE_2M) &&
> +                   rem >= I915_GTT_PAGE_SIZE_2M && !idx.pte) {
> +                       index = idx.pde;
> +                       max = I915_PDES;
> +                       page_size = I915_GTT_PAGE_SIZE_2M;
> +
> +                       encode |= GEN8_PDE_PS_2M;
> +
> +                       vaddr = kmap_atomic_px(pd);
> +               } else {
> +                       struct i915_page_table *pt = pd->page_table[idx.pde];
> +
> +                       index = idx.pte;
> +                       max = GEN8_PTES;
> +                       page_size = I915_GTT_PAGE_SIZE;
> +
> +                       vaddr = kmap_atomic_px(pt);
> +               }
> +
> +               do {
> +                       GEM_BUG_ON(iter->sg->length < page_size);
> +                       vaddr[index++] = encode | iter->dma;
> +
> +                       start += page_size;
> +                       iter->dma += page_size;
> +                       rem -= page_size;
> +                       if (iter->dma >= iter->max) {
> +                               iter->sg = __sg_next(iter->sg);
> +                               if (!iter->sg)
> +                                       break;
> +
> +                               rem = iter->sg->length;
> +                               iter->dma = sg_dma_address(iter->sg);
> +                               iter->max = iter->dma + rem;
> +
> +                               if (unlikely(!IS_ALIGNED(iter->dma, page_size)))
> +                                       break;
> +                       }
> +
> +               } while (rem >= page_size && index < max);
> +
> +               kunmap_atomic(vaddr);
> +
> +       } while (iter->sg);
> +}

Blank lines before '}' make feel uncomfortable, like something is
missing.

Reviewed-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx>
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://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