[PATCH] drm/i915/gvt: invalidate PPGTT mm of vGPU in all engines reset
Du, Changbin
changbin.du at intel.com
Fri Sep 22 09:33:09 UTC 2017
On Fri, Sep 22, 2017 at 12:50:53PM +0800, Weinan Li wrote:
> invalidate all the PPGTT mm of vgpu when all engines reset triggered. VM may
> reuse these memorys for other purpose but without destroy notification
> after reset. Let GVT-g recreate automatically when used.
>
> Signed-off-by: Weinan Li <weinan.z.li at intel.com>
> Cc: Zhi Wang <zhi.a.wang at intel.com>
> ---
> drivers/gpu/drm/i915/gvt/gtt.c | 17 +++++++++++++++--
> drivers/gpu/drm/i915/gvt/gtt.h | 1 +
> drivers/gpu/drm/i915/gvt/scheduler.c | 7 ++++++-
> drivers/gpu/drm/i915/gvt/vgpu.c | 2 +-
> 4 files changed, 23 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c
> index 73746b2..aefacb5 100644
> --- a/drivers/gpu/drm/i915/gvt/gtt.c
> +++ b/drivers/gpu/drm/i915/gvt/gtt.c
> @@ -2038,6 +2038,21 @@ static void intel_vgpu_free_mm(struct intel_vgpu *vgpu, int type)
> }
> }
>
> +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.mm_list_head) {
> + mm = container_of(pos, struct intel_vgpu_mm, list);
> + if (mm->type == INTEL_GVT_MM_PPGTT) {
> + list_del_init(&mm->lru_list);
> + if (mm->has_shadow_page_table && mm->shadowed)
> + invalidate_mm(mm);
> + }
> + }
> +}
> +
> /**
> * intel_vgpu_clean_gtt - clean up per-vGPU graphics memory virulization
> * @vgpu: a vGPU
> @@ -2340,8 +2355,6 @@ void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu)
> {
> int i;
>
> - ppgtt_free_all_shadow_page(vgpu);
> -
> /* Shadow pages are only created when there is no page
> * table tracking data, so remove page tracking data after
> * removing the shadow pages.
> diff --git a/drivers/gpu/drm/i915/gvt/gtt.h b/drivers/gpu/drm/i915/gvt/gtt.h
> index 159dce8..cb12a56 100644
> --- a/drivers/gpu/drm/i915/gvt/gtt.h
> +++ b/drivers/gpu/drm/i915/gvt/gtt.h
> @@ -209,6 +209,7 @@ struct intel_vgpu_gtt {
>
> extern int intel_gvt_init_gtt(struct intel_gvt *gvt);
> void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu);
> +void intel_vgpu_invalidate_ppgtt(struct intel_vgpu *vgpu);
> extern void intel_gvt_clean_gtt(struct intel_gvt *gvt);
>
> extern struct intel_vgpu_mm *intel_gvt_find_ppgtt_mm(struct intel_vgpu *vgpu,
> diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c
> index 1cdbe92..a61dd92 100644
> --- a/drivers/gpu/drm/i915/gvt/scheduler.c
> +++ b/drivers/gpu/drm/i915/gvt/scheduler.c
> @@ -112,9 +112,14 @@ static int populate_shadow_context(struct intel_vgpu_workload *workload)
> COPY_REG(rcs_indirect_ctx_offset);
> }
> #undef COPY_REG
> -
> + /*
> + * pin/unpin the shadow mm before using to ensure it has been
> + * shadowed.
> + */
> + intel_vgpu_pin_mm(workload->shadow_mm);
> set_context_pdp_root_pointer(shadow_ring_context,
> workload->shadow_mm->shadow_page_table);
> + intel_vgpu_unpin_mm(workload->shadow_mm);
>
> intel_gvt_hypervisor_read_gpa(vgpu,
> workload->ring_context_gpa +
> diff --git a/drivers/gpu/drm/i915/gvt/vgpu.c b/drivers/gpu/drm/i915/gvt/vgpu.c
> index fe65fff..2ed8aaf 100644
> --- a/drivers/gpu/drm/i915/gvt/vgpu.c
> +++ b/drivers/gpu/drm/i915/gvt/vgpu.c
> @@ -506,7 +506,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_invalidate_ppgtt(vgpu);
> /*fence will not be reset during virtual reset */
> if (dmlr) {
> intel_vgpu_reset_gtt(vgpu);
> --
We already have a interface intel_vgpu_reset_gtt for gtt, better just extend it.
> 1.9.1
>
> _______________________________________________
> intel-gvt-dev mailing list
> intel-gvt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev
--
Thanks,
Changbin Du
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gvt-dev/attachments/20170922/e8db5ec1/attachment-0001.sig>
More information about the intel-gvt-dev
mailing list