60,6 → 60,7 |
int inum; |
|
while ((inum = pic_get_pending()) != -1) { |
bool ack = false; |
irq_t *irq = irq_dispatch_and_lock(inum); |
if (irq) { |
/* |
68,17 → 69,11 |
|
if (irq->preack) { |
/* Acknowledge the interrupt before processing */ |
if (irq->cir) |
irq->cir(irq->cir_arg, irq->inr); |
pic_ack_interrupt(inum); |
ack = true; |
} |
|
irq->handler(irq); |
|
if (!irq->preack) { |
if (irq->cir) |
irq->cir(irq->cir_arg, irq->inr); |
} |
|
irq->handler(irq, irq->arg); |
spinlock_unlock(&irq->lock); |
} else { |
/* |
85,9 → 80,12 |
* Spurious interrupt. |
*/ |
#ifdef CONFIG_DEBUG |
printf("cpu%u: spurious interrupt (inum=%d)\n", CPU->id, inum); |
printf("cpu%d: spurious interrupt (inum=%d)\n", CPU->id, inum); |
#endif |
} |
|
if (!ack) |
pic_ack_interrupt(inum); |
} |
} |
|
94,8 → 92,8 |
|
static void exception_decrementer(int n, istate_t *istate) |
{ |
clock(); |
start_decrementer(); |
clock(); |
} |
|
|