[PATCH 2/2] drm/i915/gvt: Refine the combined intel_vgpu_oos_page struct to save memory

Zhenyu Wang zhenyuw at linux.intel.com
Mon Feb 18 07:57:41 UTC 2019


On 2019.02.14 17:09:17 +0800, Zhao Yakui wrote:
> The intel_vgpu_oos_page uses the combined structure, which embdeds the
> tracked page. As it is allocated by kmalloc, the size(4140) is aligned
> to 8192. The 8192 oos_pages will waste about 32M memory.
> So the tracked page is split from the intel_vgpu_oos_page. And this will
> help to assure that the access of tracked page is cache aligned.
> 
> Another minor change is that it doesn't need to be cleared to zero as
> it is writen firstly when one page is added to oos_page list.
> 
> Signed-off-by: Zhao Yakui <yakui.zhao at intel.com>
> ---
>  drivers/gpu/drm/i915/gvt/gtt.c | 7 +++++++
>  drivers/gpu/drm/i915/gvt/gtt.h | 2 +-
>  2 files changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c
> index c7103dd..9ba1ed8 100644
> --- a/drivers/gpu/drm/i915/gvt/gtt.c
> +++ b/drivers/gpu/drm/i915/gvt/gtt.c
> @@ -2489,6 +2489,7 @@ static void clean_spt_oos(struct intel_gvt *gvt)
>  	list_for_each_safe(pos, n, &gtt->oos_page_free_list_head) {
>  		oos_page = container_of(pos, struct intel_vgpu_oos_page, list);
>  		list_del(&oos_page->list);
> +		free_page((unsigned long)oos_page->mem);
>  		kfree(oos_page);
>  	}
>  }
> @@ -2509,6 +2510,12 @@ static int setup_spt_oos(struct intel_gvt *gvt)
>  			ret = -ENOMEM;
>  			goto fail;
>  		}
> +		oos_page->mem = (void *)__get_free_pages(GFP_KERNEL, 0);
> +		if (!oos_page->mem) {
> +			ret = -ENOMEM;
> +			kfree(oos_page);
> +			goto fail;
> +		}
>  
>  		INIT_LIST_HEAD(&oos_page->list);
>  		INIT_LIST_HEAD(&oos_page->vm_list);
> diff --git a/drivers/gpu/drm/i915/gvt/gtt.h b/drivers/gpu/drm/i915/gvt/gtt.h
> index d8cb04c..e9f72a6 100644
> --- a/drivers/gpu/drm/i915/gvt/gtt.h
> +++ b/drivers/gpu/drm/i915/gvt/gtt.h
> @@ -221,7 +221,7 @@ struct intel_vgpu_oos_page {
>  	struct list_head list;
>  	struct list_head vm_list;
>  	int id;
> -	unsigned char mem[I915_GTT_PAGE_SIZE];
> +	void *mem;
>  };
>  
>  #define GTT_ENTRY_NUM_IN_ONE_PAGE 512
> -- 

Looks good to me.

Reviewed-by: Zhenyu Wang <zhenyuw at linux.intel.com>

btw, last time check I think we could skip oos page setup if out of sync
is not enabled at all, would you add that change too?

thanks

-- 
Open Source Technology Center, Intel ltd.

$gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gvt-dev/attachments/20190218/eab987b9/attachment.sig>


More information about the intel-gvt-dev mailing list