今日热讯:RISC-V 异常处理在 KVM 中的实现
时间:2023-06-16 22:07:00来源:泰晓科技

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

标签:

生活指南
  • 亚太股份: 关于不向下修正亚太转债转股价格的公告 热门看点

    亚太股份:关于不向下修正亚太转债转股价格的公告

  • 阳江个人社保多少钱一个月 2023阳江社保缴费标准

    社保多少钱一个月?个人交社保大概要1082元左右一个月,单位帮忙交社保

  • 微信红包异常消失(微信红包异常)-世界速看

    你们好,最近小时空发现有诸多的对于微信红包异常消失,微信红包异常这

  • 当前热门:让青少年阳光“冲浪”!上海公安网安部门推出四项举措→

    近日,为全面优化青少年阳光上网服务,上海公安网安部门近日推出建立网

  • 焦点速递!A股贸易概念股整理!(6/16)

    A股贸易概念股整理!(6 16),截至6月16日,A股涉及贸易的上市公司具体分

  • 当前短讯!伊赛亚托马斯和小托马斯的关系是什么?nba和cba篮球之神是谁?

    伊赛亚托马斯和小托马斯的关系是什么?伊赛亚托马斯和小托马斯在血缘

  • 企业贷款抵押物在异地可以吗?企业贷款还不起个人财产受连带吗? 环球观焦点

    企业贷款抵押物在异地可以吗?企业贷款抵押物在异地一般情况下是不可

  • 新华通讯社—郑州大学穆青研究中心红色文化研究基地花落里罗城

    6月7日,新华通讯社—郑州大学穆青研究中心红色文化研究基地授牌仪

  • 真融宝安全吗?真融宝靠谱吗? 环球热闻

    真融宝安全吗?真融宝是一个面向大众投资者的理财平台,成立于2014年

  • 首艘国产大型邮轮出坞记 将于今年底前正式交付-环球关注

    白色涂装、流线型船身,身系敦煌飞天彩带。6月6日,我国首艘国产大

  • 【独家】西裤怎么洗?西裤穿多久洗一次?

    西裤怎么洗用冷水、温水加皂粉和盐混合,浸泡服装10-20分钟,水温不

  • 土司热量是多少高不高?吐司烤了以后热量会变高吗?

    土司热量是多少高不高?吐死热量较高,其热量高于一般主食。土司属于

  • 普通电视可以投屏吗?投屏的原理是什么?

    普通电视可以投屏吗?普通电视可以投屏,只要支持无线投屏协议的电视就可用手机投屏。无线投屏的最大优势

  • 三板市场股票如何交易?做新三板股票有什么好处?

    三板市场股票如何交易?首先三板市场是国内证券市场中的一部分,属于代办股份转让系统。用于退市股票的流

  • 处女座比较务实 喜欢总结规律注重于解决现实问题?

    处女座:精明算计处女座是非常善于处理信息的,尤其可以注意到一些别人根本注意不到的小细节,从现象中

  • 零基础怎么看房屋建筑图纸?房屋建筑设计图纸包括什么?

    房屋建筑图纸怎么看?1、看图纸的目录:要先看图纸目录,看看图纸目录和实际图纸是否相同,并从目录中了

  • 民生
    • 五莲县松柏镇:城镇精细化管理抓出特色抓出长效-热讯

    • 日元跌至7个月低点 市场焦点从美联储转向日本央行|每日讯息

    • 城际穿越活动开展 深蓝S7增程版亮相

    • 2023郑州二七区公办初中小升初报名指南 今日热搜