CHAPTER 06
6. ITS의 DeviceID·EventID를 LPI와 MSI까지 연결한다
PCIe Requester ID 또는 platform MSI DeviceID, MSI data의 EventID, ITS device/collection table, ITT와 LPI INTID, redistributor pending/property table을 한 translation chain으로 봅니다.
DeviceID
MSI를 발생한 장치를 ITS namespace에서 식별합니다. PCI requester ID와 변환 관계를 기록합니다.
EventID
장치의 MSI vector를 식별하고 ITT entry를 선택합니다.
Collection
target redistributor/PE와 연결돼 affinity 이동 시 command로 갱신됩니다.
LPI tables
property table은 enable/priority, pending table은 PE별 pending bit를 memory에 둡니다.
레지스터·번호·소유권 대조
| 항목 | 소유자 | 값의 의미 | 정상 증거 | 오류 해석 |
|---|---|---|---|---|
| GITS_TYPER | ITS | DeviceID/EventID/collection 능력 | 할당 상한과 일치 | table 크기 계산 오류 |
| GITS_CBASER/CWRITER/CREADR | ITS | command queue | writer/reader 진행 | command stall |
| GITS_BASER | ITS | device/collection table base | valid/cache/shareability 일치 | memory attribute 오류 |
| GICR_PROPBASER/PENDBASER | Redistributor | LPI property/pending table | valid base와 attribute | LPI만 손실 |
| MSI address/data | PCIe/device | ITS doorbell와 EventID | DeviceID/EventID mapping 일치 | message route 오류 |
실패 경계 판정
| 증상 | 직전 통과 | 우선 확인 | 반증 시험 | 판정 |
|---|---|---|---|---|
| MSI write 보임, LPI pending 없음 | PCIe message 도착 | DeviceID/EventID와 ITS mapping | single vector mapping 재생성 | ITS translation |
| ITS command queue 정지 | command write | CREADR/CWRITER와 error | SYNC 포함 최소 command | table/command memory |
| LPI가 다른 CPU로 감 | LPI 생성 | collection/affinity | MOVI/SYNC와 target readback | collection 경계 |
| SPI는 되고 MSI만 안 됨 | GICD/CPU interface 정상 | ITS/LPI enable/table | platform software LPI 주입 | ITS 경계 |
| 부하에서 MSI 유실 | 초기 vector 정상 | pending table/cacheability/queue | memory attribute와 overflow 확인 | table visibility/용량 |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | Requester ID, DeviceID, EventID, LPI, virq를 한 행에 둡니다. | MSI 번호 ledger | translation 확인 |
| 2 | ITS table base와 memory attribute를 IOMMU/CPU mapping과 대조합니다. | 주소/속성 증거 | table 접근 검증 |
| 3 | command queue writer/reader를 명령마다 기록합니다. | command completion | stall 위치 |
| 4 | vector affinity 이동 중 traffic을 보내 손실/중복을 측정합니다. | 이동 전후 count | collection update 검증 |
주의ITS table과 command queue는 일반 RAM이지만 hardware가 읽고 씁니다. cacheability/shareability와 DMA visibility를 architecture 요구에 맞춰야 합니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 vendor register나 integration별 offset을 추측해서 채우지 않았습니다. 아래 제조사 자료, architecture 문서와 Linux v6.18.37 원본에서 다시 확인할 수 있는 범위만 사용했습니다.
Arm GICv3/v4 overview
GICD, GICR, CPU interface, interrupt state와 routing
Linux GICv3 driver
GIC 초기화, irqdomain, handle_irq와 affinity
Linux GICv3 ITS driver
LPI와 MSI DeviceID/EventID translation
Linux IRQ domain
firmware hwirq와 Linux virq mapping