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