mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-16 02:44:26 +08:00
drm/i915/gvt: Use force single submit flag to distinguish gvt request from i915 request
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@intel.com> Reviewed-by: Yulei Zhang <yulei.zhang@intel.com> Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
This commit is contained in:
parent
359b693100
commit
bc2d4b62db
@ -127,6 +127,11 @@ static int populate_shadow_context(struct intel_vgpu_workload *workload)
|
|||||||
return 0;
|
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,
|
static int shadow_context_status_change(struct notifier_block *nb,
|
||||||
unsigned long action, void *data)
|
unsigned long action, void *data)
|
||||||
{
|
{
|
||||||
@ -139,7 +144,7 @@ static int shadow_context_status_change(struct notifier_block *nb,
|
|||||||
struct intel_vgpu_workload *workload =
|
struct intel_vgpu_workload *workload =
|
||||||
scheduler->current_workload[req->engine->id];
|
scheduler->current_workload[req->engine->id];
|
||||||
|
|
||||||
if (unlikely(!workload))
|
if (!is_gvt_request(req) || unlikely(!workload))
|
||||||
return NOTIFY_OK;
|
return NOTIFY_OK;
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
|
Loading…
Reference in New Issue
Block a user