[PATCH 1/2] drm/i915/gvt: Invalidate vGPU PPGTT mm objects during a vGPU reset.
Zhenyu Wang
zhenyuw at linux.intel.com
Thu Feb 8 03:25:31 UTC 2018
On 2018.02.07 18:12:14 +0800, Zhi Wang wrote:
> From: Zhi Wang <zhi.wang.linux at gmail.com>
>
> As different OSes might handling GVT PPGTT creation/destory notification
> differently during a vGPU reset. A better approach is invalidating all
> vGPU PPGTT mm objects during vGPU reset.
>
> Signed-off-by: Zhi Wang <zhi.a.wang at intel.com>
> ---
Reviewed-by: Zhenyu Wang <zhenyuw at linux.intel.com>
> drivers/gpu/drm/i915/gvt/gtt.c | 22 ++++++++++++++++++++++
> drivers/gpu/drm/i915/gvt/gtt.h | 1 +
> drivers/gpu/drm/i915/gvt/vgpu.c | 1 +
> 3 files changed, 24 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c
> index 8fb4f102..1fa0db5 100644
> --- a/drivers/gpu/drm/i915/gvt/gtt.c
> +++ b/drivers/gpu/drm/i915/gvt/gtt.c
> @@ -2269,6 +2269,28 @@ void intel_gvt_clean_gtt(struct intel_gvt *gvt)
> }
>
> /**
> + * intel_vgpu_invalidate_ppgtt - invalidate PPGTT instances
> + * @vgpu: a vGPU
> + *
> + * This function is called when invalidate all PPGTT instances of a vGPU.
> + *
> + */
> +void intel_vgpu_invalidate_ppgtt(struct intel_vgpu *vgpu)
> +{
> + struct list_head *pos, *n;
> + struct intel_vgpu_mm *mm;
> +
> + list_for_each_safe(pos, n, &vgpu->gtt.ppgtt_mm_list_head) {
> + mm = container_of(pos, struct intel_vgpu_mm, ppgtt_mm.list);
> + if (mm->type == INTEL_GVT_MM_PPGTT) {
> + list_del_init(&mm->ppgtt_mm.lru_list);
> + if (mm->ppgtt_mm.shadowed)
> + invalidate_ppgtt_mm(mm);
> + }
> + }
> +}
> +
> +/**
> * intel_vgpu_reset_ggtt - reset the GGTT entry
> * @vgpu: a vGPU
> *
> diff --git a/drivers/gpu/drm/i915/gvt/gtt.h b/drivers/gpu/drm/i915/gvt/gtt.h
> index e831507..a8b369c 100644
> --- a/drivers/gpu/drm/i915/gvt/gtt.h
> +++ b/drivers/gpu/drm/i915/gvt/gtt.h
> @@ -194,6 +194,7 @@ struct intel_vgpu_gtt {
> extern int intel_vgpu_init_gtt(struct intel_vgpu *vgpu);
> extern void intel_vgpu_clean_gtt(struct intel_vgpu *vgpu);
> void intel_vgpu_reset_ggtt(struct intel_vgpu *vgpu);
> +void intel_vgpu_invalidate_ppgtt(struct intel_vgpu *vgpu);
>
> extern int intel_gvt_init_gtt(struct intel_gvt *gvt);
> void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu);
> diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c b/drivers/gpu/drm/i915/gvt/vgpu.c
> index 41f76e8..2e0a02a 100644
> --- a/drivers/gpu/drm/i915/gvt/vgpu.c
> +++ b/drivers/gpu/drm/i915/gvt/vgpu.c
> @@ -522,6 +522,7 @@ void intel_gvt_reset_vgpu_locked(struct intel_vgpu *vgpu, bool dmlr,
> /* full GPU reset or device model level reset */
> if (engine_mask == ALL_ENGINES || dmlr) {
> intel_vgpu_select_submission_ops(vgpu, ALL_ENGINES, 0);
> + intel_vgpu_invalidate_ppgtt(vgpu);
> /*fence will not be reset during virtual reset */
> if (dmlr) {
> intel_vgpu_reset_gtt(vgpu);
> --
> 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: 195 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gvt-dev/attachments/20180208/6c25eb89/attachment.sig>
More information about the intel-gvt-dev
mailing list