第五章 Interrupts for Machine andSupervisor Levels
核心内容
1.主要中断类型与默认优先级:
-
- 定义了机器级别(M-level)和监管者级别(S-level)的标准中断类型(如MEI、SEI、MTI等)。
- 默认优先级规则:本地中断(如软件/定时器)优先级高于外部中断,RAS事件(如低/高优先级错误)具有可配置优先级。
2.机器级别中断处理:
-
- mtopi CSR:报告当前最高优先级的中断(包含身份和优先级),用于中断处理流程。
- 优先级配置:通过间接寄存器(miselect/mireg)设置每个主要中断的优先级(0x30-0x3F范围)。
3.监管者级别中断过滤与虚拟中断:
-
- mvien/mvip CSR:过滤S-level中断,允许机器模式注入虚拟中断到监管者模式。
- 例如,当mvien的某位设为1时,对应虚拟中断将出现在S-level的sip寄存器中。
4.WFI指令行为:
-
- WFI在存在待处理且启用的中断时唤醒,优先级由中断控制器决定,支持嵌套中断。
概述
RISC-V特权架构为硬件线程(hart)上的中断定义了0 - 15范围内若干主要标识,包括机器级和监管级外部中断(编号分别为11和9)、机器级和监管级定时器中断(编号分别为7和5)以及机器级和监管级软件中断(编号分别为3和1)。除了这些主要标识外,每个特权级别的外部中断还会由外部中断控制器(如高级平台级中断控制器(APLIC)或入站消息支持中断控制器(IMSIC))赋予次要、次级标识,以区分来自不同设备或原因的中断。
高级中断架构为hart内部或紧邻hart处产生的额外本地中断预留了另外24个主要中断标识,这些中断通常用于上报错误。该架构还定义了一种机制,允许软件有选择地将本地中断和自定义中断下放(delegate)到下一个较低的特权级别,在某些情况下,还能向较低特权级别注入完全虚拟的中断。
最后,有一项可选功能允许软件为主要中断(如定时器中断、软件中断以及任何本地中断)分配优先级,使其能够与平台级中断控制器(PLIC)、APLIC或IMSIC为外部中断设定的优先级混合使用。
5.1. Defined major interrupts and default priorities
表8列出了当前为符合此高级中断架构(AIA)的RISC-V硬件线程(hart)定义的所有主要中断。除RISC-V特权架构所规定的主要中断外,AIA还添加了中断编号35和43,分别作为低优先级和高优先级的RAS(可靠性、可用性和可服务性)事件的本地中断。
表8. 按默认优先级顺序排列的标准主要中断代码
默认优先级顺序 |
主要中断编号 |
描述 |
最高 |
43 |
本地中断:高优先级RAS事件 |
11, 3, 7 |
机器中断:外部、软件、定时器 |
|
9, 1, 5 |
监管级中断:外部、软件、定时器 |
|
12 |
监管级客户外部中断 |
|
10, 2, 6 |
VS中断:外部、软件、定时器 |
|
13 |
本地中断:计数器溢出 |
|
最低 |
35 |
本地中断:低优先级RAS事件 |
表9. 当前及未来主要中断的分类
主要中断编号 |
类别 |
0-12 |
非本地中断(由特权架构分配) |
13-15 |
本地中断 |
16-23 |
本地中断(预留供未来标准本地中断使用) |
24-31 |
自定义用途的本地中断 |
32-47 |
本地中断(预留供未来标准本地中断使用) |
≥48 |
自定义用途的本地中断 |
在特权架构(编号0-15)控制的主要中断中,AIA将计数器溢出中断(代码13)归类为本地中断。此外,还假定未来对预留中断编号14和15的任何定义也将是本地中断。除两个RAS中断外,AIA还额外为其他RISC-V扩展可能定义的标准本地中断预留了16-23和32-47范围内的主要中断编号。分配给特权架构的其余主要中断(编号0-12)则归类为非本地中断。总体而言,表9总结了AIA对所有主要中断标识的分类。
RAS是可靠性、可用性和可服务性的缩写。通常,RAS事件对应于检测到损坏的数据(例如,由于软错误或硬错误导致)和/或此类数据的使用。例如,高优先级RAS事件本地中断可能表示发生了需要RAS错误处理程序采取行动以遏制错误并在可能的情况下恢复的紧急未纠正错误。低优先级RAS事件本地中断可能由非紧急的延迟或已纠正错误触发。
AIA本身并不要求检测到的RAS事件触发为此目的定义的两个本地中断之一。系统可以自由地通过其他方式报告任何或所有RAS事件,例如通过由APLIC或IMSIC路由的外部中断,或通过自定义中断。
特定RAS事件的报告方法很可能取决于在系统何处检测到该事件。AIA为RAS事件定义了本地中断编号,以便系统在hart本地检测到此类事件时,有一种标准方式来报告这些事件,而不完全依赖外部或自定义中断。
与往常一样,平台标准可能会进一步限制系统报告事件(无论是RAS事件还是其他事件)的方式。
对于RISC-V特权架构未定义的标准本地中断(编号16-23和32-47),目前的计划是按照表中所列顺序分配默认优先级:
默认优先级顺序 |
主要中断编号 |
描述 |
最高 |
47, 23, 46, 45, 22, 44, 43, 21, 42, 41, 20, 40 |
|
11, 3, 7 |
机器中断:外部、软件、定时器 |
|
9, 1, 5 |
监管级中断:外部、软件、定时器 |
|
12 |
监管级客户外部中断 |
|
10, 2, 6 |
VS中断:外部、软件、定时器 |
|
13 |
本地中断:计数器溢出 |
|
39, 19, 38, 37, 18, 36, 35, 17, 34, 33, 16, 32 |
||
最低 |
在16-23范围内的中断中,较高的中断编号表示较高的默认优先级,32-47范围内的中断亦如此。这两组中断在整个顺序中相互交错,特权架构的标准中断(0-15)则插入到序列中间。此建议的默认优先级顺序安排,使得中断0-31有可能成为32位RISC-V系统自身足够使用的子集。
实际上,未来的RISC-V扩展可能会也可能不会遵循为其定义的中断的默认优先级顺序的这一计划。
除表8中已有的主要中断外,还暂定提出了以下本地中断,按默认优先级从高到低排列:
- 23:总线或系统错误
- 45:每核心高功耗