Analisando drivers paralisados e Time-Outs
Ao depurar um driver de miniporte SCSI, as três causas mais comuns para travamentos e tempos limite são:
O DPC do miniporto SCSI não está em execução
O miniporto SCSI não solicita a próxima solicitação
Uma solicitação não está sendo concluída pelo miniporto SCSI, geralmente porque está aguardando registros de mapa.
Se você suspeitar que o DPC do miniporto SCSI não está em execução, use !pcr para exibir a fila DPC do processador atual. Se a rotina DPC da porta SCSI estiver na fila DPC, coloque um ponto de interrupção nessa rotina para determinar se essa rotina é chamada. Caso contrário, use !scsikd.scsiext em cada dispositivo. Considere a seguinte saída de exemplo da extensão !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
Se o slot de tempo limite for -1 e o slot não marcado for diferente de zero ou o slot de tempo limite for diferente de zero e houver solicitações mostradas, o miniporto não solicitará a próxima solicitação.
Como alternativa, se o slot de repetição e o slot ocupado forem diferentes de zero, uma solicitação poderá não ser concluída pelo miniporto SCSI porque está aguardando registros de mapa. Da mesma forma, se os slots não marcados e pendentes forem diferentes de zero, o miniporto SCSI poderá estar aguardando registros de mapa. Em ambos os casos, o endereço do SRB (bloco de solicitação SCSI) é o endereço no slot ocupado e o endereço da solicitação que não está sendo concluída. Para obter mais informações sobre o SRB, use a extensão !minipkd.srb com esse endereço como entrada.
A extensão !devobj determina se o miniporto SCSI está aguardando registros de mapa. Use o endereço do objeto do dispositivo que está emitindo a solicitação como entrada para !devobj. Se o IRQ atual for diferente de zero, é altamente provável que o miniporto SCSI esteja aguardando registros de mapa.