如果发生一组配置错误和故障,这些将记录在事件队列中。这些错误和故障包括因设备流量引发的事件,例如:
- 当收到设备流量时,发现配置错误
- 因设备流量地址引发的页面错误
**每个安全状态都有一个事件队列。**当事件队列从空状态变为非空状态时,SMMU会生成一个中断。队列的结构与命令队列相同,唯一的不同在于生产者和消费者的角色是相反的。在命令队列中,SMMU是消费者;而在事件队列中,SMMU是生产者。
连续的传输错误或故障可能会填满事件队列,如果未能快速消费事件导致队列溢出。对于由于暂停的故障传输(stalled faulting transactions)引起的事件,当事件队列已满时永远不会被丢弃。它们将在队列条目被消费并有空间可用时记录。其他类型的事件则会在事件队列已满时被丢弃。系统软件应快速消费事件队列中的条目,以避免正常操作期间出现溢出。
4.9.1 事件记录
事件记录大小为32字节,所有记录均为小端格式。事件队列中可能记录的事件类别有三种:
- 配置错误
- 翻译过程中的故障
- 其他
以下是一些示例:
- CERROR_ILL:非法或无法识别的命令
- C_BAD_STREAMID:事务StreamID超出范围
- C_BAD_STE:使用了无效的STE
- F_TRANSLATION:翻译错误
有关事件记录的完整描述,请参阅《Arm System Memory Management Unit version 3》。