[PATCH v2 08/15] drm/i915/gvt: Factor out intel_vgpu_{get_or_create_ppgtt_mm, find_destroy_ppgtt_mm} interfaces
Zhenyu Wang
zhenyuw at linux.intel.com
Wed Jan 3 07:36:51 UTC 2018
On 2018.01.02 16:29:39 +0800, changbin.du at intel.com wrote:
> From: Changbin Du <changbin.du at intel.com>
>
> Factor out these two interfaces so we can kill some duplicated code in
> scheduler.c.
>
> Signed-off-by: Changbin Du <changbin.du at intel.com>
> Reviewed-by: Zhi Wang <zhi.a.wang at intel.com>
> ---
> drivers/gpu/drm/i915/gvt/gtt.c | 28 ++++++++++++----------------
> drivers/gpu/drm/i915/gvt/gtt.h | 4 ++--
> drivers/gpu/drm/i915/gvt/handlers.c | 11 +++++++----
> drivers/gpu/drm/i915/gvt/scheduler.c | 17 +++++------------
> 4 files changed, 26 insertions(+), 34 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gvt/gtt.c b/drivers/gpu/drm/i915/gvt/gtt.c
> index 3ccd3b0..8568aad 100644
> --- a/drivers/gpu/drm/i915/gvt/gtt.c
> +++ b/drivers/gpu/drm/i915/gvt/gtt.c
> @@ -2270,20 +2270,19 @@ struct intel_vgpu_mm *intel_vgpu_find_ppgtt_mm(struct intel_vgpu *vgpu,
> }
>
> /**
> - * intel_vgpu_g2v_create_ppgtt_mm - create a PPGTT mm object from
> - * g2v notification
> + * intel_vgpu_get_or_create_ppgtt_mm - find or create a PPGTT mm object.
> * @vgpu: a vGPU
> * @root_entry_type: ppgtt root entry type
> * @pdps: guest pdps
> *
> - * This function is used to create a PPGTT mm object from a guest to GVT-g
> - * notification.
> + * This function is used to find or create a PPGTT mm object from a guest.
> *
> * Returns:
> * Zero on success, negative error code if failed.
> */
> -int intel_vgpu_g2v_create_ppgtt_mm(struct intel_vgpu *vgpu,
> - intel_gvt_gtt_type_t root_entry_type, u64 pdps[GEN8_3LVL_PDPES])
> +struct intel_vgpu_mm *intel_vgpu_get_or_create_ppgtt_mm(
> + struct intel_vgpu *vgpu, intel_gvt_gtt_type_t root_entry_type,
> + u64 pdps[GEN8_3LVL_PDPES])
Better not bloat the name, even you does lookup during create, not necessary
to reflect in name.
> {
> struct intel_vgpu_mm *mm;
>
> @@ -2292,27 +2291,23 @@ int intel_vgpu_g2v_create_ppgtt_mm(struct intel_vgpu *vgpu,
> intel_vgpu_mm_get(mm);
> } else {
> mm = intel_vgpu_create_ppgtt_mm(vgpu, root_entry_type, pdps);
> - if (IS_ERR(mm)) {
> + if (IS_ERR(mm))
> gvt_vgpu_err("fail to create mm\n");
> - return PTR_ERR(mm);
> - }
> }
> - return 0;
> + return mm;
> }
>
> /**
> - * intel_vgpu_g2v_destroy_ppgtt_mm - destroy a PPGTT mm object from
> - * g2v notification
> + * intel_vgpu_find_destroy_ppgtt_mm - find and destroy a PPGTT mm object.
> * @vgpu: a vGPU
> * @pdps: guest pdps
> *
> - * This function is used to create a PPGTT mm object from a guest to GVT-g
> - * notification.
> + * This function is used to find a PPGTT mm object from a guest and destroy it.
> *
> * Returns:
> * Zero on success, negative error code if failed.
> */
> -int intel_vgpu_g2v_destroy_ppgtt_mm(struct intel_vgpu *vgpu,
> +int intel_vgpu_find_destroy_ppgtt_mm(struct intel_vgpu *vgpu,
> u64 pdps[GEN8_3LVL_PDPES])
> {
ditto
> struct intel_vgpu_mm *mm;
> @@ -2322,7 +2317,8 @@ int intel_vgpu_g2v_destroy_ppgtt_mm(struct intel_vgpu *vgpu,
> gvt_vgpu_err("fail to find ppgtt instance.\n");
> return -EINVAL;
> }
> - intel_vgpu_mm_put(mm);
> +
> + intel_vgpu_destroy_mm(mm);
> return 0;
> }
>
> diff --git a/drivers/gpu/drm/i915/gvt/gtt.h b/drivers/gpu/drm/i915/gvt/gtt.h
> index fa94e97..4533e10 100644
> --- a/drivers/gpu/drm/i915/gvt/gtt.h
> +++ b/drivers/gpu/drm/i915/gvt/gtt.h
> @@ -268,10 +268,10 @@ unsigned long intel_vgpu_gma_to_gpa(struct intel_vgpu_mm *mm,
> struct intel_vgpu_mm *intel_vgpu_find_ppgtt_mm(struct intel_vgpu *vgpu,
> u64 pdps[]);
>
> -int intel_vgpu_g2v_create_ppgtt_mm(struct intel_vgpu *vgpu,
> +struct intel_vgpu_mm *intel_vgpu_get_or_create_ppgtt_mm(struct intel_vgpu *vgpu,
> intel_gvt_gtt_type_t root_entry_type, u64 pdps[]);
>
> -int intel_vgpu_g2v_destroy_ppgtt_mm(struct intel_vgpu *vgpu, u64 pdps[]);
> +int intel_vgpu_find_destroy_ppgtt_mm(struct intel_vgpu *vgpu, u64 pdps[]);
>
> int intel_vgpu_emulate_ggtt_mmio_read(struct intel_vgpu *vgpu,
> unsigned int off, void *p_data, unsigned int bytes);
> diff --git a/drivers/gpu/drm/i915/gvt/handlers.c b/drivers/gpu/drm/i915/gvt/handlers.c
> index 024efb4..84ff92d 100644
> --- a/drivers/gpu/drm/i915/gvt/handlers.c
> +++ b/drivers/gpu/drm/i915/gvt/handlers.c
> @@ -1139,6 +1139,7 @@ static int pvinfo_mmio_read(struct intel_vgpu *vgpu, unsigned int offset,
>
> static int handle_g2v_notification(struct intel_vgpu *vgpu, int notification)
> {
> + struct intel_vgpu_mm *mm;
> u64 *pdps;
> int ret = 0;
>
> @@ -1146,20 +1147,22 @@ static int handle_g2v_notification(struct intel_vgpu *vgpu, int notification)
>
> switch (notification) {
> case VGT_G2V_PPGTT_L3_PAGE_TABLE_CREATE:
> - ret = intel_vgpu_g2v_create_ppgtt_mm(vgpu,
> + mm = intel_vgpu_get_or_create_ppgtt_mm(vgpu,
> GTT_TYPE_PPGTT_ROOT_L3_ENTRY,
> pdps);
> + ret = IS_ERR(mm) ? PTR_ERR(mm) : 0;
> break;
> case VGT_G2V_PPGTT_L3_PAGE_TABLE_DESTROY:
> - ret = intel_vgpu_g2v_destroy_ppgtt_mm(vgpu, pdps);
> + ret = intel_vgpu_find_destroy_ppgtt_mm(vgpu, pdps);
> break;
> case VGT_G2V_PPGTT_L4_PAGE_TABLE_CREATE:
> - ret = intel_vgpu_g2v_create_ppgtt_mm(vgpu,
> + mm = intel_vgpu_get_or_create_ppgtt_mm(vgpu,
> GTT_TYPE_PPGTT_ROOT_L4_ENTRY,
> pdps);
> + ret = IS_ERR(mm) ? PTR_ERR(mm) : 0;
> break;
> case VGT_G2V_PPGTT_L4_PAGE_TABLE_DESTROY:
> - ret = intel_vgpu_g2v_destroy_ppgtt_mm(vgpu, pdps);
> + ret = intel_vgpu_find_destroy_ppgtt_mm(vgpu, pdps);
> break;
> case VGT_G2V_EXECLIST_CONTEXT_CREATE:
> case VGT_G2V_EXECLIST_CONTEXT_DESTROY:
> diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c
> index 23c33e6..3440ff2 100644
> --- a/drivers/gpu/drm/i915/gvt/scheduler.c
> +++ b/drivers/gpu/drm/i915/gvt/scheduler.c
> @@ -1197,18 +1197,11 @@ static int prepare_mm(struct intel_vgpu_workload *workload)
>
> read_guest_pdps(workload->vgpu, workload->ring_context_gpa, pdps);
>
> - mm = intel_vgpu_find_ppgtt_mm(workload->vgpu, pdps);
> - if (mm) {
> - intel_vgpu_mm_get(mm);
> - } else {
> -
> - mm = intel_vgpu_create_ppgtt_mm(workload->vgpu, root_entry_type,
> - pdps);
> - if (IS_ERR(mm)) {
> - gvt_vgpu_err("fail to create mm object.\n");
> - return PTR_ERR(mm);
> - }
> - }
> + mm = intel_vgpu_get_or_create_ppgtt_mm(workload->vgpu, root_entry_type,
> + pdps);
> + if (IS_ERR(mm))
> + return PTR_ERR(mm);
> +
> workload->shadow_mm = mm;
> return 0;
> }
> --
> 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/20180103/a816df8d/attachment.sig>
More information about the intel-gvt-dev
mailing list