深入解析I/O APIC与全局中断管理
1. I/O APIC相关操作
1.1 中断处理循环
在处理特定中断请求(irq)时,首先会将entry设置为指向irq_2_pin[]数组中对应此irq的条目的指针。接下来进入一个循环,沿着为此irq注册的条目链表进行操作,每次都会修改相应的APIC寄存器。具体步骤如下:
1. 从表中获取对应此irq的引脚编号的本地副本。
2. 若未为此irq分配引脚,则跳出循环。
3. 第一个参数用于标识APIC,第二个参数指定要读取的APIC重定向寄存器。重定向寄存器从偏移量0x10开始,pin * 2指定寄存器,R(可为0或1)指定寄存器的低半部分或高半部分。
4. 根据参数ACTION以某种方式操作上一步返回的值,例如__mask设置第16位,__unmask清除第16位。
5. 将新值写回APIC。
6. 若链表的链接字段为NULL,则跳出循环;否则,设置irq_2_pin[]数组中条目的索引,对应刚刚处理的条目的下一个字段中指定的irq,然后再次循环处理。
7. 执行参数FINAL指定的任何处理。
1.2 设置I/O APIC亲和性
以下是设置I/O APIC亲和性的函数: </