RISC-V 异常处理在 KVM 中的实现
时间:2023-06-17 04:22:18来源:泰晓科技

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

标签:

生活指南
  • 陈伟雄出任拳头游戏全球副总裁兼中国工作室群产品负责人

    6月16日消息,拳头游戏日前宣布,拥有15年以上端游、手游开发及运营经

  • 网易事业部负责人入职拳头做手游,曾带出《第五人格》

    文 果脯近日拳头游戏官方宣布,网易游戏前事业部负责人陈伟雄于今年6月

  • 2023年养老金调整3.8%,事业单位退休人员养老金怎么调整?人人都涨300元以上吗?

    2023年的养老金调整方案公布之后,各地退休人员就开始关注自己的养老金

  • 中海近20亿夺花地湾宅地!海珠双地铁靓地补仓!-天天观察

    今天中心区的地市动作不少。一边是刚刚花地湾紫兰苑地块以底价19 922亿

  • 热文:610km纯电续航,预计20万左右,荣威纯电轿车D7登场,飞凡换壳?

    上汽集团,针对新能源品牌,已经推出了多个品牌的矩阵策略,目前在新势

  • 刘兴亮 |中小制造企业如何破局「数字化转型」?

    近年来,我国中小微企业数量快速增长,成为经济发展的一个重要支撑。面

  • 美菱厨电全面进军零售市场 转型变革迈入发展快车道

    美菱厨电全面进军零售市场转型变革迈入发展快车道2023-06-1619:55来源

  • 小咖咖啡完成4.48亿元B轮融资 环球热资讯

    小咖咖啡完成4 48亿元B轮融资,新锐咖啡品牌小咖咖啡已完成4 48亿元B轮

  • 双峰农商银行:外拓营销不止步 深耕细作再提速

    娄底新闻网讯(通讯员李伟)为更好地支持和服务身边小微企业及个体工商

  • 小威少婉拒休斯顿,鹈鹕向火箭狮子大开口,乌度卡满意阿门汤普森

    美国媒体《clutchpoints》表示鹈鹕不愿意贱卖锡安,他们会在谈判中向火

  • 2023年夏玉米单产提升技术意见_全球速讯

    当前,黄淮海等地区夏玉米大面积播种全面展开,是落实关键措施、提高播

  • 45只高比例送转股走出贴权走势

    证券时报•数据宝统计,2022年共531家公司分配方案中包含送转,送转比

  • 7项目总投资82亿元!腾“云”驾“物”制胜新赛道_世界时快讯

    6月16日上午,长沙市雨花区举行“湘商回归”暨促进企业扩能升级项目集

  • 中国民航局:提升千万级以上机场航班近机位靠桥率

    中新社北京6月16日电 (记者 刘文文)中国民用航空局近期将围绕“提

  • 芯片进口减少,国产芯片真崛起了吗?

    近日,海关公布数据现实,今年一季度,我国进口芯片的数量为1082亿颗,

  • 世界热文:仰望登临粤港澳大湾区车展,仰望U8、U9成展会焦点

    2023年6月16日,以“‘汽’象焕新,先行向未来”为主题的粤港澳大湾区

  • 民生
    • 饭圈pb是什么意思

    • 国家级甲醇经济示范区建设进程加速 山西晋中甲醇重卡集中签约

    • 江苏省淮安市发布暴雨蓝色预警 世界微资讯

    • 世界快报:汪苏泷巡回演唱会首场北京站加场