RISC-V 异常处理在 KVM 中的实现

Corrector: TinyCorrect v0.1 - [tounix spaces toc comments tables images urls epw]


(相关资料图)

Author: XiakaiPan 13212017962@163.com

Date: 2022/10/21

Revisor: walimis, Falcon

Project: RISC-V Linux 内核剖析

Proposal: RISC-V 虚拟化技术调研与分析

Sponsor: PLCT Lab, ISCAS

本周继续连载 Risc-v Kvm Excp Impl 系列文章,记得收藏分享+关注,写文章领补贴:gitee.com/tinylab/riscv-linux

该活动统一采用泰晓社区自研 Linux Lab 开源实验环境,也可选用免装即插即跑 Linux Lab Disk (https://tinylab.org/linux-lab-disk),某宝检索“泰晓 Linux”可找到。Linux Lab v1.1 Inside —— 内核开发从未像今天这般简单!

RISC-V 异常处理在 KVM 中的实现

前言

Trap 处理是 RISC-V 虚拟化实现中的重要部分,包括异常和中断两个部分。当前 KVM 是 RISC-V 虚拟化扩展在软件层面较为可靠的实现,本文将结合 RISC-V 特权指令集手册的规定,分析 KVM 中有关异常处理的实现,中断部分由于涉及较多驱动层面的内容,故将在之后的文章中结合 MMIO,timer 等做具体探讨。

软件版本

KVM 异常处理

异常处理入口

在 KVM 对 RISC-V H 扩展的实现中,与异常处理相关的函数调用关系如下图所示。目前的实现中,KVM 能够处理三类异常。即虚拟机内的 page fault、虚拟指令异常和系统调用,三种不同的异常处理分别对应了不同的实现。

异常分类及其定义

kvm_arch_vcpu_ioctl_run 函数用于实现 vCPU 的运行。其调用 kvm_riscv_vcpu_enter_exit 函数进入 vCPU 的运行,此时 Guest 进入运行状态,CPU 处于 VS 或者 VU 模式。当 Guest 发生无法处理的异常时,Guest 退出,CPU 进入 HS 模式,随后 KVM 调用 kvm_riscv_vcpu_exit 来实现对异常的处理。

kvm_riscv_vcpu_exit 函数内部包含三个部分,分别对应三种异常的处理,代码如下:

如上所示,KVM 的实现中包含了三类异常:

虚拟指令异常;

Guest page fault;

SBI 系统调用。

特权指令集手册 中规定了每种异常对应的编码(即 scause 的可能的值),在进行异常处理时,可依据据 scause 的具体值确定其处理方式,如下表所示。

cause code

在 KVM 中,其对应宏的定义如下:

虚拟指令异常

其中,EXC_VIRTUAL_INST_FAULT 即 virtual instruction exception 对应如下情况:

在 VS-Mode 或 VU-Mode 下访问特定 CSR 的特定位;

在 VS-Mode 或 VU-Mode 下执行无权限的指令如 HFENCE, HLV, HSV 等。

KVM 中 virtual instruction 异常的处理如下:

其中用于处理具体指令的函数其原型或定义如下:

处理非法压缩指令时,用于从 Guest 获取合法指令的 kvm_riscv_vcpu_unpriv_read 函数:

对合法的压缩指令以及非 SYSTEM 类型的非压缩指令,不进行额外处理,直接调用 truly_illegal_insn 函数处理,保存当前 trap 的具体信息,将 Guest PC 设置为 Guest 中对应的异常向量, 然后返回到到 Guest 中对异常进行处理:

其调用关系如下图所示:

SBI 系统调用

系统调用的处理通过调用 kvm_riscv_vcpu_sbi_ecall 函数实现,如下方代码块所示:

SBI(Supervisor Binary Interface) 是直接运行在 Machine Mode 下的,为上层 OS 提供统一接口的程序,具有最高权限。而 Guest 访问 SBI 系统调用,是在 KVM 中模拟实现,不是实际访问 Machine Mode 中的 SBI firmware。KVM 通过直接访问和设置寄存器(cp->a7, cp->a0, cp->a0 等)的值来实现对 SBI 系统调用的处理。

总结

本文结合 KVM 中有关异常处理的实现,讨论了在添加 H 扩展之后的虚拟指令异常、guest page fault 以及来自 guest 的系统调用的处理。

参考资料

RISC-V 特权指令集手册

RISC-V Linux

首发地址:https://tinylab.org/riscv-kvm-excp-impl

技术服务:https://tinylab.org/ruma.tech

标签:

最近更新

RISC-V 异常处理在 KVM 中的实现
2023-06-16 17:01:54
安纳斯酒店-焦点日报
2023-06-16 16:38:31
特斯拉变相降价8000元,Model 3价格创新低?
2023-06-16 16:01:19
全球新消息丨A股五大上市险企前5月保费揽超1.4万亿同比增5.6%,单月寿险回暖提速、财险增幅放缓
2023-06-16 15:55:59
在湾心,瞰世界!航拍南沙这一年
2023-06-16 15:34:13
福州格致中学自主招生_福州格致中学-世界看点
2023-06-16 15:05:34
今天英镑兑人民币汇率(2023年6月15日)
2023-06-16 14:58:51
甘为继室一抹清茶完结(甘为继室)
2023-06-16 14:19:21
工作能力不足的表现有哪些_工作能力不足的表现
2023-06-16 13:44:11
科学家造出全球首个“人类胚胎模型”引发严重道德和法律问题 热消息
2023-06-16 13:03:51
全球微资讯!天山路街道:让南侧林立的商务楼更加时尚,使北侧密布的居民区更有活力!|凝聚30年
2023-06-16 12:53:09
第五人格22赛季推理之径皮肤 第五人格第18赛季推理之径皮肤_环球最资讯
2023-06-16 12:45:35
新郑市召开2023年未成年人思想道德建设工作推进会 环球快播报
2023-06-16 12:06:01
呼和浩特购房契税补贴政策(最新)_今头条
2023-06-16 11:54:21
聚焦:加强新时代中小学科学教育工作|大家谈⑤
2023-06-16 11:48:35
创联科技落地国内首个大模型工业应用实践 天天速看
2023-06-16 11:06:41
“美国长期制裁对古巴经济民生造成严重伤害”|资讯
2023-06-16 10:55:14
当前速读:csgo新手免费箱子平台哪个便宜 十大官方推荐开箱子csgo网站排行榜
2023-06-16 11:04:12
郑开城际铁路延长线工程建设又有新动态!
2023-06-16 10:55:14
实施复垦复耕要充分尊重农民意愿_最资讯
2023-06-16 10:25:24
出庭当晚特朗普与“金主”举行晚宴,筹得200多万美元
2023-06-16 10:03:02
全球观焦点:美媒:扫黑遭死亡威胁,墨西哥一市长住进军事基地
2023-06-16 09:49:23
阿 Sa 蔡卓妍晒与妈妈旅游合影 母女俩对镜自拍似姐妹
2023-06-16 09:37:56
天天头条:幼儿园手工教案_幼儿园手工
2023-06-16 09:26:10
布林肯将访华 汤绍成:美四大问题底气不足
2023-06-16 08:54:41
今日热搜:易方达中证云计算与大数据主题ETF净值下跌1.37% 请保持关注
2023-06-16 09:00:25
视讯!有趣味的英文绕口令翻译
2023-06-15 19:12:05
当前头条:2023山东枣庄市市中区中小学教师资格认定第二批公告
2023-06-15 18:38:26
天天百事通!沅陵杜家坪乡:乡村治理 党员先行
2023-06-15 18:05:41
安徽建工: 本公司对其他上市公司情况不了解。股价受多种因素影响,投资有风险,请自行谨慎判断
2023-06-15 18:00:17