CHAPTER 02
2. Local APIC와 x2APIC의 IRR·ISR·TMR·priority를 읽는다
xAPIC MMIO와 x2APIC MSR 접근 차이, APIC ID, TPR/PPR, IRR→ISR 이동, TMR trigger mode와 EOI를 CPU별로 추적합니다.
xAPIC/x2APIC
register 의미는 유사하지만 접근 방식과 APIC ID 폭이 다릅니다.
IRR
수신됐지만 아직 service되지 않은 vector입니다.
ISR
acknowledge돼 현재 service 중인 vector입니다.
PPR
TPR과 현재 ISR priority로 계산돼 새 interrupt 수용을 제한합니다.
레지스터·번호·소유권 대조
| 항목 | 소유자 | 값의 의미 | 정상 증거 | 오류 해석 |
|---|---|---|---|---|
| APIC ID | LAPIC | physical/logical destination | MADT/CPU topology와 일치 | wrong target |
| SVR | LAPIC | APIC software enable/spurious vector | enable=1, 유효 vector | LAPIC disabled |
| TPR/PPR | LAPIC | priority threshold/current | 요청 vector 허용 | priority masking |
| IRR/ISR | LAPIC | pending/active vector bitmap | 사건에 따라 IRR→ISR→clear | entry/EOI 문제 |
| TMR/EOI | LAPIC | level trigger와 completion | IOAPIC/MSI mode와 일치 | remote IRR 고정 |
실패 경계 판정
| 증상 | 직전 통과 | 우선 확인 | 반증 시험 | 판정 |
|---|---|---|---|---|
| message 도착, IRR 없음 | bus/MSI write 확인 | destination APIC ID | self-IPI와 target 비교 | LAPIC 입력 |
| IRR 고정, ISR 이동 없음 | pending vector | TPR/PPR/IF | threshold와 irq mask 확인 | CPU acceptance |
| ISR 고정 | entry 실행 | EOI path | EOI write trace | completion |
| CPU 256 이상 target 실패 | 낮은 ID 정상 | x2APIC mode와 destination width | APIC mode/ID raw 확인 | addressability |
| level IRQ remote IRR 고정 | handler 실행 | source clear+EOI | IOAPIC RTE와 LAPIC EOI 비교 | level completion |
01
interrupt message
→
02
destination match
→
03
IRR
→
04
priority arbitration
→
05
ISR
→
06
IDT handler
→
07
EOI
→
08
ISR clear
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | CPU별 APIC ID/mode/SVR/TPR을 저장합니다. | LAPIC identity | 기준선 |
| 2 | 시험 vector의 IRR/ISR/TMR를 entry/EOI 전후 capture합니다. | 상태 이동 | lifecycle 검증 |
| 3 | TPR을 조정해 priority 전달 경계를 측정합니다. | vector class별 결과 | mask 검증 |
| 4 | CPU별 self-IPI와 cross-IPI를 보내 destination을 확인합니다. | APIC ID mapping | routing 검증 |
주의x2APIC register는 MSR로 접근합니다. xAPIC MMIO 주소를 그대로 읽어 현재 상태라고 해석하지 않습니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 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 할당과 이동