Linus Torvalds가 AI로 Intel GPU 드라이버 버그를 추적한 과정

1 hour ago 2

Intel Xe GPU 드라이버가 압축 하드웨어용 flat CCS 저장공간 일부를 VRAM으로 잘못 할당해 Battlemage G21 시스템에서 검은 화면과 gdm 재시작 루프를 일으킴 get_flat_ccs_offset()이 CCS 시작 주소를 128KiB 단위로 올림하면서 실제 경계와 계산값 사이의 메모리까지 노출했으며, 이를 VRAM 할당 단위인 4KiB로 내림해 수정함 16GiB Battlemage G21에서는 마지막 2KiB가 할당 풀에 들어갔고, 그곳에 놓인 Mesa VM의 레벨 3 페이지 테이블이 압축 메타데이터에 덮어써짐 실제 변경은 round_up()을 round_down()으로 바꾸는 수준이지만, 원인을 좁히는 데 디버그 패치 24개와 커널 부팅 18회가 필요했음 AI는 여러 차례 해결이 불가능하다고 판단했으나 Linus의 지시에 따라 디버그 코드 추가와 분석을 이어갔고, 최종 커밋 메시지도 작성함 CCS 저장공간이 VRAM으로 노출된 원인 get_flat_ccs_offset()은 하드웨어의 flat CCS 기준 주소를 읽고 활성화된 L3 노드 수를 곱한 뒤, 결과를 128KiB 단위로 올림했음 이 오프셋보다 낮은 영역은 모두 VRAM 할당기에 사용 가능한 메모리로 전달됨 사용 가능 메모리의 끝 경계를 올리면서 실제 CCS 기준 주소와 올림된 주소 사이까지 빈 메모리로 공개됨 이 영역은 압축 하드웨어가 소유하므로 일반 VRAM으로 할당할 수 없음 L3 노드 수로 조정된 주소가 128KiB 정렬을 만족한다는 보장은 없음 Battlemage G21에서 발생한 메모리 손상 16GiB Battlemage G21의 CCS 기준 주소는 다음과 같았음 원래 값: 0x3fafff800 올림된 값: 0x3fb000000 이 계산 때문에 페이지 0x3fafff000의 마지막 2KiB가 CCS 저장공간인데도 VRAM 할당 풀에 포함됨 압축 하드웨어는 페이지 테이블 엔트리, 버퍼 객체, GPU 제출 없이도 해당 영역을 덮어쓰며 사용자 공간이 시작되기 전부터 동작함 검은 화면으로 이어진 과정 콜드 부팅할 때마다 Mesa VM의 레벨 3 페이지 테이블이 문제가 된 페이지에 배치됐음 압축 하드웨어가 compositor의 batch-buffer heap을 가리키는 엔트리를 손상시킴 compositor가 첫 제출에서 batch를 가져오다가 fault를 일으킴 gdm이 compositor를 계속 재시작하면서 정상 작동 중인 ...

Read Entire Article