Changes in kernel/arch/ia64/src/interrupt.c [d99c1d2:da1bafb] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/src/interrupt.c
rd99c1d2 rda1bafb 57 57 #include <putchar.h> 58 58 59 #define VECTORS_64_BUNDLE 20 60 #define VECTORS_16_BUNDLE 48 61 #define VECTORS_16_BUNDLE_START 0x5000 62 #define VECTOR_MAX 0x7f00 63 64 #define BUNDLE_SIZE 16 59 #define VECTORS_64_BUNDLE 20 60 #define VECTORS_16_BUNDLE 48 61 #define VECTORS_16_BUNDLE_START 0x5000 62 63 #define VECTOR_MAX 0x7f00 64 65 #define BUNDLE_SIZE 16 65 66 66 67 static const char *vector_names_64_bundle[VECTORS_64_BUNDLE] = { … … 134 135 static void dump_interrupted_context(istate_t *istate) 135 136 { 136 const char *ifa = symtab_fmt_name_lookup(istate->cr_ifa);137 const char *iipa = symtab_fmt_name_lookup(istate->cr_iipa);138 const char *iip = symtab_fmt_name_lookup(istate->cr_iip);139 140 137 putchar('\n'); 141 138 printf("Interrupted context dump:\n"); … … 149 146 istate->cr_ipsr); 150 147 151 printf("cr.iip=%#018llx, #%d\t(%s)\n", istate->cr_iip, 152 istate->cr_isr.ei, iip); 153 printf("cr.iipa=%#018llx\t(%s)\n", istate->cr_iipa, iipa); 154 printf("cr.ifa=%#018llx\t(%s)\n", istate->cr_ifa, ifa); 148 printf("cr.iip=%#018llx, #%d\t(%s)\n", istate->cr_iip, istate->cr_isr.ei, 149 symtab_fmt_name_lookup(istate->cr_iip)); 150 printf("cr.iipa=%#018llx\t(%s)\n", istate->cr_iipa, 151 symtab_fmt_name_lookup(istate->cr_iipa)); 152 printf("cr.ifa=%#018llx\t(%s)\n", istate->cr_ifa, 153 symtab_fmt_name_lookup(istate->cr_ifa)); 155 154 } 156 155 … … 218 217 istate->cr_ipsr.ri++; 219 218 } 220 219 221 220 return syscall_handler(istate->in0, istate->in1, istate->in2, 222 221 istate->in3, istate->in4, istate->in5, istate->in6); … … 234 233 static void end_of_local_irq(void) 235 234 { 236 asm volatile ("mov cr.eoi=r0;;"); 237 } 238 235 asm volatile ( 236 "mov cr.eoi=r0;;" 237 ); 238 } 239 239 240 240 void external_interrupt(uint64_t vector, istate_t *istate) 241 241 { 242 242 cr_ivr_t ivr; 243 irq_t *irq;244 243 245 244 ivr.value = ivr_read(); 246 245 srlz_d(); 247 246 247 irq_t *irq; 248 248 249 switch (ivr.vector) { 249 250 case INTERRUPT_SPURIOUS: … … 252 253 #endif 253 254 break; 254 255 255 256 #ifdef CONFIG_SMP 256 257 case VECTOR_TLB_SHOOTDOWN_IPI: … … 259 260 break; 260 261 #endif 261 262 262 263 case INTERRUPT_TIMER: 263 264 irq = irq_dispatch_and_lock(ivr.vector); 264 265 if (irq) { 265 266 irq->handler(irq); 266 spinlock_unlock(&irq->lock);267 irq_spinlock_unlock(&irq->lock, false); 267 268 } else { 268 269 panic("Unhandled Internal Timer Interrupt (%d).", … … 283 284 if (!irq->preack) 284 285 end_of_local_irq(); 285 spinlock_unlock(&irq->lock);286 irq_spinlock_unlock(&irq->lock, false); 286 287 } else { 287 288 /*
Note:
See TracChangeset
for help on using the changeset viewer.