Linux kernel 在x86 Intel Centerton上捕获NMI源

Linux kernel 在x86 Intel Centerton上捕获NMI源,linux-kernel,x86,kernel,pci,netbsd,Linux Kernel,X86,Kernel,Pci,Netbsd,我正在处理NetBSD上的一个情况,NMI已将我的箱子放到DDB上。 我知道NMI可能是由于内存相关的问题。我猜内存映射的设备也会让我陷入同样的场景。请纠正我这一点 我的理解是,我需要读取所有这些设备的状态,可能是通过pci 我不知道这是什么和怎么回事 收到NMI后,将生成一个陷阱,将NetBSD放入DDB调试器。在那里很难从DDB那里得到任何东西。我的计划是不做任何事情就从陷阱中返回,这样错误将导致内核内核转储。另外,在从陷阱返回之前,我想读取所需的寄存器/内存以转储相关设备的状态。这是我的行

我正在处理NetBSD上的一个情况,NMI已将我的箱子放到DDB上。 我知道NMI可能是由于内存相关的问题。我猜内存映射的设备也会让我陷入同样的场景。请纠正我这一点

我的理解是,我需要读取所有这些设备的状态,可能是通过pci

我不知道这是什么和怎么回事

收到NMI后,将生成一个陷阱,将NetBSD放入DDB调试器。在那里很难从DDB那里得到任何东西。我的计划是不做任何事情就从陷阱中返回,这样错误将导致内核内核转储。另外,在从陷阱返回之前,我想读取所需的寄存器/内存以转储相关设备的状态。这是我的行动计划。如果有更好、正确的方法,请告诉我


我的目标是从这里的专家那里了解,并提出一个逐步的计划来找到NMI的来源。

NMI-不可屏蔽中断通常由硬件看门狗提出,以表明CPU被挂起,而不是由于无效的内存访问(至少在Mips/powerpc中,我对它们有一些了解)。无效内存访问有单独的异常/中断需要处理

CPU挂起的情况之一是由于死锁或某些类似的情况。
因此,获取coredump并检查每个core在NMI时所做的事情应该是前进的一种方式。

NMI-不可屏蔽中断通常由硬件看门狗引发,以指示CPU挂起,而不是由于无效的内存访问(至少在Mips/powerpc中,我对它们有一些了解)。无效内存访问有单独的异常/中断需要处理

CPU挂起的情况之一是由于死锁或某些类似的情况。
因此,获取coredump并检查每个core在NMI时所做的事情应该是前进的一种方式。

NMI-不可屏蔽中断通常由硬件看门狗引发,以指示CPU挂起,而不是由于无效的内存访问(至少在Mips/powerpc中,我对它们有一些了解)。无效内存访问有单独的异常/中断需要处理

CPU挂起的情况之一是由于死锁或某些类似的情况。
因此,获取coredump并检查每个core在NMI时所做的事情应该是前进的一种方式。

NMI-不可屏蔽中断通常由硬件看门狗引发,以指示CPU挂起,而不是由于无效的内存访问(至少在Mips/powerpc中,我对它们有一些了解)。无效内存访问有单独的异常/中断需要处理

CPU挂起的情况之一是由于死锁或某些类似的情况。
因此,获取coredump并检查每个core在NMI时所做的工作应该是一种前进的方式。

英特尔在一份名为

不过,该文档并没有具体介绍您提到的Centerton(64位Atom)(但它确实很好地概述了Intel如何看待硬件错误报告)。然而,由于Centerton是一种片上系统设备,我们可以从设备数据表中找到更多关于其工作原理的信息。在本报告的第一卷中,我们发现以下文本:

内部不可屏蔽中断(NMI)可以由PCI Express端口生成,也可以从低引脚数接口信号LPC#U SERIRQ的内部IOCHK#信号生成

我们还发现,在基于原子的系统中,外部电源管理错误信号管脚可以产生NMI

毫无疑问,来自内存硬件的错误也可能是生成NMI的原因

的第2卷提供了有关处理错误信号所涉及的许多系统寄存器的更多详细信息

不过,这些都不能很好地说明NetBSD。不过,我认为您对NetBSD的期望不会太高。它对许多x86系统没有足够的详细了解,因此无法解码有关硬件错误的细节。通过内核调试器中的NetBSD DDB访问足够多的系统寄存器是可能的,尽管我怀疑手动操作可能非常繁琐


您可以探索的一个途径是系统BIOS是否能够读取和解释错误寄存器,但除非您的系统还具有板管理控制器(如果我理解正确,Atom系统不太可能),这样,在BIOS可以访问的地方就不太可能有任何系统错误记录。

英特尔在一份名为

不过,该文档并没有具体介绍您提到的Centerton(64位Atom)(但它确实很好地概述了Intel如何看待硬件错误报告)。然而,由于Centerton是一种片上系统设备,我们可以从设备数据表中找到更多关于其工作原理的信息。在本报告的第一卷中,我们发现以下文本:

内部不可屏蔽中断(NMI)可以由PCI Express端口生成,也可以从低引脚数接口信号LPC#U SERIRQ的内部IOCHK#信号生成

我们还发现,在基于原子的系统中,外部电源管理错误信号管脚可以产生NMI

毫无疑问,来自内存硬件的错误也可能是生成NMI的原因

的第2卷提供了有关处理错误信号所涉及的许多系统寄存器的更多详细信息

不过,这些都不能很好地说明NetBSD。不过,我认为您对NetBSD的期望不会太高。它对许多x86系统没有足够的详细了解,因此无法解码有关硬件错误的细节。通过内核调试器中的NetBSD DDB访问足够多的系统寄存器是可能的,尽管我怀疑手动操作可能非常繁琐

有一条路你可以走