중단된 드라이버 및 Time-Outs 분석
SCSI 미니포트 드라이버를 디버깅할 때 중단 및 시간 제한의 가장 일반적인 세 가지 원인은 다음과 같습니다.
SCSI 미니포트 DPC가 실행되고 있지 않습니다.
SCSI 미니포트가 다음 요청을 요청하지 못함
요청은 SCSI 미니포트에서 완료되지 않습니다. 일반적으로 맵 레지스터를 기다리고 있기 때문입니다.
SCSI 미니포트 DPC가 실행되고 있지 않은 것으로 의심되는 경우 !pcr 을 사용하여 현재 프로세서에 대한 DPC 큐를 표시합니다. SCSI 포트 DPC 루틴이 DPC 큐에 있는 경우 이 루틴에 중단점을 배치하여 이 루틴이 호출되었는지 여부를 확인합니다. 그렇지 않으면 각 디바이스에서 !scsikd.scsiext 를 사용합니다. !scsikd.scsiext 확장의 다음 샘플 출력을 고려합니다.
0: kd> !scsikd.scsiext 86353040
Common Extension:
< ..omitted.. >
Logical Unit Extension:
Address (3, 0, 1, 0) Claimed Enumerated Visible
LuFlags (0x00000000):
Retry 0x00 Key 0x008889ff
Lock 0x00000000 Pause 0x00000000 CurrentLock: 0x00000000
HwLuExt 0x862e6f00 Adapter 0x8633db28 Timeout 0x0000000a
NextLun 0x00000000 ReadyLun 0x00000000
Pending 0x00000000 Busy 0x00000000 Untagged 0x00000000
. . .
Request list @0x86353200:
Tick count is 2526
SrbData 8615d700 Srb 8611f4fc Irp 8611f2b8 Key 60197 <1s
SrbData 85e72868 Srb 86100c3c Irp 861009f8 Key e29dc7 <1s
시간 제한 슬롯이 -1이고 태그가 지정되지 않은 슬롯이 0이 아니거나 시간 제한 슬롯이 0이 아니고 요청이 표시되면 미니포트에서 다음 요청을 요청하지 못했습니다.
또는 재시도 슬롯과 사용 중인 슬롯이 0이 아닌 경우 SCSI 미니포트가 맵 레지스터를 기다리고 있기 때문에 요청을 완료하지 못할 수 있습니다. 마찬가지로 태그가 지정되지 않은 보류 중인 슬롯이 0이 아닌 경우 SCSI 미니포트가 지도 레지스터를 기다리고 있을 수 있습니다. 두 경우 모두 SRB(SCSI 요청 블록)의 주소는 사용 중인 슬롯의 주소와 완료되지 않은 요청의 주소입니다. SRB에 대한 자세한 내용은 이 주소를 입력으로 사용하여 !minipkd.srb 확장을 사용합니다.
!devobj 확장은 SCSI 미니포트가 맵 레지스터를 기다리고 있는지 여부를 결정합니다. ! devobj에 대한 입력으로 요청을 발급하는 디바이스의 디바이스 개체 주소를 사용합니다. 현재 IRQ가 0이 아닌 경우 SCSI 미니포트가 맵 레지스터를 기다리고 있는 것일 가능성이 높습니다.