CHAPTER 04
4. claim/complete의 destructive read와 완료 순서를 검증한다
claim read는 최고 우선순위 source ID를 반환하며 pending을 원자적으로 소비합니다. handler가 device 원인을 처리한 뒤 같은 ID를 complete write하고 MMIO ordering을 지켜야 합니다.
claim side effect
read는 단순 조회가 아니라 request를 claim합니다.
0 반환
현재 context에 전달 가능한 pending source가 없음을 뜻합니다.
complete
claim한 ID를 같은 context completion에 write해 gateway를 재활성화합니다.
ordering
device status clear가 complete보다 늦게 보이면 level source가 즉시 재요청될 수 있습니다.
레지스터·번호·소유권 대조
| 항목 | 소유자 | 값의 의미 | 정상 증거 | 오류 해석 |
|---|---|---|---|---|
| claim/complete | PLIC context | top ID read/ID write | claim ID와 complete ID 동일 | 잘못된 context/ID |
| device status/ack | peripheral | source 원인 clear | complete 전 deassert | storm |
| pending | PLIC global | claim 전 set, 후 clear/변화 | 상태 수명 설명 가능 | debug read가 claim 소비 |
| threshold | context | claim 후보 필터 | handler policy와 일치 | nested 처리 차단 |
| MMIO barrier | CPU/bus | device clear→complete 순서 | stress에서도 재진입 없음 | posted write ordering |
실패 경계 판정
| 증상 | 직전 통과 | 우선 확인 | 반증 시험 | 판정 |
|---|---|---|---|---|
| debug read 후 IRQ 사라짐 | pending 있었음 | claim side effect | 관찰 code 제거 | debugger가 소비 |
| complete했는데 재진입 | handler 실행 | device clear visibility | readback/barrier 추가 비교 | ordering/source 유지 |
| complete ID mismatch | claim ID 기록 | handler 저장/중첩 | per-hart stack trace | state 보존 오류 |
| claim 0 반복 | CSR external pending | context/threshold | 같은 주소와 enable 확인 | 잘못된 context |
| 부하에서 특정 source 굶음 | 여러 pending | priority/tie와 handler loop | claim loop histogram | 우선순위/처리량 |
실제 검증 절차
| 순서 | 실행 | 남길 증거 | 판정 목적 |
|---|---|---|---|
| 1 | claim/complete ID와 hart/context를 ring buffer에 기록합니다. | 쌍의 일치 | 완료 검증 |
| 2 | device clear와 complete 사이 timestamp/readback을 남깁니다. | ordering 증거 | storm 분석 |
| 3 | 여러 source를 동시에 발생시켜 claim order를 확인합니다. | priority/tie 결과 | arbiter 검증 |
| 4 | handler loop 종료 시 마지막 claim 0을 확인합니다. | drain 완료 | 남은 pending 판정 |
주의claim register를 외부 debugger에서 읽지 않습니다. 상태 확인만 하려다가 실제 interrupt를 훔칠 수 있습니다.
공개적으로 다시 확인할 수 있는 자료
공개되지 않은 vendor register나 integration별 offset을 추측해서 채우지 않았습니다. 아래 제조사 자료, architecture 문서와 Linux v6.18.37 원본에서 다시 확인할 수 있는 범위만 사용했습니다.
RISC-V PLIC specification
gateway, priority, target context와 claim/complete
RISC-V AIA specification
APLIC, IMSIC, interrupt files와 virtualization
Linux SiFive PLIC driver
PLIC domain, enable, claim/complete와 chained handler
Linux RISC-V INTC
local interrupt cause와 root domain