《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > RISC-V 異常處理在 KVM 中的實現

RISC-V 異常處理在 KVM 中的實現

2023-06-16
作者: 曉泰
來源: 泰曉科技
關鍵詞: RISC-V KVM

  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 等做具體探討。

  軟件版本

 微信截圖_20230616161548.png

  KVM 異常處理

  異常處理入口

  在 KVM 對 RISC-V H 擴展的實現中,與異常處理相關的函數調用關系如下圖所示。目前的實現中,KVM 能夠處理三類異常。即虛擬機內的 page fault、虛擬指令異常和系統調用,三種不同的異常處理分別對應了不同的實現。

  微信截圖_20230616161931.png

  異常分類及其定義

  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 函數內部包含三個部分,分別對應三種異常的處理,代碼如下:

 微信截圖_20230616162055.png

微信截圖_20230616162245.png

  如上所示,KVM 的實現中包含了三類異常:

  虛擬指令異常;

  Guest page fault;

  SBI 系統調用。

  特權指令集手冊 中規定了每種異常對應的編碼(即 scause 的可能的值),在進行異常處理時,可依據據 scause 的具體值確定其處理方式,如下表所示。

  微信截圖_20230616162009.png

  cause code

  在 KVM 中,其對應宏的定義如下:

 微信截圖_20230616162306.png

  虛擬指令異常

  其中,EXC_VIRTUAL_INST_FAULT 即 virtual instruction exception 對應如下情況:

  在 VS-Mode 或 VU-Mode 下訪問特定 CSR 的特定位;

  在 VS-Mode 或 VU-Mode 下執行無權限的指令如 HFENCE, HLV, HSV 等。

  KVM 中 virtual instruction 異常的處理如下:

  微信截圖_20230616162355.png

      微信截圖_20230616162434.png

 

  其中用于處理具體指令的函數其原型或定義如下:

  處理非法壓縮指令時,用于從 Guest 獲取合法指令的 kvm_riscv_vcpu_unpriv_read 函數:

 微信截圖_20230616162634.png

  對合法的壓縮指令以及非 SYSTEM 類型的非壓縮指令,不進行額外處理,直接調用 truly_illegal_insn 函數處理,保存當前 trap 的具體信息,將 Guest PC 設置為 Guest 中對應的異常向量, 然后返回到到 Guest 中對異常進行處理:

 微信截圖_20230616162706.png

     微信截圖_20230616162738.png

  其調用關系如下圖所示:

  微信截圖_20230616162900.png

  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 系統調用的處理。

  微信截圖_20230616163251.png

        微信截圖_20230616163337.png

