]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/i915/gvt: Kick scheduler when new workload queued
authorChangbin Du <changbin.du@intel.com>
Wed, 29 Nov 2017 07:40:07 +0000 (15:40 +0800)
committerZhenyu Wang <zhenyuw@linux.intel.com>
Mon, 4 Dec 2017 03:24:35 +0000 (11:24 +0800)
The current schedule policy rely on a 1ms timer to execute workload. This
can introduce maximum 1ms unnecessary latency. This is especially bad for
small media workloads.

And I don't think we need this timer for QoS, but the change is not simply
remove the code. So I made a new API intel_gvt_kick_schedule() for future
change.

Signed-off-by: Changbin Du <changbin.du@intel.com>
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com>
drivers/gpu/drm/i915/gvt/sched_policy.c
drivers/gpu/drm/i915/gvt/sched_policy.h
drivers/gpu/drm/i915/gvt/scheduler.c

index 03532dfc0cd51b8342e50da61524024dafc8ac34..eea1a2f920990a17f9ead7f91187b83c01e85eb6 100644 (file)
@@ -372,6 +372,11 @@ void intel_vgpu_start_schedule(struct intel_vgpu *vgpu)
        vgpu->gvt->scheduler.sched_ops->start_schedule(vgpu);
 }
 
+void intel_gvt_kick_schedule(struct intel_gvt *gvt)
+{
+       intel_gvt_request_service(gvt, INTEL_GVT_REQUEST_EVENT_SCHED);
+}
+
 void intel_vgpu_stop_schedule(struct intel_vgpu *vgpu)
 {
        struct intel_gvt_workload_scheduler *scheduler =
index ba00a5f7455fd57688f0c3292951e19b7ad66ec1..7b59e3e88b8b869776c375181e7aceef884a95be 100644 (file)
@@ -57,4 +57,6 @@ void intel_vgpu_start_schedule(struct intel_vgpu *vgpu);
 
 void intel_vgpu_stop_schedule(struct intel_vgpu *vgpu);
 
+void intel_gvt_kick_schedule(struct intel_gvt *gvt);
+
 #endif
index abf71be092f8568dfcce15906e37f47c4032d714..76d2812f2f030ce9ca3d6dbf9bea0680d050b43d 100644 (file)
@@ -1337,5 +1337,6 @@ void intel_vgpu_queue_workload(struct intel_vgpu_workload *workload)
 {
        list_add_tail(&workload->list,
                workload_q_head(workload->vgpu, workload->ring_id));
+       intel_gvt_kick_schedule(workload->vgpu->gvt);
        wake_up(&workload->vgpu->gvt->scheduler.waitq[workload->ring_id]);
 }