CHAPTER 03
3. IOAPIC redirection entry와 level EOI를 pin별로 검증한다
IOAPIC ID/version, GSI base, 64-bit redirection entry의 vector, delivery, destination, polarity, trigger, mask와 remote IRR를 실제 pin level과 맞춥니다.
RTE
각 input pin에 low/high 32-bit redirection entry가 있습니다.
remote IRR
level interrupt가 LAPIC에서 service 중임을 IOAPIC이 추적합니다.
polarity/trigger
firmware override와 장치 전기 신호가 일치해야 합니다.
destination
physical/logical mode와 APIC mode에 따라 encoding을 해석합니다.
레지스터·번호·소유권 대조
| 항목 | 소유자 | 값의 의미 | 정상 증거 | 오류 해석 |
|---|---|---|---|---|
| IOAPIC ID/VER | IOAPIC | ID와 최대 RTE | MADT와 일치 | 잘못된 MMIO/base |
| RTE vector | IOAPIC | IDT vector | Linux vector allocator와 일치 | stale vector |
| RTE trigger/polarity | IOAPIC | edge/level, high/low | MADT/신호 일치 | storm/loss |
| RTE mask/destination | IOAPIC | enable와 target APIC | online affinity target | masked/offline target |
| remote IRR | IOAPIC | level in-service | EOI 후 clear | source clear/EOI 문제 |
실패 경계 판정
| 증상 | 직전 통과 | 우선 확인 | 반증 시험 | 판정 |
|---|---|---|---|---|
| pin active, LAPIC IRR 없음 | device line 측정 | RTE mask/vector/destination | software edge source와 비교 | IOAPIC route |
| unmask 즉시 storm | RTE 설정 | polarity/level source | device status clear 후 unmask | 전기/장치 원인 |
| affinity 후 IRQ 정지 | 이전 CPU 정상 | destination/vector move | RTE readback과 vector map | migration |
| remote IRR 고정 | handler 실행 | LAPIC EOI와 source deassert | EOI 전후 pin/RTE capture | level 완료 |
| GSI가 다른 pin | 일부 handler 동작 | GSI base/ISO | pin 자극과 RTE pending 비교 | firmware map |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | 각 IOAPIC의 GSI 범위와 RTE 수를 계산합니다. | GSI→pin map | 주소 확인 |
| 2 | 문제 RTE low/high를 raw와 decoded로 저장합니다. | vector/trigger/destination | 설정 확인 |
| 3 | pin level, remote IRR와 LAPIC ISR를 동시에 관찰합니다. | level 상태 수명 | storm 분석 |
| 4 | affinity 이동 중 sequence interrupt를 보내 count를 검증합니다. | loss/duplicate 0 | route update |
주의64-bit RTE를 갱신할 때 중간 상태가 노출되지 않도록 kernel의 mask/update 순서를 따릅니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 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 할당과 이동