每日时讯!RISC-V 异常处理在 KVM 中的实现
时间:2023-06-17 02:30:20来源:泰晓科技

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月17日消息,在医疗装备领域,国内很多高端设备都依赖进口,比

  • 天天百事通!我国经济运行保持恢复态势 重点在六方面发力

    央视网消息:国家发展改革委6月16日举行新闻发布会,介绍当前经济形势

  • 央行“麻辣粉”利率下调10个基点 市场预计LPR下周会下降

    本报讯(记者程婕)“麻辣粉(MLF)”利率下调了。6月15日,央行发布公

  • 世界最新:《第八个嫌疑人》上影节获赞 大鹏贡献颠覆性表演

    由大鹏、林家栋领衔主演的犯罪题材电影《第八个嫌疑人》已官宣入围第二

  • 相约“天然氧吧” 泸溪第二届旅发大会将于6月26日启幕

    华声在线6月16日讯(记者刘思佳通讯员胡灵芝刘冬梅麻向阳)畅游“天然

  • 陕西加强养老服务设施规划建设新建城区 新建居住(小)区配建养老服务设施

    为加快推进全方位养老服务体系,加强养老服务设施规划建设,6月14日,

  • 今日报丨翔安今秋将新开办12所学校

    记者昨日从翔安区教育局获悉,近期翔安区有12所学校陆续通过竣工验收,

  • 美国得州遭遇“毁灭性”龙卷风 已致3人死亡-环球精选

    中新网6月16日电据美国广播公司报道,当地时间15日晚间,一场“毁灭性

  • 鹤岗市经贸合作推介会在哈尔滨举行

    人民网哈尔滨6月16日电(尚城)6月15日,在第三十二届哈尔滨国际经济贸易

  • 环球热点!遵义市供水公司开展2023年“安全宣传咨询日”活动

    (本网记者余从源)今年6月是第22个全国“安全生产月”。6月16日,遵义市

  • 什么叫股指基金?股指基金和指数基金的区别是什么?

    什么叫股指基金?股指基金是指以特定的股票指数作为指标,将资金分散

  • 横向线性马达是什么?横向线性马达有什么用?

    横向线性马达是什么?1、手机的振动就是靠手机里的马达来实现的,来

  • 麦克风混响模式是什么意思?麦克风混响怎么调效果好? 世界时快讯

    麦克风混响模式是什么意思?混响其实就是将本来的音色变得丰满起来,

  • 成人本科有用吗?成人高考专升本难吗?|全球短讯

    成人本科有用吗?客观上来说,成人高考本科文凭是有用的。因为成人高

  • 世界新资讯:洗广场什么意思饭圈用语?饭圈里的扫楼是什么意思?

    洗广场什么意思饭圈用语?洗广场的意思是指粉丝大量发原创微博净化某

  • 旅游
    • 微头条丨单冲压片机是什么工作原理?单冲压片机怎么安装?

    • 世界观点:什么是168断食法?一天中能够进食的8小时是随便吃吗?

    • 乙肝抗体种不上怎么办?乙肝抗体维持多久?|每日讯息

    • 建设快贷怎么申请?建设快贷审核要多久?