|
@@ -198,11 +198,6 @@ static void tbs_sched_func(struct gvt_sched_data *sched_data)
|
|
|
struct intel_gvt_workload_scheduler *scheduler = &gvt->scheduler;
|
|
|
struct vgpu_sched_data *vgpu_data;
|
|
|
struct intel_vgpu *vgpu = NULL;
|
|
|
- static uint64_t timer_check;
|
|
|
-
|
|
|
- if (!(timer_check++ % GVT_TS_BALANCE_PERIOD_MS))
|
|
|
- gvt_balance_timeslice(sched_data);
|
|
|
-
|
|
|
/* no active vgpu or has already had a target */
|
|
|
if (list_empty(&sched_data->lru_runq_head) || scheduler->next_vgpu)
|
|
|
goto out;
|
|
@@ -227,9 +222,19 @@ out:
|
|
|
void intel_gvt_schedule(struct intel_gvt *gvt)
|
|
|
{
|
|
|
struct gvt_sched_data *sched_data = gvt->scheduler.sched_data;
|
|
|
+ static uint64_t timer_check;
|
|
|
|
|
|
mutex_lock(&gvt->lock);
|
|
|
+
|
|
|
+ if (test_and_clear_bit(INTEL_GVT_REQUEST_SCHED,
|
|
|
+ (void *)&gvt->service_request)) {
|
|
|
+ if (!(timer_check++ % GVT_TS_BALANCE_PERIOD_MS))
|
|
|
+ gvt_balance_timeslice(sched_data);
|
|
|
+ }
|
|
|
+ clear_bit(INTEL_GVT_REQUEST_EVENT_SCHED, (void *)&gvt->service_request);
|
|
|
+
|
|
|
tbs_sched_func(sched_data);
|
|
|
+
|
|
|
mutex_unlock(&gvt->lock);
|
|
|
}
|
|
|
|