[PATCH v4 7/9] drm/i915/gvt: define weight according to vGPU type
Zhenyu Wang
zhenyuw at linux.intel.com
Wed Mar 8 10:03:29 UTC 2017
On 2017.03.08 14:24:34 +0800, Ping Gao wrote:
> The weight define proportional control of the vGPU resource between
> vGPUs, different vGPU types has different fixed weight definition.
> If different type vGPUs been created at the same time, the vGPU
> resource ratio between them is equal with ratio of weight.
>
> Signed-off-by: Ping Gao <ping.a.gao at intel.com>
> ---
Can't apply this for current gvt-staging.
We need description at least in comment on what those weight value means.
> drivers/gpu/drm/i915/gvt/gvt.h | 4 ++++
> drivers/gpu/drm/i915/gvt/kvmgt.c | 6 ++++--
> drivers/gpu/drm/i915/gvt/sched_policy.c | 1 +
> drivers/gpu/drm/i915/gvt/vgpu.c | 15 ++++++++++-----
> 4 files changed, 19 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gvt/gvt.h b/drivers/gpu/drm/i915/gvt/gvt.h
> index 563ed22..0f53f5d 100644
> --- a/drivers/gpu/drm/i915/gvt/gvt.h
> +++ b/drivers/gpu/drm/i915/gvt/gvt.h
> @@ -151,6 +151,7 @@ struct intel_vgpu {
> bool failsafe;
> bool resetting;
> void *sched_data;
> + struct intel_sched_ctl sched_ctl;
>
> struct intel_vgpu_fence fence;
> struct intel_vgpu_gm gm;
> @@ -221,6 +222,7 @@ struct intel_vgpu_type {
> unsigned int low_gm_size;
> unsigned int high_gm_size;
> unsigned int fence;
> + unsigned int weight;
> enum intel_vgpu_edid resolution;
> };
>
> @@ -330,6 +332,8 @@ struct intel_vgpu_creation_params {
> __u64 resolution;
> __s32 primary;
> __u64 vgpu_id;
> +
> + __u32 weight;
> };
>
> int intel_vgpu_alloc_resource(struct intel_vgpu *vgpu,
> diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c
> index f07cb8b..04c1575 100644
> --- a/drivers/gpu/drm/i915/gvt/kvmgt.c
> +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c
> @@ -295,10 +295,12 @@ static ssize_t description_show(struct kobject *kobj, struct device *dev,
> return 0;
>
> return sprintf(buf, "low_gm_size: %dMB\nhigh_gm_size: %dMB\n"
> - "fence: %d\nresolution: %s\n",
> + "fence: %d\nresolution: %s\n"
> + "weight: %d\n",
> BYTES_TO_MB(type->low_gm_size),
> BYTES_TO_MB(type->high_gm_size),
> - type->fence, vgpu_edid_str(type->resolution));
> + type->fence, vgpu_edid_str(type->resolution),
> + type->weight);
> }
>
> static MDEV_TYPE_ATTR_RO(available_instances);
> diff --git a/drivers/gpu/drm/i915/gvt/sched_policy.c b/drivers/gpu/drm/i915/gvt/sched_policy.c
> index e0311c8..8fd1fa3 100644
> --- a/drivers/gpu/drm/i915/gvt/sched_policy.c
> +++ b/drivers/gpu/drm/i915/gvt/sched_policy.c
> @@ -340,6 +340,7 @@ static int tbs_sched_init_vgpu(struct intel_vgpu *vgpu)
> if (!data)
> return -ENOMEM;
>
> + data->sched_ctl.weight = vgpu->sched_ctl.weight;
> data->vgpu = vgpu;
> INIT_LIST_HEAD(&data->list);
> INIT_LIST_HEAD(&data->lru_list);
> diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c b/drivers/gpu/drm/i915/gvt/vgpu.c
> index 945327b..478e61d 100644
> --- a/drivers/gpu/drm/i915/gvt/vgpu.c
> +++ b/drivers/gpu/drm/i915/gvt/vgpu.c
> @@ -68,14 +68,15 @@ static struct {
> unsigned int low_mm;
> unsigned int high_mm;
> unsigned int fence;
> + unsigned int weight;
> enum intel_vgpu_edid edid;
> char *name;
> } vgpu_types[] = {
> /* Fixed vGPU type table */
> - { MB_TO_BYTES(64), MB_TO_BYTES(512), 4, GVT_EDID_1024_768, "8" },
> - { MB_TO_BYTES(128), MB_TO_BYTES(512), 4, GVT_EDID_1920_1080, "4" },
> - { MB_TO_BYTES(256), MB_TO_BYTES(1024), 4, GVT_EDID_1920_1080, "2" },
> - { MB_TO_BYTES(512), MB_TO_BYTES(2048), 4, GVT_EDID_1920_1080, "1" },
> + { MB_TO_BYTES(64), MB_TO_BYTES(512), 4, 1, GVT_EDID_1024_768, "8" },
> + { MB_TO_BYTES(128), MB_TO_BYTES(512), 4, 2, GVT_EDID_1920_1080, "4" },
> + { MB_TO_BYTES(256), MB_TO_BYTES(1024), 4, 4, GVT_EDID_1920_1080, "2" },
> + { MB_TO_BYTES(512), MB_TO_BYTES(2048), 4, 8, GVT_EDID_1920_1080, "1" },
> };
>
> /**
> @@ -120,6 +121,7 @@ int intel_gvt_init_vgpu_types(struct intel_gvt *gvt)
> gvt->types[i].low_gm_size = vgpu_types[i].low_mm;
> gvt->types[i].high_gm_size = vgpu_types[i].high_mm;
> gvt->types[i].fence = vgpu_types[i].fence;
> + gvt->types[i].weight = vgpu_types[i].weight;
> gvt->types[i].resolution = vgpu_types[i].edid;
> gvt->types[i].avail_instance = min(low_avail / vgpu_types[i].low_mm,
> high_avail / vgpu_types[i].high_mm);
> @@ -131,11 +133,12 @@ int intel_gvt_init_vgpu_types(struct intel_gvt *gvt)
> sprintf(gvt->types[i].name, "GVTg_V5_%s",
> vgpu_types[i].name);
>
> - gvt_dbg_core("type[%d]: %s avail %u low %u high %u fence %u res %s\n",
> + gvt_dbg_core("type[%d]: %s avail %u low %u high %u fence %u weight %u res %s\n",
> i, gvt->types[i].name,
> gvt->types[i].avail_instance,
> gvt->types[i].low_gm_size,
> gvt->types[i].high_gm_size, gvt->types[i].fence,
> + gvt->types[i].weight,
> vgpu_edid_str(gvt->types[i].resolution));
> }
>
> @@ -290,6 +293,7 @@ static struct intel_vgpu *__intel_gvt_create_vgpu(struct intel_gvt *gvt,
> vgpu->id = ret;
> vgpu->handle = param->handle;
> vgpu->gvt = gvt;
> + vgpu->sched_ctl.weight = param->weight;
> bitmap_zero(vgpu->tlb_handle_pending, I915_NUM_ENGINES);
>
> intel_vgpu_init_cfg_space(vgpu, param->primary);
> @@ -376,6 +380,7 @@ struct intel_vgpu *intel_gvt_create_vgpu(struct intel_gvt *gvt,
> param.low_gm_sz = type->low_gm_size;
> param.high_gm_sz = type->high_gm_size;
> param.fence_sz = type->fence;
> + param.weight = type->weight;
> param.resolution = type->resolution;
>
> /* XXX current param based on MB */
> --
> 2.7.4
>
> _______________________________________________
> intel-gvt-dev mailing list
> intel-gvt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev
--
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: 163 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gvt-dev/attachments/20170308/995fa1b8/attachment.sig>
More information about the intel-gvt-dev
mailing list