- 论坛徽章:
- 0
|
本帖最后由 要有上进心 于 2013-06-09 16:26 编辑
do_irq会调用 mask_and_ack_8259a这个函数 禁止中断线,我想问的是,禁止中断线的原因是不是因为有些中断是在开中断下执行的,防止同种中断重入,而禁止中断线?
void mask_and_ack_8259A(unsigned int irq)
{
。。。。。。
handle_real_irq:
if (irq & {
inb(PIC_SLAVE_IMR); /* DUMMY - (do we need this?) */
outb(cached_slave_mask, PIC_SLAVE_IMR);
outb(0x60+(irq&7),PIC_SLAVE_CMD);/* 'Specific EOI' to slave */
outb(0x60+PIC_CASCADE_IR,PIC_MASTER_CMD); /* 'Specific EOI' to master-IRQ2 */
} else {
inb(PIC_MASTER_IMR); /* DUMMY - (do we need this?) */
outb(cached_master_mask, PIC_MASTER_IMR);
outb(0x60+irq,PIC_MASTER_CMD); /* 'Specific EOI to master */
}
spin_unlock_irqrestore(&i8259A_lock, flags);
return;。。。。。。
}
还有在写入imr寄存器之前,为什么要先读一下啊?
|
|