SDEI (Software Delegated Exception Interface) 软件委托异常接口
在任何时候,PE、内存或系统总线都可能产生错误。这些错误中的一部分可以在软件中纠正,并且可能需要不同的执行权限。固件优先处理Firmwarefirst是一种常见的错误处理方法,其中更高的异常级别EL3提供初始错误处理,之后错误被委托给较低的异常级别EL2/EL1。高优先级事件可用于实现软件看门狗定时器。基于样本的分析对于那些屏蔽中断的临界区可能存在盲点。高优先级的基于事件的分析器可以消除这种盲点。
1. 简介
system events是一个高优先级事件,必须由操作系统或hypervisor程序立即来完成,即使操作系统在其自己的临界区中执行(中断被屏蔽),系统事件可用于:
-
Platform error handling (RAS) 系统错误处理
在任何时候,PE、内存或系统总线都可能产生错误。这些错误中的一部分可以在软件中纠正,并且可能需要不同的执行权限。固件优先处理Firmware first是一种常见的错误处理方法,其中更高的异常级别EL3提供初始错误处理,之后错误被委托给较低的异常级别EL2/EL1。
-
Software watchdog timer 软件看门狗定时器
高优先级事件可用于实现软件看门狗定时器。
-
Sample based profiling 采样分析
基于样本的分析对于那些屏蔽中断的临界区可能存在盲点。高优先级的基于事件的分析器可以消除这种盲点。
-
Kernel debugger 内核调试
调试系统软件通常涉及检查执行路径、寄存器、和内存。软件调试经常受到中断屏蔽的影响,因为它可能会阻止调试器中断PE。带优先级的事件,即使系统处于临界区,也可以检查系统的状态。
The Software Delegated Exception (SDE)是一个可以抢占其它异常和独占机制,用来把特殊系统事件system events传递给操作系统(或hypervisor)的机制。Firmware收到system events后,使用SDEI通知Non-secure world,并执行注册好的handler
当一个异常需要不受中断屏蔽和临界区延迟的传递时,应使用 SDEI 而不是普通中断,就像上面的几个例子一样。
SDEI 提供了高优先级的事件传递机制,其优先级高于目标操作系统和hypervisor的中断。SDEI可以支持OS或/和hypervisor进行如下操作:
- 订阅并处理系统事件。
- 屏蔽系统事件。
- 将系统事件的处理迁移到不同的 PE。
- 添加或删除参与事件处理的 PE。
- 将现有中断转换为 SDEI 事件源。
- 生成软件事件。
注意:SDEI只使用system event管理,不适用设备中断处理。
2. SDEI 相关术语
- RAS:Reliability, Availability, and Serviceability
- SDEI: Software Delegated Exception Interface 软件委托异常接口
- SDEI dispatcher:处理来自client的请求并向其委托事件
- SDEI client:使用dispatcher提供的接口注册处理程序,接收事件通知并处理事件
3. SDEI 事件调度
SDEI事件调度有两种方式:
- 中断触发事件,由绑定到SDEI事件的中断触发
- 显式分配事件,由SDEI dispatcher调用sdei_dispatch_event() API将事件分配到SDEI client处理
中断触发事件调度
初始化阶段,SDEI客户端绑定一个非安全中断,SDEI调度程序返回一个平台动态事件编号。然后客户端为该事件注册一个处理程序并启用该事件,取消屏蔽当前PE上的所有事件。
当绑定的中断发生时,它会被trapped到EL3中,中断被移交给SDEI调度程序,然后分配执行客户端注册好的处理程序,执行完成后,客户端调用SDEI_EVENT_COMPLETE接口结束事件处理,恢复到事件发生前的程序继续执行。
显式分配事件调度
初始化阶段,SDEI 客户端为平台事件注册一个处理程序,启用事件,并取消屏蔽当前PE的所有事件。
与中断触发事件SDEI调度不同的是,这里不涉及中断绑定,因为绑定的或动态事件不能被显式调度,显式调度的事件应该是系统预先定义好的。
当关键事件发生(比如在接收到SError或同步外部中止时(SError or Synchronous External Abort))时会被trapped到EL3, EL3 执行事件的第一级分类并分配给RAS 组件承担进一步处理,RAS处理后需要非安全世界参与进一步处理,因此决定显式分派一个事件(客户端已经注册了该事件),于是调用sdei_dispatch_event API由SDEI调度程序分配执行客户端注册好的处理程序,将请求的事件分派给客户端处理,当处理程序完成时,恢复被抢占的执行程序。
4. 参考
TF-A SDEI: Software Delegated Exception Interface
ARM_DEN0054A_Software_Delegated_Exception_Interface
更多推荐
所有评论(0)