scheduler: Return time stolen by irq and ipi handlers

This commit is contained in:
Pawel Dziepak
2013-11-22 04:25:37 +01:00
parent 1a7eb50254
commit 7c7b9b795b
2 changed files with 10 additions and 0 deletions
@@ -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)
@@ -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;