以 ARM Cortex-A9/A15 的 GIC-400 為例(早期 GIC-390/PL190 類似):

EXTINT0-2 配置觸發模式(電平/邊沿),EINTPEND 掛起寄存器(寫 1 清除),EINTMASK 屏蔽。SUBSRCPND/INTSUBMSK(子源),SRCPND/INTMSK(主源),INTMOD 選擇 IRQ/FIQ,PRIORITY 優先級,INTPND 仲裁後最高優先級中斷,INTOFFSET 記錄其位號。
irqaction->handler,處理設備具體邏輯。handle_irq 入口,根據中斷類型調度 handle_level_irq/handle_edge_irq 等,控制 mask/ack/end 流程。irq_chip(舊 hw_interrupt_type),封裝 mask/unmask/ack/set_type 等寄存器操作。irq_desc[NR_IRQS]:全局描述符數組,每中斷源一個。包含 irq_data(硬件屬性)、handle_irq(流程入口)、irq_chip(芯片操作)、action 鏈表(共享中斷)。irqaction:設備中斷描述符,handler、dev_id(共享中斷區分設備)、next 鏈接下一個共享動作。

asm_do_IRQ 保存現場。handle_irq(desc) → generic_handle_irq_desc → desc->handle_irq(如 handle_level_irq)。handle_level_irq:mask → ack → 處理 → unmask(防電平重入)。handle_edge_irq:ack → 處理(邊沿不需 mask)。handle_irq_event 遍歷 action 鏈表調用各 handler(dev_id)。共享中斷時每個 handler 必須自行判斷中斷源(讀設備狀態寄存器),非本設備立即返回 IRQ_NONE。IRQ_HANDLED/IRQ_NONE,flow handler 執行 end 回調,恢復 CPU 現場。irqd_irq_inprogress() 檢測 IRQD_IRQ_INPROGRESS 避免並發處理同一中斷。