RISC-V 异常处理在 KVM 中的实现|全球热头条
时间:2023-06-17 05:50:47来源:泰晓科技

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虚拟化实现中的重要部分,包括异常和中断两个部分。当

  • 美网络安全公司称中国黑客侵入数百个网络?外交部回应

    这些报道是否属实

  • 湖南工程学院青年志愿者到社区开展文化墙建设活动

    湖南日报·新湖南客户端6月16日讯(通讯员杨丹赵佳豪谭明宇)为给社区

  • 盐城大丰大中街道大力宣传防范非法集资知识 每日播报

    走进江苏省盐城市大丰区大中街道晋北村,“守住钱袋子,护好幸福家。拒

  • 【全球时快讯】信安世纪: 北京德恒律师事务所关于北京信安世纪科技股份有限公司发行股份及支付现金购买资产之标的资产过户情况的法律意见

    信安世纪:北京德恒律师事务所关于北京信安世纪科技股份有限公司发行股

  • 全球新资讯:寻找乌托邦_关于寻找乌托邦介绍

    1、寻找乌托邦是一网络电台节目。2、成立于2007年9月。3、是一个以大学

  • 全球今日讯!水产类股大幅拉升!国联水产“20cm”涨停 大湖股份两连板

    值得注意的是,国联水产今日强势涨停,公司昨日晚间公告,6月12日,公

  • 圣诺医药-B(02257)6月16日斥资170.41万港元回购3.5万股

    圣诺医药-B(02257)发布公告,于2023年6月16日,该公司斥资170 41

  • 新华都拟2600万元至5100万元回购股份用于实施员工持股计划_环球快讯

    本次回购资金总额上限为5100万元,资金总额下限为2600万元。

  • 商汤牵手深圳前海管理局、巴士集团 探索自动驾驶巴士商业化运营模式

    三方将共同在前海合作区开展自动驾驶巴士接驳运营服务示范,探索自动驾

  • 意外险报销期限是多长时间 超过这个时间就不能报了吗

    随着保险理财知识的普及,日常购买保险产品的人越来越多。不过,不少人

  • 内蒙古建工职业技术学校_内蒙古化工职业技术学院

    1、内蒙古化工职业学院现有专任教师361人,副高以上教师97人,博士13人

  • 世界热讯:ST中安控股股东股份被全部冻结

    6月15日,ST中安公告称,截至公告披露日,控股股东中恒汇志累计被冻结

  • 恒生指数的涨跌意味着什么?恒生指数下跌意味着什么影响? 观速讯

    恒生指数是代表香港股市的,它的涨跌说明了股市的涨跌,恒生指数由

  • 江西旅游景点有哪些?江西的特色美食有哪些?

    江西旅游景点有哪些?江西的旅游景点有庐山、井冈山风景名胜区、三清

  • 安吉百草园景点介绍是什么?安吉百草园门票多少一张?

    安吉百草园景点介绍是什么?1、安吉百草园又称之为中南百草原,是中

  • 旅游
    • 压岁钱理财怎么做最好?压岁钱存银行哪种方式合适?

    • 电流麦是电脑问题还是耳机问题?电流麦怎么解决?

    • 港股分红派息扣多少税? 港股的分红派息规则是什么?

    • 节瓜是什么瓜?节瓜是什么季节的?