微信截圖_20230616163445.png

  總結

  本文結合 KVM 中有關異常處理的實現,討論了在添加 H 擴展之后的虛擬指令異常、guest page fault 以及來自 guest 的系統調用的處理。

  參考資料

  RISC-V 特權指令集手冊

  RISC-V Linux

  首發地址:https://tinylab.org/riscv-kvm-excp-impl

  技術服務:https://tinylab.org/ruma.tech


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美在线视频一区| 欧美日韩在线一区二区| 一区二区电影免费观看| 久久精品一本| 久久精品系列| 久久不射中文字幕| 欧美亚洲视频| 欧美一级网站| 性欧美8khd高清极品| 亚洲欧美日韩电影| 亚洲欧美一级二级三级| 亚洲男人天堂2024| 亚洲在线网站| 亚洲欧美在线另类| 欧美一区二区成人| 欧美中文字幕视频在线观看| 欧美一区二区三区视频| 欧美一区二区三区免费视| 香蕉久久精品日日躁夜夜躁| 亚洲欧美综合国产精品一区| 小嫩嫩精品导航| 久久精品网址| 亚洲精品综合在线| 一区二区三区四区五区精品| 亚洲视频第一页| 亚洲欧美精品suv| 欧美在线一二三四区| 久久久久成人精品免费播放动漫| 久久视频这里只有精品| 老司机久久99久久精品播放免费 | 国产精品国产三级国产aⅴ9色| 欧美天堂亚洲电影院在线观看| 国产精品成人国产乱一区| 国产精品大片| 国产精品一二三四| 狠狠色狠狠色综合日日五| 影音先锋亚洲一区| 日韩一级成人av| 亚洲欧美综合另类中字| 亚洲高清视频的网址| 亚洲日本免费| 亚洲主播在线播放| 久久久一二三| 欧美精品三级| 国产精品一区二区女厕厕| 一区二区在线观看视频| 日韩一二在线观看| 校园春色国产精品| 亚洲人成在线观看网站高清| 中文国产成人精品久久一| 欧美在线观看www| 欧美福利视频在线| 国产精品卡一卡二卡三| 狠狠色噜噜狠狠色综合久| 亚洲精品一二三区| 午夜精品久久久久久久99热浪潮| 亚洲国产婷婷| 午夜在线观看免费一区| 美女网站久久| 国产精品一二一区| 91久久午夜| 香蕉av福利精品导航| 夜夜嗨av一区二区三区网站四季av | 亚洲日韩欧美视频一区| 亚洲欧美日韩一区在线观看| 亚洲国产日韩欧美在线动漫| 亚洲图片欧洲图片av| 久久天天综合| 国产精品劲爆视频| 亚洲电影一级黄| 亚洲欧美视频一区| 日韩一区二区福利| 久久久久国产精品麻豆ai换脸| 欧美激情国产高清| 国产亚洲欧美日韩日本| 亚洲美女在线观看| 久久精品视频亚洲| 欧美一区2区视频在线观看| 欧美精品在线观看| 精品成人一区| 先锋影音国产精品| 亚洲一区在线免费观看| 你懂的亚洲视频| 国产伪娘ts一区 | 亚洲欧美日韩直播| 在线性视频日韩欧美| 久久最新视频| 国产欧美日韩另类视频免费观看| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲国产综合在线| 久久九九久久九九| 国产精品久久毛片a| 亚洲精品欧美激情| 亚洲人线精品午夜| 久久一区二区视频| 国产视频在线观看一区二区| 亚洲性人人天天夜夜摸| 国产精品99久久久久久久女警 | 国产精品视频免费观看| 日韩写真在线| 一本久道久久综合婷婷鲸鱼| 欧美sm视频| 亚洲第一中文字幕| 亚洲国产精品t66y| 久久久久一区二区| 国产亚洲永久域名| 羞羞漫画18久久大片| 欧美一区三区二区在线观看| 欧美系列电影免费观看| 日韩午夜三级在线| 一本色道久久综合狠狠躁篇怎么玩| 蜜臀久久99精品久久久画质超高清| 国产一区视频在线观看免费| 亚洲欧美在线一区| 久久精品91久久久久久再现| 国产精品一区一区三区| 亚洲免费中文| 久久爱www.| 国产在线精品自拍| 亚洲电影免费在线 | 欧美一区二区免费视频| 久久岛国电影| 国产午夜精品久久久久久免费视 | 亚洲午夜精品一区二区| 亚洲在线免费观看| 国产精品男gay被猛男狂揉视频| 99国产欧美久久久精品| 亚洲婷婷在线| 国产精品美女诱惑| 午夜一区不卡| 久久人人97超碰人人澡爱香蕉| 国产在线欧美| 91久久精品一区二区别| 你懂的视频一区二区| 亚洲精品欧美在线| 亚洲一区三区视频在线观看| 国产精品久久久久一区二区| 午夜精品久久久久久久白皮肤| 久久大逼视频| 在线激情影院一区| 一区二区三区精品视频在线观看| 欧美午夜在线视频| 欧美亚洲综合久久| 噜噜噜91成人网| 亚洲免费观看高清在线观看| 午夜精品久久久久影视| 国模精品一区二区三区| 最新日韩在线视频| 欧美日韩国产小视频在线观看| 一区二区三区偷拍| 午夜免费久久久久| 一区二区视频免费完整版观看| 亚洲精品影视在线观看| 欧美婷婷六月丁香综合色| 香蕉av777xxx色综合一区| 暖暖成人免费视频| 在线视频欧美一区| 久久全球大尺度高清视频| 亚洲精品一区二区三区蜜桃久| 午夜免费电影一区在线观看| 激情综合久久| 亚洲一区在线观看视频 | 亚洲美女精品成人在线视频| 国产精品豆花视频| 亚洲国产成人porn| 欧美午夜不卡在线观看免费 | 亚洲小视频在线观看| 久久全国免费视频| 99这里有精品| 久久久久久久综合| 99国产精品自拍| 久久人91精品久久久久久不卡| 亚洲美女91| 久久久亚洲影院你懂的| 夜夜嗨av一区二区三区四区| 久久久久久久一区二区| 99re66热这里只有精品3直播| 久久精品系列| 一本色道久久精品| 久久国产精品高清| 亚洲精品一区二| 久久香蕉国产线看观看av| 一区二区三区四区精品| 欧美aaa级| 先锋影音久久| 欧美性片在线观看| 亚洲精品一区二区三区99| 国产深夜精品| 亚洲五月六月| 亚洲国产精品一区二区第四页av| 欧美一区二区三区精品| 日韩亚洲欧美高清| 免费久久精品视频| 午夜精品成人在线视频| 欧美日韩在线观看一区二区| 亚洲高清免费| 国产综合网站| 欧美在线视频一区| 亚洲一区二区网站| 欧美三级在线|