- 论坛徽章:
- 0
|
没看完,也没看仔细,等抽时间细看。 AFAICT, 这份文档的深度、广度以及历史追溯上,是至少我前所未见的。
一些商榷的地方(边看边发)
-------------------------
P9:
>> APIC Bus 已经不存在,系统的前端总线代替了它。
APIC Bus已经不存在了, 取而代之的是, LAPIC之间、LAPIC和IOAPIC之间的通信,通过前端总线来传递。
P10:
>> 当 IOAPIC 某个管脚接收到中断信号后,会根据该管脚对应的 RTE,格式化出一条中
>> 断消息,发送给某个 CPU 的 LAPIC。
严谨起见,「发送给某个CPU」应改为「发送给某个或某些CPU」
P13:
>> X86 spec 说 4bit 的 LAPIC ID 可 以 表 示 15 个 CPU , 还 有 一 个 哪 儿 去 了 ? 我 想 是 留 给
IOAPIC 了。
对Pentium和P6家族CPU来说, APIC ID == 0x0f是广播ID,即匹配所有的LAPICs。
手册卷III,8.6.2.1 Physical Destination Mode节说:
For the P6 family and Pentium processors, a single destination is specified in physical
destination mode with a local APIC ID of 0H through 0EH, allowing up to 15 local
APICs to be addressed on the APIC bus. A broadcast to all local APICs is specified with
0FH.
P19:
>> IOAPIC2 有 16 个管脚,GSI base 为 24,GSI 范围为[24,39],依次类推。
这里应该是IOAPIC1吧?
P25:
>> 笔者:每个 CPU 都用同样的物理地址访问自己的 LAPIC。这说明除了 x86 平台的 port
I/O 具有 64K 独立的物理地址空间外,LAPIC 也拥有独立的物理地址。我能想到的理由是
防止 CPU 访问不属于自己的 LAPIC。
不同意这种观点。 CPU以I/O指令访问IO ports,无论如何,是要走总线的; 而访问自己的LAPIC,
无论如何,都不需要走总线,而是由CPU(BIU单元?)和LAPIC以及链结它们的硬件(不管是什么)来保证的。
当然,我这也是猜测^_^
P26:
>> 该表用于重载 MADT 表头中的 LAPIC 地址,整个 MADT 表中只应该包含一个 LAPIC
address override entry。
建议补充一句(我觉得不补充很多人会糊涂):
之所以提供LAPIC address override entry,是因为在x86-64 CPU上物理抵制是64位的,
因此原来的4字节--也就是32位--的LAPIC物理地址是无效的,因此用这样一个override机制来提供一个8字节
的LAPIC物理地址。
FIXME: 为什么IO-APIC不需要提供address override entry? 64位机器上的IOAPIC地址也是32位的?
P29:
>> 笔者:从 Linux 的注释来看,TPR 将一直为 0。X86 spec 有这么一段话:
“ 对 于 使 用 lowest priority delivery mode 发 送 中 断 , 却 又 不 更 新 TPR 的
OS,芯片组将记忆 TPR 并将同一中断发送给同样的 CPU 处理。这将引起性
能损失”。
Mark一下,我也注意到了这句话,似乎Andi Kleen曾经在lkml上解释过,明天找找 |
|