linux-kernel – 为什么在重置中断关联时会调用mdelay(1)?
我正在尝试更改导致cpu的代码,并进入我不完全理解的东西:
从cpu_online_mask中删除核心后发生的事情之一是重置中断关联. 我的问题是:为什么要调用mdelay(1)是必要的?没有它会发生什么? 谢谢! 解决方法
在一个坚果壳中,fixup_irq()中存在竞争条件 – 该函数首先遍历所有路由到离线CPU的IRQ,并告诉HW将它们路由到其他地方.
问题是,改变这种中断路由的过程不是原子的或瞬时的.更改PIC芯片上的路由的事务可能会与发送中断的事务竞争 – 这可能需要一些周期才能到达,因此您最终可能会: >告诉APIC向其他CPU发送中断,而不是我. 那么代码的作用基本上是: >告诉APIC向其他CPU发送中断而不是我.>等一下.这样就可以保证中断重新路由完成. (如何知道有多少时间足以等待?也许它记录在APIC规范中,也许是英特尔VLSI工程师向他们的Linux人员透露的内部知识 – 我不知道:-)>通过读取发送中断时锁存的APIC上的寄存器来检查是否发生了中断,如果发现中断,则将其作为IPI发送到正确的目标.>现在我们知道没有中断会真正传达给我们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |