이 프로젝트의 목표는 하드웨어 장치를 재초기화하거나 가상 머신(VFIO)으로 전달할 수 있는 상태로 리셋하는 기능을 갖춘 커널 모듈을 제공하는 것입니다. 이러한 기능들을 PCI quirks로 커널에 포함시키는 것이 좋을 것이지만, 일부 리셋 절차는 매우 복잡하여 quirk로 받아들여지기 어렵습니다 (예: AMD Vega 10).
이를 아웃 오브 트리(out of tree) 커널 모듈로 제공함으로써, 벤더들은 이 모듈에 기능을 추가하기 위한 pull request를 쉽게 만들 수 있고, 사용자들은 전체 커널을 재빌드할 필요 없이 이 모듈을 쉽게 업데이트할 수 있습니다.
요약하자면 - 패치 적용이 필요하지 않습니다.
이 모듈은 ftrace를 사용하여 pci_dev_specific_reset에 후킹(hook)되도록 작성되었으며, 이를 통해 실행 중인 커널을 패치할 필요 없이 장치 리셋을 직접 처리할 수 있습니다. 이 모듈을 단순히 modprobe하는 것만으로도 모든 지원되는 하드웨어의 리셋 루틴이 활성화됩니다.
커널에 다음 옵션들이 활성화되어 있는지 확인하십시오:
CONFIG_FTRACE=y
CONFIG_KPROBES=y
CONFIG_PCI_QUIRKS=y
...
이 모듈은 표준 make, make install 패턴을 사용하거나, 또는 dkms(권장)를 통해 설치할 수 있습니다.
modprobe vendor-reset을 사용하거나, /etc/modules와 같이 시스템 부팅 시 로드되도록 적절한 위치에 장치를 추가하십시오 (Debian). 이 작업을 수행하는 최적의 방법에 대해서는 배포판 문서를 참조하십시오.
참고: 이 모듈은 초기에(EARLY) 로드되어야 합니다. 커널이 기본적으로 수행하려는 리셋은 이 모듈이 복구할 수 없는 GPU를 완전히 손상시키기 때문입니다. 따라서 어떻게 해야 하는지는 배포판 문서를 참조해야 하지만, 대부분의 경우 /etc/modules에 vendor-reset을 추가하고 initrd를 업데이트하는 것으로 충분합니다.
| Vendor | Family | Common Name(s) |
|---|
| AMD | Polaris 10 | RX 470, 480, 570, 580, 590 |
| ... | | |
만약 귀하의 장치에 대한 지원을 이 프로젝트에 추가하고자 하는 벤더라면, 먼저 두 가지를 고려해 주십시오:
하드웨어/펌웨어를 FLR 또는 BUS 리셋을 사용하여 올바르게 재설정할 수 있도록 수정했습니까?
리셋이 충분히 간단하여 커널 pci quirk(참고: kernel/drivers/pci/quirk.c)가 되어야 합니까?
위 질문 중 어느 하나에 '예'라고 답한다면, 이 프로젝트는 당신을 위한 것이 아닙니다.