Changes in kernel/generic/src/interrupt/interrupt.c [11909ce3:8df5f20] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/interrupt/interrupt.c
r11909ce3 r8df5f20 58 58 #include <trace.h> 59 59 60 /*61 * If IVT_ITEMS is zero (e.g. for special/abs32le) we hide completely any62 * access to the exception table array and panic if the function is called63 * at all. It also silences (correct) compiler warnings about possible64 * out-of-bound array access.65 */66 67 60 exc_table_t exc_table[IVT_ITEMS]; 68 61 IRQ_SPINLOCK_INITIALIZE(exctbl_lock); … … 84 77 #if (IVT_ITEMS > 0) 85 78 assert(n < IVT_ITEMS); 79 #endif 86 80 87 81 irq_spinlock_lock(&exctbl_lock, true); … … 97 91 98 92 return old; 99 #else100 panic("No space for any exception handler, cannot register.");101 #endif102 93 } 103 94 … … 112 103 #if (IVT_ITEMS > 0) 113 104 assert(n < IVT_ITEMS); 105 #endif 114 106 115 107 /* Account user cycles */ 116 if (THREAD) 108 if (THREAD) { 109 irq_spinlock_lock(&THREAD->lock, false); 117 110 thread_update_accounting(true); 111 irq_spinlock_unlock(&THREAD->lock, false); 112 } 118 113 119 114 /* Account CPU usage if it woke up from sleep */ 120 if (CPU && CPU_LOCAL->idle) { 115 if (CPU && CPU->idle) { 116 irq_spinlock_lock(&CPU->lock, false); 121 117 uint64_t now = get_cycle(); 122 atomic_time_increment(&CPU->idle_cycles, now - CPU_LOCAL->last_cycle); 123 CPU_LOCAL->last_cycle = now; 124 CPU_LOCAL->idle = false; 118 CPU->idle_cycles += now - CPU->last_cycle; 119 CPU->last_cycle = now; 120 CPU->idle = false; 121 irq_spinlock_unlock(&CPU->lock, false); 125 122 } 126 123 … … 152 149 153 150 /* Do not charge THREAD for exception cycles */ 154 if (THREAD) 151 if (THREAD) { 152 irq_spinlock_lock(&THREAD->lock, false); 155 153 THREAD->last_cycle = end_cycle; 156 #else 157 panic("No space for any exception handler, yet we want to handle some exception."); 158 #endif 154 irq_spinlock_unlock(&THREAD->lock, false); 155 } 159 156 } 160 157
Note:
See TracChangeset
for help on using the changeset viewer.