九色91_成人精品一区二区三区中文字幕_国产精品久久久久一区二区三区_欧美精品久久_国产精品99久久久久久久vr_www.国产视频

Hello! 歡迎來到小浪云!


基于GICv3的中斷虛擬化——Linux中斷子系統(tǒng)分析


avatar
小浪云 2025-01-06 140

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

1. 計(jì)算機(jī)中斷處理框架簡介

在計(jì)算機(jī)系統(tǒng)中,關(guān)于中斷處理的軟硬件框架如圖1-1所示。一個(gè)設(shè)備中斷從產(chǎn)生到處理的過程可以概括為以下5個(gè)主要階段:

1) 設(shè)備產(chǎn)生中斷信號并發(fā)送至中斷控制器;

2) 中斷控制器將硬件中斷ID定向到適當(dāng)?shù)腃PU;

3) CPU對中斷進(jìn)行響應(yīng),將PC指針跳至Vector表中的對應(yīng)中斷處理入口,即irq_handle;

4) irq_handle進(jìn)一步調(diào)用通用中斷處理函數(shù)generic_handle_irq,位于Interrupt子系統(tǒng)內(nèi);

5) generic_handle_irq再次調(diào)用設(shè)備驅(qū)動程序中注冊的dev_irq_handle,以完成中斷處理。

基于GICv3的中斷虛擬化——Linux中斷子系統(tǒng)分析

圖1-1

2. AArch64 vector tables初始化流程

AArch64架構(gòu)下vector tables初始化流程見圖2-1:

基于GICv3的中斷虛擬化——Linux中斷子系統(tǒng)分析

圖2-1

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

基于GICv3的中斷虛擬化——Linux中斷子系統(tǒng)分析

圖2-2

3. Linux中斷子系統(tǒng)

3.1 Linux中斷子系統(tǒng)框架

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

但從當(dāng)前Linux內(nèi)核版本中除了上述三個(gè)抽象等級,還包括irq domain和interrupt descriptor management。

基于GICv3的中斷虛擬化——Linux中斷子系統(tǒng)分析

圖3-1

  1. High-level driver API

High-level driver API為設(shè)備驅(qū)動提供中斷實(shí)現(xiàn)中斷的申請、注銷等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),轉(zhuǎn)換成Linux系統(tǒng)中的軟件中斷號(sirq),每一個(gè)Linux軟件中斷號對應(yīng)一項(xiàng)  irq_desc,?每個(gè)中斷控制器都對應(yīng)一個(gè)IRQ?Domain。  ?在硬件設(shè)計(jì)實(shí)現(xiàn)時(shí),會將設(shè)備的中斷信號關(guān)聯(lián)到中斷控制器,中斷控制器會為設(shè)備分配硬件中斷號,硬件中斷號會定義在設(shè)備樹或  ACPI表中,由bootloader傳遞給Linux系統(tǒng),Linux系統(tǒng)啟動加載設(shè)備驅(qū)動時(shí),驅(qū)動程序會根據(jù)硬件中斷號申請軟件中斷號,同時(shí)  注冊設(shè)備驅(qū)動處理函數(shù)。 

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

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

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

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

3.3 GICv3驅(qū)動初始化

GICv3的初始化流程:

基于GICv3的中斷虛擬化——Linux中斷子系統(tǒng)分析

圖3-2

3.4 Linux系統(tǒng)下中斷響應(yīng)流程

Linux系統(tǒng)下中斷響應(yīng)流程:

設(shè)備觸發(fā)中斷–>中斷控制器收到中斷信號–>發(fā)送到響應(yīng)CPU–>CPU響應(yīng)中斷(CP指針跳轉(zhuǎn)到中斷異常向量表入口)–>執(zhí)行CPU架構(gòu)中斷handle–>執(zhí)行中斷控制器handle–>執(zhí)行Linux中斷子系統(tǒng)handle–>執(zhí)行設(shè)備驅(qū)動程序注冊的中斷處理函數(shù).

Linux系統(tǒng)中斷響應(yīng)流程如下:

基于GICv3的中斷虛擬化——Linux中斷子系統(tǒng)分析

圖3-3 Aarch64中斷響應(yīng)流程

基于GICv3的中斷虛擬化——Linux中斷子系統(tǒng)分析

圖3-4 gicv3及中斷子系統(tǒng)處理流程

基于GICv3的中斷虛擬化——Linux中斷子系統(tǒng)分析

圖3-5 設(shè)備中斷注冊

相關(guān)閱讀

主站蜘蛛池模板: 亚洲日本欧美日韩高观看 | 国产一级视频在线 | 草草影院ccyy | 久久久久久久91 | 午夜精品久久久久久久久久久久久 | 色婷婷久久久久swag精品 | 91精品国产91久久久久久最新 | 亚洲91av| 日韩中文字幕在线不卡 | 国产一区二区在线免费观看 | 最新中文字幕在线 | 欧美a级成人淫片免费看 | 日韩色视频 | 国产中文字幕在线观看 | 中文字幕av在线播放 | 国产精品爱久久久久久久 | 99九九视频 | 亚洲欧美在线观看 | 中文字幕第十五页 | 波多野结衣二区 | 91精品国产91久久综合桃花 | 久久久在线视频 | 日本超碰 | 国产成人精品亚洲日本在线观看 | 视频1区2区 | 一区二区三区视频 | 成人黄色在线 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 国产成人精品一区二区三区四区 | www视频在线观看 | 成人免费网视频 | 久久久精品一区 | 亚洲一区二区三区 | 欧美一区二区三区电影 | 一级毛片成人免费看a | 在线播放国产一区二区三区 | 欧美日韩久久精品 | 91xxx在线观看 | 国产在线视频一区 | 久久久久久久久久久久久9999 | 免费黄色片在线观看 |