色偷偷91综合久久噜噜-色偷偷成人-色偷偷尼玛图亚洲综合-色偷偷人人澡久久天天-国内精品视频一区-国内精品视频一区二区三区

Hello! 歡迎來到小浪云!


基于GICv3的中斷虛擬化——Linux中斷子系統分析


avatar
小浪云 2025-01-06 141

說明: 本文所參考的內核版本是:Linux (none) 6.3.0-rc1+

1. 計算機中斷處理框架簡介

在計算機系統中,關于中斷處理的軟硬件框架如圖1-1所示。一個設備中斷從產生到處理的過程可以概括為以下5個主要階段:

1) 設備產生中斷信號并發送至中斷控制器;

2) 中斷控制器將硬件中斷ID定向到適當的CPU;

3) CPU對中斷進行響應,將PC指針跳至Vector表中的對應中斷處理入口,即irq_handle;

4) irq_handle進一步調用通用中斷處理函數generic_handle_irq,位于Interrupt子系統內;

5) generic_handle_irq再次調用設備驅動程序中注冊的dev_irq_handle,以完成中斷處理。

基于GICv3的中斷虛擬化——Linux中斷子系統分析

圖1-1

2. AArch64 vector tables初始化流程

AArch64架構下vector tables初始化流程見圖2-1:

基于GICv3的中斷虛擬化——Linux中斷子系統分析

圖2-1

nVHE模式下vector table初始化流程見圖2-2:

基于GICv3的中斷虛擬化——Linux中斷子系統分析

圖2-2

3. Linux中斷子系統

3.1 Linux中斷子系統框架

Linux中斷子系統框架按照Linux官方文檔抽象層分為三個level:High-level driver API、High-level IRQ flow handlers、Chip-level hardware encapsulation。

但從當前Linux內核版本中除了上述三個抽象等級,還包括irq domain和interrupt descriptor management。

基于GICv3的中斷虛擬化——Linux中斷子系統分析

圖3-1

  1. High-level driver API

High-level driver API為設備驅動提供中斷實現中斷的申請、注銷等API:

?request_irq()

?request_threaded_irq()

?free_irq()

?disable_irq()

?enable_irq()

?disable_irq_nosync() (SMP only)

?synchronize_irq() (SMP only)

?irq_set_irq_type()

?irq_set_irq_wake()

?irq_set_handler_data()

?irq_set_chip()

?irq_set_chip_data()

b. High-level IRQ flow handlers

?handle_level_irq()

?handle_edge_irq()

?handle_fasteoi_irq()

?handle_simple_irq()

?handle_percpu_irq()

?handle_edge_eoi_irq()

?handle_bad_irq()

c. Chip-level hardware encapsulation

?irq_ack

?irq_mask_ack – Optional, recommended for performance

?irq_mask

?irq_unmask

?irq_eoi – Optional, required for EOI flow handlers

?irq_retrigger – Optional

?irq_set_type – Optional

?irq_set_wake – Optional

3.2 IRQ domain

??IRQ?domain用于將硬件的中斷號(hirq),轉換成Linux系統中的軟件中斷號(sirq),每一個Linux軟件中斷號對應一項  irq_desc,?每個中斷控制器都對應一個IRQ?Domain。  ?在硬件設計實現時,會將設備的中斷信號關聯到中斷控制器,中斷控制器會為設備分配硬件中斷號,硬件中斷號會定義在設備樹或  ACPI表中,由bootloader傳遞給Linux系統,Linux系統啟動加載設備驅動時,驅動程序會根據硬件中斷號申請軟件中斷號,同時  注冊設備驅動處理函數。 

IRQ Domain支持三種映射方式:linear map(線性映射),tree map(樹映射),no map(不映射);

?linear map:維護固定大小的表,索引是硬件中斷號,如果硬件中斷最大數量固定,并且數值不大,可以選擇線性映射;

?tree map:硬件中斷號可能很大,可以選擇樹映射;

?no map:硬件中斷號直接就是Linux的中斷號;

3.3 GICv3驅動初始化

GICv3的初始化流程:

基于GICv3的中斷虛擬化——Linux中斷子系統分析

圖3-2

3.4 Linux系統下中斷響應流程

Linux系統下中斷響應流程:

設備觸發中斷–>中斷控制器收到中斷信號–>發送到響應CPU–>CPU響應中斷(CP指針跳轉到中斷異常向量表入口)–>執行CPU架構中斷handle–>執行中斷控制器handle–>執行Linux中斷子系統handle–>執行設備驅動程序注冊的中斷處理函數.

Linux系統中斷響應流程如下:

基于GICv3的中斷虛擬化——Linux中斷子系統分析

圖3-3 Aarch64中斷響應流程

基于GICv3的中斷虛擬化——Linux中斷子系統分析

圖3-4 gicv3及中斷子系統處理流程

基于GICv3的中斷虛擬化——Linux中斷子系統分析

圖3-5 設備中斷注冊

相關閱讀

主站蜘蛛池模板: 伊人久久大香线蕉亚洲 | 国产伦码精品一区二区三区 | 国内精品久久久久 | 欧美乱理片在线播放免费 | 99久久久久国产 | 国产资源精品一区二区免费 | 韩国美女视频黄是免费 | 成人一级黄色片 | 中文字幕午夜乱理片11111 | 久久久不卡国产精品一区二区 | 日韩高清网站 | 国产一区二区三区在线 | 中文字幕久荜一区日本精品 | 天天插在线视频 | 天天久久 | 久久免费福利 | 久久精品无码一区二区日韩av | 激情中文字幕 | 亚洲码欧美码一区二区三区 | 黄色三级视频在线 | 久久亚洲免费视频 | 色老头网站久久网 | 婷婷综合在线 | 男女爱爱爽爽福利免费视频 | 成人精品在线观看 | 日韩一区二区三区在线 | 亚洲综合久久久久久888 | www.天天干| 国产成人教育视频在线观看 | 伊人久久成人成综合网222 | 国产精品无码久久av | 视频一区二区国产 | 天天碰免费视频 | 狠狠色噜噜狠狠狠888米奇 | 欧美日操| 国产在线精品一区二区三区不卡 | 黄色片网站在线免费观看 | 一级国产精品一级国产精品片 | 视频一区日韩 | 国产精品久久久久影院嫩草 | 亚洲视频中文字幕在线 |