Re: [PATCH 1/4] drm/i915/gtt: Reorder page alloc/free/init functions

Michel Thierry
2015-06-30T16:58:19Z

On 6/30/2015 4:16 PM, Mika Kuoppala wrote:
> Maintain base page handling functions in order of
> alloc, free, init. No functional changes.
>
> v2: s/Introduce/Maintain (Michel)
> v3: Rebase
>
> Cc: Michel Thierry <michel.thierry@intel.com>
> Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com>
> Reviewed-by: Michel Thierry <michel.thierry@intel.com> (v2)
v3 too.

> ---
> drivers/gpu/drm/i915/i915_gem_gtt.c | 166 ++++++++++++++++++------------------
> 1 file changed, 83 insertions(+), 83 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
> index 8cfa390..23f5896 100644
> --- a/drivers/gpu/drm/i915/i915_gem_gtt.c
> +++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
> @@ -384,24 +384,6 @@ static void fill_page_dma_32(struct drm_device *dev, struct i915_page_dma *p,
> fill_page_dma(dev, p, v);
> }
>
> -static void free_pt(struct drm_device *dev, struct i915_page_table *pt)
> -{
> - cleanup_px(dev, pt);
> - kfree(pt->used_ptes);
> - kfree(pt);
> -}
> -
> -static void gen8_initialize_pt(struct i915_address_space *vm,
> - struct i915_page_table *pt)
> -{
> - gen8_pte_t scratch_pte;
> -
> - scratch_pte = gen8_pte_encode(px_dma(vm->scratch_page),
> - I915_CACHE_LLC, true);
> -
> - fill_px(vm->dev, pt, scratch_pte);
> -}
> -
> static struct i915_page_table *alloc_pt(struct drm_device *dev)
> {
> struct i915_page_table *pt;
> @@ -433,13 +415,35 @@ fail_bitmap:
> return ERR_PTR(ret);
> }
>
> -static void free_pd(struct drm_device *dev, struct i915_page_directory *pd)
> +static void free_pt(struct drm_device *dev, struct i915_page_table *pt)
> {
> - if (px_page(pd)) {
> - cleanup_px(dev, pd);
> - kfree(pd->used_pdes);
> - kfree(pd);
> - }
> + cleanup_px(dev, pt);
> + kfree(pt->used_ptes);
> + kfree(pt);
> +}
> +
> +static void gen8_initialize_pt(struct i915_address_space *vm,
> + struct i915_page_table *pt)
> +{
> + gen8_pte_t scratch_pte;
> +
> + scratch_pte = gen8_pte_encode(px_dma(vm->scratch_page),
> + I915_CACHE_LLC, true);
> +
> + fill_px(vm->dev, pt, scratch_pte);
> +}
> +
> +static void gen6_initialize_pt(struct i915_address_space *vm,
> + struct i915_page_table *pt)
> +{
> + gen6_pte_t scratch_pte;
> +
> + WARN_ON(px_dma(vm->scratch_page) == 0);
> +
> + scratch_pte = vm->pte_encode(px_dma(vm->scratch_page),
> + I915_CACHE_LLC, true, 0);
> +
> + fill32_px(vm->dev, pt, scratch_pte);
> }
>
> static struct i915_page_directory *alloc_pd(struct drm_device *dev)
> @@ -470,6 +474,61 @@ fail_bitmap:
> return ERR_PTR(ret);
> }
>
> +static void free_pd(struct drm_device *dev, struct i915_page_directory *pd)
> +{
> + if (px_page(pd)) {
> + cleanup_px(dev, pd);
> + kfree(pd->used_pdes);
> + kfree(pd);
> + }
> +}
> +
> +static void gen8_initialize_pd(struct i915_address_space *vm,
> + struct i915_page_directory *pd)
> +{
> + gen8_pde_t scratch_pde;
> +
> + scratch_pde = gen8_pde_encode(px_dma(vm->scratch_pt), I915_CACHE_LLC);
> +
> + fill_px(vm->dev, pd, scratch_pde);
> +}
> +
> +static int alloc_scratch_page(struct i915_address_space *vm)
> +{
> + struct i915_page_scratch *sp;
> + int ret;
> +
> + WARN_ON(vm->scratch_page);
> +
> + sp = kzalloc(sizeof(*sp), GFP_KERNEL);
> + if (sp == NULL)
> + return -ENOMEM;
> +
> + ret = __setup_page_dma(vm->dev, px_base(sp), GFP_DMA32 | __GFP_ZERO);
> + if (ret) {
> + kfree(sp);
> + return ret;
> + }
> +
> + set_pages_uc(px_page(sp), 1);
> +
> + vm->scratch_page = sp;
> +
> + return 0;
> +}
> +
> +static void free_scratch_page(struct i915_address_space *vm)
> +{
> + struct i915_page_scratch *sp = vm->scratch_page;
> +
> + set_pages_wb(px_page(sp), 1);
> +
> + cleanup_px(vm->dev, sp);
> + kfree(sp);
> +
> + vm->scratch_page = NULL;
> +}
> +
> /* Broadwell Page Directory Pointer Descriptors */
> static int gen8_write_pdp(struct drm_i915_gem_request *req,
> unsigned entry,
> @@ -609,16 +668,6 @@ static void gen8_ppgtt_insert_entries(struct i915_address_space *vm,
> kunmap_px(ppgtt, pt_vaddr);
> }
>
> -static void gen8_initialize_pd(struct i915_address_space *vm,
> - struct i915_page_directory *pd)
> -{
> - gen8_pde_t scratch_pde;
> -
> - scratch_pde = gen8_pde_encode(px_dma(vm->scratch_pt), I915_CACHE_LLC);
> -
> - fill_px(vm->dev, pd, scratch_pde);
> -}
> -
> static void gen8_free_page_tables(struct drm_device *dev,
> struct i915_page_directory *pd)
> {
> @@ -1274,19 +1323,6 @@ static void gen6_ppgtt_insert_entries(struct i915_address_space *vm,
> kunmap_px(ppgtt, pt_vaddr);
> }
>
> -static void gen6_initialize_pt(struct i915_address_space *vm,
> - struct i915_page_table *pt)
> -{
> - gen6_pte_t scratch_pte;
> -
> - WARN_ON(px_dma(vm->scratch_page) == 0);
> -
> - scratch_pte = vm->pte_encode(px_dma(vm->scratch_page),
> - I915_CACHE_LLC, true, 0);
> -
> - fill32_px(vm->dev, pt, scratch_pte);
> -}
> -
> static int gen6_alloc_va_range(struct i915_address_space *vm,
> uint64_t start_in, uint64_t length_in)
> {
> @@ -2126,42 +2162,6 @@ void i915_global_gtt_cleanup(struct drm_device *dev)
> vm->cleanup(vm);
> }
>
> -static int alloc_scratch_page(struct i915_address_space *vm)
> -{
> - struct i915_page_scratch *sp;
> - int ret;
> -
> - WARN_ON(vm->scratch_page);
> -
> - sp = kzalloc(sizeof(*sp), GFP_KERNEL);
> - if (sp == NULL)
> - return -ENOMEM;
> -
> - ret = __setup_page_dma(vm->dev, px_base(sp), GFP_DMA32 | __GFP_ZERO);
> - if (ret) {
> - kfree(sp);
> - return ret;
> - }
> -
> - set_pages_uc(px_page(sp), 1);
> -
> - vm->scratch_page = sp;
> -
> - return 0;
> -}
> -
> -static void free_scratch_page(struct i915_address_space *vm)
> -{
> - struct i915_page_scratch *sp = vm->scratch_page;
> -
> - set_pages_wb(px_page(sp), 1);
> -
> - cleanup_px(vm->dev, sp);
> - kfree(sp);
> -
> - vm->scratch_page = NULL;
> -}
> -
> static unsigned int gen6_get_total_gtt_size(u16 snb_gmch_ctl)
> {
> snb_gmch_ctl >>= SNB_GMCH_GGMS_SHIFT;