[PATCH v2] drm/i915/gvt: Use force single submit flag to distinguish gvt request from i915 request

Zhenyu Wang zhenyuw at linux.intel.com
Wed Mar 22 05:15:32 UTC 2017


On 2017.03.22 12:35:31 +0800, changbin.du at intel.com wrote:
> From: Changbin Du <changbin.du at intel.com>
> 
> In my previous Commit ab9da627906a ("drm/i915: make context status
> notifier head be per engine") rely on scheduler->current_workload[x]
> to distinguish gvt spacial request from i915 request. But this is
> not always true since no synchronization between workload_thread and
> lrc irq handler.
> 
>     lrc irq handler               workload_thread
>          ----                          ----
>   pick i915 requests;
>                                 intel_vgpu_submit_execlist();
>                                 current_workload[x] = xxx;
>   shadow_context_status_change();
> 
> Then current_workload[x] is not null but current request is of i915 self.
> So instead we check ctx flag CONTEXT_FORCE_SINGLE_SUBMISSION. Only gvt
> request set this flag and always set.
>
> v2: Reverse the order of multi-condition 'if' statement.
> 
> Fixes: ab9da6279 ("drm/i915: make context status notifier head be per engine")
> Signed-off-by: Changbin Du <changbin.du at intel.com>
> Reviewed-by: Yulei Zhang <yulei.zhang at intel.com>
> ---

I think ideally we can have flag for each request to say if any notification
is required to call notifier chain for real, as currently notifier change
is only for single submission on gvt, or instead checking that at status change
function.

But as ab9da6279 ("drm/i915: make context status notifier head be per engine") is already
queued in -fixes, I'll merge this for next pull.


>  drivers/gpu/drm/i915/gvt/scheduler.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/gvt/scheduler.c b/drivers/gpu/drm/i915/gvt/scheduler.c
> index ad8876bd..d9a7353 100644
> --- a/drivers/gpu/drm/i915/gvt/scheduler.c
> +++ b/drivers/gpu/drm/i915/gvt/scheduler.c
> @@ -127,6 +127,11 @@ static int populate_shadow_context(struct intel_vgpu_workload *workload)
>  	return 0;
>  }
>  
> +static inline bool is_gvt_request(struct drm_i915_gem_request *req)
> +{
> +	return i915_gem_context_force_single_submission(req->ctx);
> +}
> +
>  static int shadow_context_status_change(struct notifier_block *nb,
>  		unsigned long action, void *data)
>  {
> @@ -137,7 +142,7 @@ static int shadow_context_status_change(struct notifier_block *nb,
>  	struct intel_vgpu_workload *workload =
>  		scheduler->current_workload[req->engine->id];
>  
> -	if (unlikely(!workload))
> +	if (!is_gvt_request(req) || unlikely(!workload))
>  		return NOTIFY_OK;
>  
>  	switch (action) {
> -- 
> 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/20170322/3b5bad2f/attachment.sig>


More information about the intel-gvt-dev mailing list