[PATCH v4] drm/i915/gvt: clear the vGPU reset logic
Zhenyu Wang
zhenyuw at linux.intel.com
Tue Feb 21 08:15:15 UTC 2017
On 2017.02.21 15:52:56 +0800, Ping Gao wrote:
> Releasing shadow PPGTT pages is not enough when vGPU reset, the
> guest page table tracking data should has same life-cycle with
> all the shadow PPGTT pages; Otherwise there is no chance to
> re-shadow the PPGTT pages without free the guest page table
> tracking data.
>
> This patch clear the PPGTT reset logic and make the vGPU reset in
> working order.
>
> v2: refactor some logic to avoid code duplicated.
> v3: remove useless macro and add comments from Christophe.
> v4: keep reset logic in reset function.
>
> Signed-off-by: Ping Gao <ping.a.gao at intel.com>
> ---
Looks good to me, applied. Thanks!
> drivers/gpu/drm/i915/gvt/gtt.c | 35 +++++++++++++++++++++++++----------
> 1 file changed, 25 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c
> index 28c9234..b5c8332 100644
> --- a/drivers/gpu/drm/i915/gvt/gtt.c
> +++ b/drivers/gpu/drm/i915/gvt/gtt.c
> @@ -2015,6 +2015,22 @@ int intel_vgpu_init_gtt(struct intel_vgpu *vgpu)
> return create_scratch_page_tree(vgpu);
> }
>
> +static void intel_vgpu_free_mm(struct intel_vgpu *vgpu, int type)
> +{
> + 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 == type) {
> + vgpu->gvt->gtt.mm_free_page_table(mm);
> + list_del(&mm->list);
> + list_del(&mm->lru_list);
> + kfree(mm);
> + }
> + }
> +}
> +
> /**
> * intel_vgpu_clean_gtt - clean up per-vGPU graphics memory virulization
> * @vgpu: a vGPU
> @@ -2027,19 +2043,11 @@ int intel_vgpu_init_gtt(struct intel_vgpu *vgpu)
> */
> void intel_vgpu_clean_gtt(struct intel_vgpu *vgpu)
> {
> - struct list_head *pos, *n;
> - struct intel_vgpu_mm *mm;
> -
> ppgtt_free_all_shadow_page(vgpu);
> release_scratch_page_tree(vgpu);
>
> - list_for_each_safe(pos, n, &vgpu->gtt.mm_list_head) {
> - mm = container_of(pos, struct intel_vgpu_mm, list);
> - vgpu->gvt->gtt.mm_free_page_table(mm);
> - list_del(&mm->list);
> - list_del(&mm->lru_list);
> - kfree(mm);
> - }
> + intel_vgpu_free_mm(vgpu, INTEL_GVT_MM_PPGTT);
> + intel_vgpu_free_mm(vgpu, INTEL_GVT_MM_GGTT);
> }
>
> static void clean_spt_oos(struct intel_gvt *gvt)
> @@ -2322,6 +2330,13 @@ void intel_vgpu_reset_gtt(struct intel_vgpu *vgpu, bool dmlr)
> 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.
> + */
> + intel_vgpu_free_mm(vgpu, INTEL_GVT_MM_PPGTT);
> +
> if (!dmlr)
> return;
>
> --
> 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/20170221/92d42999/attachment-0001.sig>
More information about the intel-gvt-dev
mailing list