- 论坛徽章:
- 0
|
> 1. 这里ULK3为什么要强调在A确认中断之前?难道确认中断之后就不会丢失中断吗?
A确认中断时,已经获得了irq_desc[irq].lock,而disable_irq必须也要获取到该锁,所以,当A确认中断之后,B已经没有机会disable_irq了,必须要等到A执行完之后,才可以;
> 2. 这种情况下,中断真的会丢失吗?A在进入do_IRQ()函数之后,在第三行将IRQ_PENDING置位了,所以虽然A从do_IRQ()返回,但B在执行完handle_IRQ_event()后循环条件成立(IRQ_PENDING置位),所以仍然会再次调用handle_IRQ_event来处理,所以我觉得这里中断不会丢失呀。
英文版上说的是“A hardware device raises the IRQ line, and the multi-APIC system selects our CPU for handling the interrupt. Before the CPU acknowledges the interrupt, the IRQ line is masked out by another CPU;”,这里很微妙,是的你说的很对,do_IRQ()本身可以确保中断不丢失,但是为什么disable_irq不能被内核的其他函数调用呢?如果那里只是单纯的成对使用disable_irq和enable_irq,那就会有中断丢失了,不是吗?呵呵,这里说的不清楚,只是说明了by another CPU, 而没有说by another CPU who's not executing __do_IRQ(). |
|