[PATCH 3/6] drm/i915/gvt: Refine error handling for prepare_execlist_workload

Zhenyu Wang zhenyuw at linux.intel.com
Fri Aug 11 02:11:11 UTC 2017


On 2017.08.10 23:31:37 +0800, fred gao wrote:
> @@ -498,6 +481,66 @@ void release_shadow_wa_ctx(struct intel_shadow_wa_ctx *wa_ctx)
>  	i915_gem_object_put(wa_ctx->indirect_ctx.obj);
>  }
>  
> +static int prepare_execlist_workload(struct intel_vgpu_workload *workload)
> +{
> +	struct intel_vgpu *vgpu = workload->vgpu;
> +	struct execlist_ctx_descriptor_format ctx[2];
> +	int ring_id = workload->ring_id;
> +	int ret;
> +
> +	if (!workload->emulate_schedule_in)
> +		return 0;

This looks wrong, the flag for that is to decide either or not we
should handle execlist emulation, it might not be clean, but doesn't
affect current submitting workload, so can't skip below preparation.

How about your testing of this series?


> +
> +	ret = intel_vgpu_pin_mm(workload->shadow_mm);
> +	if (ret) {
> +		gvt_vgpu_err("fail to vgpu pin mm\n");
> +		goto err_ret;
> +	}
> +
> +	ret = intel_vgpu_sync_oos_pages(workload->vgpu);
> +	if (ret) {
> +		gvt_vgpu_err("fail to vgpu sync oos pages\n");
> +		goto err_unpin_mm;
> +	}
> +
> +	ret = intel_vgpu_flush_post_shadow(workload->vgpu);
> +	if (ret) {
> +		gvt_vgpu_err("fail to flush post shadow\n");
> +		goto err_unpin_mm;
> +	}
> +
> +	ret = prepare_shadow_batch_buffer(workload);
> +	if (ret) {
> +		gvt_vgpu_err("fail to prepare_shadow_batch_buffer\n");
> +		goto err_unpin_mm;
> +	}
> +
> +	ret = prepare_shadow_wa_ctx(&workload->wa_ctx);
> +	if (ret) {
> +		gvt_vgpu_err("fail to prepare_shadow_wa_ctx\n");
> +		goto err_shadow_batch;
> +	}
> +
> +	ctx[0] = *get_desc_from_elsp_dwords(&workload->elsp_dwords, 1);
> +	ctx[1] = *get_desc_from_elsp_dwords(&workload->elsp_dwords, 0);
> +
> +	ret = emulate_execlist_schedule_in(&vgpu->execlist[ring_id], ctx);
> +	if (ret) {
> +		gvt_vgpu_err("fail to emulate execlist schedule in\n");
> +		goto err_unpin_wa;
> +	}
> +	return 0;
> +
> +err_unpin_wa:
> +	release_shadow_wa_ctx(&workload->wa_ctx);
> +err_shadow_batch:
> +	release_shadow_batch_buffer(workload);
> +err_unpin_mm:
> +	intel_vgpu_unpin_mm(workload->shadow_mm);
> +err_ret:
> +	return ret;
> +}
> +
>  static int complete_execlist_workload(struct intel_vgpu_workload *workload)
>  {
>  	struct intel_vgpu *vgpu = workload->vgpu;
> @@ -511,8 +554,10 @@ static int complete_execlist_workload(struct intel_vgpu_workload *workload)
>  	gvt_dbg_el("complete workload %p status %d\n", workload,
>  			workload->status);
>  
> -	release_shadow_batch_buffer(workload);
> -	release_shadow_wa_ctx(&workload->wa_ctx);
> +	if (workload->req) {
> +		release_shadow_batch_buffer(workload);
> +		release_shadow_wa_ctx(&workload->wa_ctx);
> +	}
>  
>  	if (workload->status || (vgpu->resetting_eng & ENGINE_MASK(ring_id))) {
>  		/* if workload->status is not successful means HW GPU
> -- 
> 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/20170811/d83301b6/attachment.sig>


More information about the intel-gvt-dev mailing list