CHAPTER 01
1. legacy PIC, virtual wire와 ACPI MADT topology를 구분한다
8259 PIC의 IRQ0~15, ExtINT virtual wire, IOAPIC GSI base와 interrupt source override를 부팅 시 선택한 APIC mode와 함께 읽습니다.
PIC
두 개의 8259가 16개 legacy IRQ를 mask/priority 처리합니다.
virtual wire
PIC 출력을 LAPIC LINT0 ExtINT로 받아 APIC 환경으로 이행할 수 있습니다.
MADT
Local APIC/x2APIC, IOAPIC, source override와 NMI 정보를 제공합니다.
GSI
ACPI global system interrupt는 Linux virq나 IDT vector와 다른 번호입니다.
레지스터·번호·소유권 대조
| 항목 | 소유자 | 값의 의미 | 정상 증거 | 오류 해석 |
|---|---|---|---|---|
| PIC IMR/ISR/IRR | 8259 | mask/in-service/request | 선택 mode에서 기대 상태 | legacy source 고정 |
| LVT LINT0/1 | Local APIC | ExtINT/NMI/mask | MADT policy와 일치 | 중복 delivery |
| MADT IOAPIC | firmware | ID/address/GSI base | MMIO ID와 일치 | topology 오류 |
| MADT ISO | firmware | legacy IRQ→GSI, polarity/trigger | 실제 wiring과 일치 | IRQ0/SCI 등 override 오류 |
| APIC mode | Linux | PIC/virtual wire/IOAPIC 선택 | boot log와 register 일치 | fallback mode |
실패 경계 판정
| 증상 | 직전 통과 | 우선 확인 | 반증 시험 | 판정 |
|---|---|---|---|---|
| timer만 안 옴 | CPU/APIC online | IRQ0 override/LAPIC timer | MADT ISO와 clockevent 확인 | legacy routing |
| IRQ가 두 번 옴 | source 정상 | PIC와 IOAPIC 동시 enable | PIC mask 후 count 비교 | 중복 route |
| 특정 GSI 없음 | device status | IOAPIC GSI base 계산 | RTE index와 MADT 비교 | topology |
| polarity 반대로 storm | RTE unmask | ISO flags | line level과 RTE bit 비교 | firmware trigger |
| noapic에서만 부팅 | PIC path 성공 | MADT/IOAPIC 초기화 | IOAPIC ID/address read | APIC topology |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | MADT 항목을 APIC ID/GSI base/override 표로 풉니다. | firmware topology | 입력 확인 |
| 2 | PIC mask와 LINT0/IOAPIC route를 동시에 dump합니다. | 활성 경로 하나 | 중복 배제 |
| 3 | legacy source별 실제 GSI와 trigger를 자극해 확인합니다. | source map | override 검증 |
| 4 | PIC/IOAPIC boot mode 결과를 분리 저장합니다. | fallback 차이 | 경계 판정 |
주의ISA IRQ 번호, ACPI GSI, IOAPIC pin, Linux virq와 IDT vector를 같은 숫자로 취급하지 않습니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 vendor register나 integration별 offset을 추측해서 채우지 않았습니다. 아래 제조사 자료, architecture 문서와 Linux v6.18.37 원본에서 다시 확인할 수 있는 범위만 사용했습니다.
Intel 64 and IA-32 SDM
Local APIC, x2APIC, interrupt/exception과 virtualization
Linux APIC code
APIC mode 선택과 초기화
Linux IOAPIC code
GSI와 redirection entry 관리
Linux vector allocator
CPU별 vector 할당과 이동