Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/interrupt/interrupt.c

    rb584cd4 rdecfbe56  
    9999void exc_dispatch(unsigned int n, istate_t *istate)
    100100{
     101        ASSERT(CPU);
     102       
    101103#if (IVT_ITEMS > 0)
    102104        ASSERT(n < IVT_ITEMS);
     
    110112        }
    111113       
     114        /* Account CPU usage if it has waked up from sleep */
     115        irq_spinlock_lock(&CPU->lock, false);
     116        if (CPU->idle) {
     117                uint64_t now = get_cycle();
     118                CPU->idle_cycles += now - CPU->last_cycle;
     119                CPU->last_cycle = now;
     120                CPU->idle = false;
     121        }
     122        irq_spinlock_unlock(&CPU->lock, false);
     123       
    112124        uint64_t begin_cycle = get_cycle();
    113125       
     
    131143        uint64_t end_cycle = get_cycle();
    132144       
     145        irq_spinlock_lock(&exctbl_lock, false);
    133146        exc_table[n].cycles += end_cycle - begin_cycle;
    134147        exc_table[n].count++;
     148        irq_spinlock_unlock(&exctbl_lock, false);
    135149       
    136150        /* Do not charge THREAD for exception cycles */
Note: See TracChangeset for help on using the changeset viewer.