您的位置:首页 > 其它

MACHINE-CHECK 相关的MSR(二) - Machine-Check 全局控制MSR

2015-09-28 09:57 274 查看
Machine-Check 全局控制MSR包括:IA32_MCG_CAP, IA32_MCG_STATUS,IA32_MCG_CAP, IA32_MCG_STATUS。其中后两个是可选的
1.  IA32_MCG_CAP MSRIA32_MCG_CAP是一个只读寄存器,其中报告了当前芯片MCA相关的能力信息。如下图所示

 其中Count field, bits 7:0 - 当前处理器记录错误信息的banks的数量(每个bank对应一个硬件单元)MCG_CTL_P (control MSR present) flag, bit 8 - 当前处理器是否实现了 IA32_MCG_CTL MSRMCG_EXT_P (extended MSRs present) flag, bit 9 - 当前处理器是否实现了 extended machine-check state寄存器(该寄存器地址为180H)MCG_CMCI_P (Corrected MC error counting/signaling extension present) flag, bit 10 - 当前处理器是否支持 corrected MC error事件和 count threshold of corrected MC errors时间相隔的MSR。如果设置了也并不是说所有的bank都支持,系统软件需要逐个bank的检查MCG_TES_P (threshold-based error status present) flag, bit 11 - 当设置了,表明 IA32_MCi_STATUS[56:53]是架构通用的,其中 56:55被保留, 54:53用来报告 threshold-based error的状态。如果没有设置IA32_MCi_STATUS[56:53]是特定芯片相关的MCG_EXT_CNT, bits 23:16 - 表明 extended machine-check state registers的数量,只有当 MCG_EXT_P设置的时候,该位才有意义MCG_SER_P (software error recovery support present) flag, bit 24 - 表明当前处理器支持用软件进行错误恢复 IA32_MCi_STATUS[56:55]用来表示是否已经发送了#MC信号和表示是否软件必须进行错误恢复。MCG_EMC_P (Enhanced Machine Check Capability) flag, bit 25 - 表明处理是否支持增强的 machine check能力( firmware first signaling)MCG_ELOG_P (extended error logging) flag, bit 26 - 如果设定表明当探测到一个错误的时候,处理器允许引入 firmware, firmware可以提供更多的平台特性信息到MC的banks寄存器中,平台特定信息用 ACPI的Generic Error Data Entry格式提供MCG_LMCE_P (local machine check exception) flag, bit 27 — 如果设定,就表示下面两个接口被实现了: extended state LMCE_S (located in bit 3 of IA32_MCG_STATUS)和支持LMCE的IA32_MCG_EXT_CTL MSR。如果LMCE被使能了,那么MC的errors被精准发送到发生错误的CPU上,而不是所有逻辑核上
如果对 IA32_MCG_CAP MSR进行写入操作,将产生未定义的行为
2. IA32_MCG_STATUS MSRIA32_MCG_STATUS MSR用来描述在产生 machine-check exception后当前处理器的状态

 其中RIPV (restart IP valid) flag, bit 0 - 当设置了,表明当产生#MC后,处理器是否可以可信的的重新支持栈顶的EIP指针EIPV (error IP valid) flag, bit 1 — 当设置了,表明EIP指针是产生该错误的指令MCIP (machine check in progress) flag, bit 2 — 当设置了,表明已经产生了一个#MC。软件可以对其进行修改(当处理完#MC就会清除这个标志)。如果在MCIP设置的时候,又产生了#MC,那么将会让处理器进入shutdown状态,不允许#MC嵌套LMCE_S (local machine check exception signaled), bit 3 — 当设定了,表明产生了一个本地精准#MC,也就是说该#MC被发送给产生错误的逻辑核上,而不是广播出去IA32_MCG_STATUS[63:04]被保留,写入非0数据将会产生#GP
3. IA32_MCG_CTL MSRIA32_MCG_CTL MSR只有当 IA32_MCG_CAP.MCG_CTL_P被设定的时候才会出现在处理器中IA32_MCG_CTL控制着 machine-check exceptions的报告。如果出现了该MSR,全部位写1来使能 machine-check的特性,全部位写0来关闭一些 machine-check特性。其他的值是未定义的或者是特定处理器相关的
4. IA32_MCG_EXT_CTL MSRIA32_MCG_EXT_CTL MSR只有当 IA32_MCG_CAP. MCG_LMCE_P被设定的时候,才会在处理器中有。IA32_MCG_EXT_CTL.LMCE_EN (bit 0)用来使能处理器的LMCE特性(精准单播)如果 IA32_MCG_CAP. MCG_LMCE_P = 0或 IA32_FEATURE_CONTROL.LMCE_ON = 0,向 IA32_MCG_EXT_CTL进行读写操作将会导致#GP在RESET的时候, IA32_MCG_EXT_CTL MSR会被清零
MSR如下所示

 LMCE_EN (local machine check exception enable) flag, bit 0 - 系统软件可以对其进行设定来使能LMCE特性。只有在对 IA32_FEATURE_CONTROL进行了LMCE的使能后,才可以设置 LMCE_EN
5. 使能LMCE如果要想使用LMCE,就需要对系统软件和平台软件都进行适当的设定。平台软件可以通过 IA32_FEATURE_CONTROL. LMCE_ON(bit 20)来开启LMCE功能。对于系统软件来说,在设定 IA32_MCG_EXT_CTL.LMCE_EN (bit0)之前,需要确保 IA32_FEATURE_CONTROL.Lock (bit 0)和IA32_FEATURE_CONTROL.LMCE_ON (bit 20)都已经被设定了。都使能后,软件不能假设哪种类型的错误会以LMCE的形式传递,硬件在发生error的时候决定是否该特定的error会以LMCE的方式传递到哪个逻辑核上。
参考文章 MACHINE-CHECK 相关的MSR(一) - 概述
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: