全球快看点丨RISC-V 异常处理在 KVM 中的实现
时间:2023-06-17 00:42:12来源:泰晓科技

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代IGBT迎来窗口期 第7代IGBT获突破_环球快看

    据振华科技,近期,从公司控股子公司振华永光传来好消息:第6代IGBT功

  • 心意之礼 致敬父爱 尼康诚意佳作献礼父亲节_当前快播

    万类竞绿,夏意渐浓。随夏天一同到来的,还有属于父亲们的节日。成长中

  • 杨幂广告生图流出,穿白T恤难掩腿上斑痕累累,网友:脚臭引蚊子

    杨幂作为85花的顶尖人物,一直以来都备受大家关注,因为她不同于其他三

  • 劳动合同生效的条件有哪些_当前通讯

    劳动合同生效的条件1、劳动合同主体合法即劳动者和用人单位具备作为劳

  • 户外露营、作业的全能拍档!正浩德DELTA 2 Max深度评测 世界微资讯

    户外露营、作业的全能拍档!正浩德DELTA2Max深度评测,电源,电芯,露营,

  • 上海复旦大学化学系招聘财务行政助理-天天观天下

    复旦大学化学系招聘财务行政助理1名招聘岗位名称:财务行政助理招聘岗

  • 今热点:机构:降息预计有助于托底楼市基本面,看好龙头地产股反弹机会

    房地产基本面的景气程度再次下行,但我们认为随着政策支持力度的加大,

  • 玫瑰之战叶勤勤有什么秘密?玫瑰之战叶勤勤和宋嘉辰有关系吗?_最新消息

    玫瑰之战叶勤勤有什么秘密?1、《玫瑰之战》叶勤勤的秘密是,她并不

  • 庄家是怎么控制股票涨跌?庄家操纵股票是否违法?|今日热门

    庄家是怎么控制股票涨跌?1、打压股价主要是在建仓时期。建仓时期一

  • 福特越野车报价多少?福特越野车有哪些?

    福特越野车报价多少?嘉年华(查成交价|参配|优惠政策)两厢1 3MT时尚

  • 腓神经损伤怎么治疗最好?腓神经损伤怎么引起的?

    腓总神经损伤的治疗在早期要尽快进行神经探查修复手术,术后要积极

  • 天天新动态:csgo手机开箱模拟器下载 csgo开箱模拟器手机版下载苹果

    CSGO是一款非常受欢迎的游戏,吸引了无数的玩家参与,饰品的市场也

  • 梧州火车站在哪个位置?梧州南站在哪个位置?

    梧州火车站在哪个位置梧州站、梧州南站、藤县站、岑溪站梧州市,古

  • 电子围栏有哪些常见分类?电子围栏电压是多少伏? 热消息

    电子围栏有哪些常见分类?①交流中(或高)压脉冲围栏。可分成有报警和

  • 韩国加入亚投行是真的吗?亚投行现状不太乐观吗??_天天热点评

    韩国加入亚投行是真的吗?韩国财政部周四正式宣布,将加入由中国主导

  • 徐州到南京多少公里?徐州到南京高铁几个小时?

    徐州到南京多少公里徐州到南京全程约325 3公里,开车需用时4小时17分

  • 民生
    • 国足稳赢?最新赔率:国足胜1.05,缅甸胜高达31

    • 2023年6月中旬江苏电力市场月内挂牌交易成交均价464.18 元/兆瓦时-即时

    • 华懋科技(603306.SH)向不特定对象发行可转债申请获上交所审议通过|全球热推荐

    • 新科中国大学生女篮冠军的成功密码_天天快资讯