[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