interrupt - 我可以检测从哪个模式(EL1,EL0,...)SError 中断引起的吗?
问题描述
据我所知,有单独的向量来处理由 EL0 和 EL1 引起的 SError。
我的问题如下:
由于 SError 是异步的,我是否可以相信如果 cpu 输入serror_el1_vector来处理 SError,那么 SError 完全是在 EL1 中引起的(而不是在 EL0、EL2、EL3 中),如果 cpu 输入serror_el0_vector那么 SError 完全是在 EL0 中引起的? 换句话说,是否可能出现以下情况:
- EL0:
1.1。对导致 SError 中断的某些设备寄存器的错误访问(例如写入 RO 寄存器)。这种访问不会立即产生访问错误,但稍后当 AXI 事务实际发生时,内存系统会返回一个错误,报告为异步中止。
1.2. SError 仍未产生,用户有时间让svc进入 EL1
- EL1:
2.1。现在 EL1 模式下的 cpu 通过步骤 1.2 进入
2.2. 由步骤 1.1 导致的 SError 最终生成但现在 cpu 在 EL1 中,而不是在 EL0 中,那么 cpu 将进入哪个向量来处理 SError: serror_el1_vector或serror_el0_vector?因为最初不正确的访问是在 EL0 中引起的,但现在 cpu 处于 EL1 状态。
先感谢您!
解决方案
我可以检测从哪个模式(EL1,EL0,...)SError 中断引起的吗?
不,除非您有比ARM 体系结构参考手册中提供的更强大的保证。
问题是几乎所有东西都是实现定义的。
首先,似乎无法保证 SError 甚至是由 PE 引起的。第 D1-2198 页:
内存系统生成的外部中止可能会使用 SError 中断异步执行。这些 SError 中断始终表现为边沿触发中断。一个实现可能包括其他 SError 中断源。
所以 SError 的来源完全有可能在芯片外。
此外,在多核系统中,似乎没有什么能阻止核心 1 发出导致 SError 的写入的可能性,该 SError 随后被发送到核心 2。
接下来,我们来看看一个 SError 携带了哪些信息。第 D1-2170 页:
如果异常是同步异常或 SError 中断,则表征异常原因的信息将保存在目标异常级别的 ESR_ELx 中。
查看ESR_EL1
第 D12-2798 页:
IDS,位 [24]
实现定义综合症。该位的可能值为:
- ISS 字段的0b0
位 [23:0] 保存此编码中描述的字段。
---------- 注意 ----------
如果没有实现 RAS 扩展,这意味着 ISS 字段的 bits[23:0] 是 RES0。
--------------------------- ISS 字段的0b1
位 [23:0] 保存实现定义的综合症信息,可用于提供有关 SError 中断的附加信息。
因此,PE 可以实现自定义寄存器配置,提供您正在寻找的信息,但同样:这是定义的实现。
这也超出了 PE 规范的范围,但内存系统可能提供了一种恢复 SError 源的方法。
底线:所有的实现都已定义,因此请参阅特定硬件的手册。
推荐阅读
- gatsby - 使用 gatsby-plugin-algolia 在 Algolia 仪表板中上传降价结果时出现问题
- css - 如何覆盖 ngx-datepicker-material 的样式?
- angular - 如何从此 PrimeNG FullCalendar 动态删除事件(单击事件)?
- visual-studio-code - LaTeX中的Vscode自动完成美元符号
- c# - C# 实体框架错误:“SqlException:INSERT 语句与 FOREIGN KEY 约束“FK_718”冲突
- clojure - 在 Clojure 中,表达式的结果可以作为 (def) 的第一个参数吗?
- java - 使用我的“module-info.java”使用 eclipse 生成 javadoc 时出错
- reactjs - 背景颜色 CssBaseline 材质 ui 在生产中不起作用(heroku)
- node.js - 使用 npm 安装 Express Application Generator
- python - 将熊猫数据框转换为仅选择某些列的 csv