免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4761 | 回复: 9
打印 上一主题 下一主题

AMD64的NMI中断, 都有哪几种interrupt sources? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-02-15 13:38 |只看该作者 |倒序浏览
Intel的NMI有两种: 1) 通过IO APIC; 2)Local APIC收到一个本地中断, 其LVT entry的NMI字段被设置。

似乎是: 『1)通过IO APIC』这种方式必须有MPS支持, 特别是BIOS里的MPS支持, 特别地说, 就是IO APIC能够以虚线模式(Virtual wire mode)工作。


AMD64 CPU的情况如何?  我知道所有x86-64 CPU的Local APIC都是xAPIC兼容的。 但不知道它的IO APIC一般采用什么芯片? 对MPS的支持如何?

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
2 [报告]
发表于 2008-02-18 13:51 |只看该作者
这个我也不清楚啊

大概理解是这样,其正确性有待怀疑。

NMI汇报两件事:1) memory controller坏了   2)该喂狗了

memory controller错误,使用的线是BP -> line1,因此,BP的LVT1设置为NMI,而所有AP的LVT1全部mask,只要BP一个CPU响应这种错误就够了。这种情况是定死的,无论什么CPU都一样。

看门狗则情况多变,启动参数中,通过nmi_watchdog=???来设置。设置为使用local APIC时,中断源使用各CPU -> local APIC -> counter;设置为使用IO-APIC时,因为8259连接着各CPU的line0,故将8259设置为virtual wire模式,透传PLT的中断,所有CPU的line0均设置为NMI。

在nmi_watchdog=Local APIC时,Intel与AMD对counter的操作不同。其他应该一致。

总之,我现在的理解,NMI的来源分两种情况:
1) BP来自于Line1和counter,AP只来自于counter。
2) BP来自于line1和line0,AP只来自于line0。

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
3 [报告]
发表于 2008-02-18 18:22 |只看该作者
这样说吧,既然是看门狗,就得定期中断;这和CPU规定的NMI,既那些致命异常,肯定是两种中断源。
   而CPU规定的那些NMI,通过一条线,连接到所有CPU的local APIC -> lint1,所以,各个CPU的看门狗都不会使用local APIC的lint1,因为看门狗需要的是定期中断,而连到lint1上的那条线,只在致命异常时出现中断。
   那么,我们需要给看门狗分配一些资源,可以定期中断,并发送到各CPU上。于是,还有4个选择,
1)使用各local APIC的lint0,
2)使用各local APIC的counter,
3)使用各local APIC的timer。
4)使用IOAPIC,设置为发送给所有local APIC。

3)不可能,因为local APIC的timer已被schedule占用
4)按道理说可以,而且并不需要virtual wire模式,不过将IO-APIC的某个pin设置为NMI的情况,我没有看到过

剩下的2),既是启动参数中,nmi_watchgog=local apic的情况
剩下的1),既是启动参数中,nmi_watchgog=IO apic的情况。将8259设置为virtual wire,而8259的输出连接至各local APIC的lint0。至于为什么叫nmi_watchgog=IO apic,而明明又没使用IO APIC,我也不明白。

论坛徽章:
0
4 [报告]
发表于 2008-02-20 18:16 |只看该作者
没太看懂塑料袋兄的回复的
但我想版主的问题是否可以从reassert_nmi()这个函数找答案。
只要把其中那几个端口的的意思找到了,应该就有答案了

论坛徽章:
0
5 [报告]
发表于 2008-02-21 13:49 |只看该作者
楼上的回复都没看懂。

论坛徽章:
0
6 [报告]
发表于 2008-02-21 14:44 |只看该作者
AMD i/o apic 手册可以在ADM主页上下载 AMD-8111™HyperTransport™ I/O Hub Data Sheet
里面有很少的一部分介绍了一下。和82093AA基本上是相同的,VIA和NVIDIA的芯片组手册没地方下载。。。

论坛徽章:
0
7 [报告]
发表于 2008-02-22 11:24 |只看该作者
原帖由 lgy805 于 2008-2-21 14:44 发表
AMD i/o apic 手册可以在ADM主页上下载 AMD-8111™HyperTransport™ I/O Hub Data Sheet
里面有很少的一部分介绍了一下。和82093AA基本上是相同的,VIA和NVIDIA的芯片组手册没地方下载。。。


我的芯片组是ATI RS480/SB400,也没找到下载的地方。

论坛徽章:
0
8 [报告]
发表于 2008-02-22 13:08 |只看该作者
估计ATI的和82093AA也是差不多的,MultiProcessorSpecification 是INTEL发布的,因该都是兼容的。

论坛徽章:
0
9 [报告]
发表于 2009-03-29 23:09 |只看该作者
原帖由 albcamus 于 2008-2-15 13:38 发表
Intel的NMI有两种: 1) 通过IO APIC; 2)Local APIC收到一个本地中断, 其LVT entry的NMI字段被设置。

似乎是: 『1)通过IO APIC』这种方式必须有MPS支持, 特别是BIOS里的MPS支持, 特别地说, 就是IO  ...


今天看了一下AMD8111的datasheet,NMI这类非向量类型的中断不是经过IOAPIC发的,而是直接被翻译成hypertransport interrupt request。估计类似于你说的方式2。

论坛徽章:
0
10 [报告]
发表于 2009-03-29 23:15 |只看该作者
原帖由 塑料袋 于 2008-2-18 13:51 发表
这个我也不清楚啊

大概理解是这样,其正确性有待怀疑。

NMI汇报两件事:1) memory controller坏了   2)该喂狗了

memory controller错误,使用的线是BP -> line1,因此,BP的LVT1设置为NMI,而所有AP的 ...


引起NMI中断的原因很多,致命错误是其中一种,即便是致命错误,也有很多和MCH无关,很多PCI总线上的致命错误就可以引发NMI.

另外, 也可以用于debug场合,例如Solaris的内核调试器就可以设置利用NMI来调试hard hang.

[ 本帖最后由 Solaris12 于 2009-3-29 23:23 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP