diff --git a/src/system/kernel/scheduler/scheduler.cpp b/src/system/kernel/scheduler/scheduler.cpp index f3fe8d7cd1..105d7fa13e 100644 --- a/src/system/kernel/scheduler/scheduler.cpp +++ b/src/system/kernel/scheduler/scheduler.cpp @@ -1101,6 +1101,11 @@ _scheduler_reschedule(void) oldThread->state = oldThread->next_state; scheduler_thread_data* schedulerOldThreadData = oldThread->scheduler_data; + // return time spent in interrupts + schedulerOldThreadData->stolen_time + += gCPU[thisCPU].interrupt_time + - schedulerOldThreadData->last_interrupt_time; + bool enqueueOldThread = false; bool putOldThreadAtBack = false; switch (oldThread->next_state) { @@ -1184,6 +1189,10 @@ _scheduler_reschedule(void) // track CPU activity track_cpu_activity(oldThread, nextThread, thisCore); + // start counting time spent in interrupts + nextThread->scheduler_data->last_interrupt_time + = gCPU[thisCPU].interrupt_time; + if (nextThread != oldThread || oldThread->cpu->preempted) { timer* quantumTimer = &oldThread->cpu->quantum_timer; if (!oldThread->cpu->preempted) diff --git a/src/system/kernel/scheduler/scheduler_common.h b/src/system/kernel/scheduler/scheduler_common.h index 887060368e..190e968978 100644 --- a/src/system/kernel/scheduler/scheduler_common.h +++ b/src/system/kernel/scheduler/scheduler_common.h @@ -162,6 +162,7 @@ struct scheduler_thread_data { bigtime_t time_left; bigtime_t stolen_time; bigtime_t quantum_start; + bigtime_t last_interrupt_time; bigtime_t measure_active_time; bigtime_t measure_time;