OSDN Git Service

drm/i915: Defer kicking the tasklet until all rescheduling is complete
authorChris Wilson <chris@chris-wilson.co.uk>
Tue, 31 Mar 2020 11:48:52 +0000 (12:48 +0100)
committerChris Wilson <chris@chris-wilson.co.uk>
Tue, 31 Mar 2020 20:42:12 +0000 (21:42 +0100)
Since we may kick more than engine, and may kick each one a couple of
times, coalesce the tasklet execution to the end. This also ensures that
we have the chance to run the tasklet immediately after priority
bumping.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200331114852.11583-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_scheduler.c

index 68b06a7..6121856 100644 (file)
@@ -464,11 +464,15 @@ int i915_sched_node_add_dependency(struct i915_sched_node *node,
        if (!dep)
                return -ENOMEM;
 
+       local_bh_disable();
+
        if (!__i915_sched_node_add_dependency(node, signal, dep,
                                              I915_DEPENDENCY_EXTERNAL |
                                              I915_DEPENDENCY_ALLOC))
                i915_dependency_free(dep);
 
+       local_bh_enable(); /* kick submission tasklet */
+
        return 0;
 }