c - 如何检测是否存在特定于模型的寄存器
问题描述
我正在尝试检查 IA32_VMX_EPT_VPID_CAP (48CH) 中的某个位是否清晰,但在某些情况下,我正在使用本身没有那个 msr(q9300) 的硬件并且我得到了段错误。我想知道是否有一条指令或一种“好”的方式来检查 msr 是否首先存在。我知道我可能可以处理段错误或检查 CPU 型号并将其与准备好的表进行比较,该表具有哪些 CPU 具有 msr,但这些解决方案对我来说似乎有点混乱。我查看了英特尔手册,但我没有找到任何关于检查它的方法的参考。有没有比上述方式更合适的约定或更合适的方式?
解决方案
来自英特尔 SDM 的 A.10 节:
IA32_VMX_EPT_VPID_CAP MSR 存在于支持 EPT 或 VPID 的处理器上。
因此,您应该检查以下内容:
- IA32_VMX_PROCBASED_CTLS MSR 的第 63 位为 1(支持辅助控件)
- 并且 IA32_VMX_PROCBASED_CTLS2 MSR 的第 33 位或第 37 位为 1(支持 EPT 或 VPID)
推荐阅读
- google-cloud-platform - 代码:EXTERNAL_RESOURCE_NOT_FOUND;消息:资源'
-compute@developer.gserviceaccount.com' 类型为 'serviceAccount' 未找到 - flutter - StreamBuilder 完全加载后有没有办法获得回调?
- amazon-web-services - 当节点数超过一个时,Redislabs UI 日志记录错误
- asp.net-core - 网络核心中的数据注释不适用于列表
- javascript - Nodemails 给我 TypeError [ERR_INVALID_ARG_TYPE]:“路径”参数必须是字符串类型。接收类型未定义
- python - 在此类查询中查找或聚合
- grub - 创建一个自动检测 EFI 系统并启动第一个系统的 grub 脚本
- api - 如何使用 Vtiger API 在修改时间上查询模块(潜力)
- python - 英特尔实感 - 在两个 numpy 数组中对齐深度和颜色
- python - discord.ext.commands.errors.CommandNotFound:找不到命令“平衡”