[PATCH] drm/i915/gvt: adjust for fixed vGPU types

Tian, Kevin kevin.tian at intel.com
Tue Feb 21 03:45:56 UTC 2017


> From: Zhenyu Wang [mailto:zhenyuw at linux.intel.com]
> Sent: Tuesday, February 21, 2017 11:15 AM
> 
> Previous vGPU type create tried to determine vGPU types based on
> some pre-defined resource sizes which might not be optimal. As
> we'd like to fix vGPU types for _1, _2, _4 and _8 now, we can generate
> maxium resource size for each fixed type based on physical resource.
> 
> Cc: Kevin Tian <kevin.tian at intel.com>
> Signed-off-by: Zhenyu Wang <zhenyuw at linux.intel.com>
> ---
>  drivers/gpu/drm/i915/gvt/vgpu.c | 15 +++++----------
>  1 file changed, 5 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c b/drivers/gpu/drm/i915/gvt/vgpu.c
> index dcfcce1dc00e..dfa8a99acdfe 100644
> --- a/drivers/gpu/drm/i915/gvt/vgpu.c
> +++ b/drivers/gpu/drm/i915/gvt/vgpu.c
> @@ -75,7 +75,7 @@ int intel_gvt_init_vgpu_types(struct intel_gvt *gvt)
>  {
>  	unsigned int num_types;
>  	unsigned int i, low_avail, high_avail;
> -	unsigned int min_low;
> +	unsigned int types[] = {1, 2, 4, 8};

should we define them in macros?

> 
>  	/* vGPU type name is defined as GVTg_Vx_y which contains
>  	 * physical GPU generation type and 'y' means maximum vGPU
> @@ -92,22 +92,18 @@ int intel_gvt_init_vgpu_types(struct intel_gvt *gvt)
>  	 */
>  	low_avail = gvt_aperture_sz(gvt) - HOST_LOW_GM_SIZE;
>  	high_avail = gvt_hidden_sz(gvt) - HOST_HIGH_GM_SIZE;
> -	num_types = 4;
> +	num_types = sizeof(types) / sizeof(unsigned int);
> 
>  	gvt->types = kzalloc(num_types * sizeof(struct intel_vgpu_type),
>  			     GFP_KERNEL);
>  	if (!gvt->types)
>  		return -ENOMEM;
> 
> -	min_low = MB_TO_BYTES(32);
>  	for (i = 0; i < num_types; ++i) {
> -		if (low_avail / min_low == 0)
> -			break;
> -		gvt->types[i].low_gm_size = min_low;
> -		gvt->types[i].high_gm_size = max((min_low<<3), MB_TO_BYTES(384U));
> +		gvt->types[i].low_gm_size = low_avail / types[i];
> +		gvt->types[i].high_gm_size = high_avail / types[i];
>  		gvt->types[i].fence = 4;
> -		gvt->types[i].max_instance = min(low_avail / min_low,
> -						 high_avail / gvt->types[i].high_gm_size);
> +		gvt->types[i].max_instance = types[i];
>  		gvt->types[i].avail_instance = gvt->types[i].max_instance;
> 
>  		if (IS_GEN8(gvt->dev_priv))

max_instance is not a fixed one. It depends on available physical
resource and minimal requirement in guest driver. Simply reporting
all types in all configurations is meaningless - e.g. what's the point
of reporting 8vGPUs available on a platform configured with only
128MB aperture?

I think the agreed policy is to define types in 2's power. But how
many meaningful types should be reported depends on sort of
dynamic calculation anyway....

> @@ -117,7 +113,6 @@ int intel_gvt_init_vgpu_types(struct intel_gvt *gvt)
>  			sprintf(gvt->types[i].name, "GVTg_V5_%u",
>  						gvt->types[i].max_instance);
> 
> -		min_low <<= 1;
>  		gvt_dbg_core("type[%d]: %s max %u avail %u low %u high %u fence %u\n",
>  			     i, gvt->types[i].name, gvt->types[i].max_instance,
>  			     gvt->types[i].avail_instance,
> --
> 2.11.0



More information about the intel-gvt-dev mailing list