世界微头条丨RISC-V 异常处理在 KVM 中的实现
时间:2023-06-16 20:16:30来源:泰晓科技

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 中的实现

    Trap处理是RISC-V虚拟化实现中的重要部分,包括异常和中断两个部分。当

  • 全球最新:宁夏固原警方打掉一集资诈骗犯罪团伙 涉案资金1.8亿余元

    (记者 杨迪)记者16日从宁夏固原市公安局获悉,近日,固原警方侦

  • 环球焦点!一线城市广州,要限电动自行车

    广州预计在7月10日,对电动自行车限行问题,召开听证会。

  • 悦达投资:公司与华人运通公司没有直接合作

    悦达投资(600805)在互动平台表示,公司与华人运通公司没有直接合作。

  • 中国军队将赴蒙古国参加“可汗探索-2023”多国维和演习 天天观天下

    6月16日下午,国防部新闻局副局长、国防部新闻发言人张晓刚大校发布信

  • 被希腊联赛球迷骚乱吓到了?字母哥发推:给我展示了一些事情 全球速读

    被希腊联赛球迷骚乱吓到了?字母哥发推:给我展示了一些事情,雅典,字母

  • 播报:实缴制变为认缴制有什么好处?企业注册认缴和实缴区别?

    1放宽了注册资本登记条件,取消了最低注册资本限制,注册资金不再是创

  • 仙佑医药膏药推动产业升级,促进产业链协同

    作为国内知名的膏药代加工企业之一,仙佑集团已经拥有了多年的历史

  • 世界最资讯丨华硕官方客服电话号码是多少?华硕维修服务网点地址在哪里?

    华硕官方客服电话号码是多少?400-600-6655 笔记本、品牌台式机、一

  • 分期乐审核不通过原因?分期乐审核通过多久到账?|当前观点

    分期乐审核不通过原因【1】分期乐鹰眼风控系统,对申请人的综合评分

  • 个人交养老保险划算吗?个人交养老保险怎么买最划算?|世界热点

    个人交养老保险划算吗?没单位个人买养老保险是比较划算的,只要交够

  • 电影《神探大战》结局方礼信死掉了吗?刘青云扮演的李俊有没有原型?_全球资讯

    电影《神探大战》结局方礼信死掉了吗?1、《神探大战》结局解析:李

  • 世界观焦点:liveupdate360可以删除吗 360已经卸载了但是C盘还有?

    liveupdate360可以删除吗 360已经卸载了但是C盘还有?不用删,liveu

  • 交通银行信用卡超限额度是多少?信用卡透支还款期限是多长? 环球消息

    交通银行信用卡超限额度是多少?根据规定,交通银行信用卡超限额度是

  • 天天消息!购买etf基金的优点是什么?为什么基金赎不回怎么回事?

    购买etf基金的优点是什么?优点:etf基金可以套利、手续费低、实行T+

  • 魔兽世界战友招募奖励怎么领取?魔兽世界招募流程|天天快看

    魔兽世界战友招募奖励怎么领取?1、登录游戏后,打开游戏的好友列表

  • 旅游
    • ​信阳市平桥街道举行党建引领基层治理主题演讲比赛

    • 信小呆奖品清单实际价值有多少?信小呆中了什么奖?

    • 新股配号是什么意思?股票停牌的原因?

    • 天津理工大学中环信息学院是二本还是三本大学?天津理工大学中环信息学院是公办还是民办 ?