!usb3kd.xhci_findowner
!usb3kd.xhci_findownerコマンドは、共通バッファの所有者を見つけます。
!usb3kd.xhci_findowner Address
パラメーター
Address
共通バッファの仮想アドレスまたは物理アドレス。
DLL
Usb3kd.dll
解説
コモンバッファは、ハードウェアがアドレス指定できる物理的に連続したメモリのブロックです。 USB 3.0ドライバスタックは、USB 3.0ホストコントローラと通信するためにコモンバッファを使用します。 システムがクラッシュし、コモンバッファメモリではないかと思われるアドレスに出くわしたとします。 そのアドレスがコモンバッファメモリであった場合、このコマンドはそのメモリがどのUSB 3.0ホストコントローラに属しているのか(USB 3.0コントローラが複数ある場合)、そしてそのメモリが何に使われているのかを教えてくれます。
例
以下の例では、!xhci_resourceusage を呼び出して、一般的なバッファのアドレスをリストアップしています。
0: kd> !usb3kd.xhci_resourceusage 0x867fbff0
## Dumping CommonBuffer Resources
------------------------------
dt USBXHCI!_COMMON_BUFFER_DATA 0x868d61c0
DmaEnabler:!wdfdmaenabler 0x79729fe8
CommonBuffers Large: Total 8 Available 2 Used 6 TotalBytes 32768
[ 1] dt _TRACKING_DATA 0x868d73a4 VA 0x868e0000 LA 0xdb2e0000 -- Owner 0x86801690 Tag: Int2 Size 4096
[ 2] dt _TRACKING_DATA 0x868d6d1c VA 0x868e1000 LA 0xdb2e1000 -- Owner 0x86801690 Tag: Int2 Size 4096
[ 3] dt _TRACKING_DATA 0x868d6c54 VA 0x868e2000 LA 0xdb2e2000 -- Owner 0x86801690 Tag: Int2 Size 4096
[ 4] dt _TRACKING_DATA 0x868d6b8c VA 0x868e3000 LA 0xdb2e3000 -- Owner 0x86801690 Tag: Int2 Size 4096
[ 5] dt _TRACKING_DATA 0x868d67b4 VA 0x868e5000 LA 0xdb2e5000 -- Owner 0x86801548 Tag: Slt1 Size 4096
[ 6] dt _TRACKING_DATA 0x868d50b4 VA 0x868e6000 LA 0xdb2e6000 -- Owner 0x86801548 Tag: Slt3 Size 4096
CommonBuffers Small: Total 16 Available 13 Used 3 TotalBytes 8192
[ 1] dt _TRACKING_DATA 0x868d6974 VA 0x868e4000 LA 0xdb2e4000 -- Owner 0x86801690 Tag: Int1 Size 512
[ 2] dt _TRACKING_DATA 0x868d69a4 VA 0x868e4200 LA 0xdb2e4200 -- Owner 0x86801548 Tag: Slt2 Size 512
[ 3] dt _TRACKING_DATA 0x868d69d4 VA 0x868e4400 LA 0xdb2e4400 -- Owner 0x86801488 Tag: Cmd1 Size 512
先の出力にリストされた仮想アドレスの1つは、0x868e2000です。 次の例では、そのアドレスを !xhci_findowner に渡しています。 先の出力にリストされた物理アドレスの1つは、0xdb2e4400です。 次の例では、!xhci_findownerに0xdb2e4440(0xdb2e4400からのオフセット0x40バイト)を渡している。
0: kd> !xhci_findowner 0x868e2000
!xhci_info 0x867fbff0 Texas Instruments - PCI: VendorId 0x104c DeviceId 0x8241 RevisionId 0x02
dt _TRACKING_DATA 0x868d6c54 VA 0x868e2000 LA 0xdb2e2000 -- Owner 0x86801690 Tag: Int2 Size 4096
dt _INTERRUPTER_DATA 0x86801690
!xhci_eventring 0x867fbff0 <-- This memory is used for event ring.
0: kd> !xhci_findowner 0xdb2e4440 <-- Note the offset difference.
!xhci_info 0x867fbff0 Texas Instruments - PCI: VendorId 0x104c DeviceId 0x8241 RevisionId 0x02
dt _TRACKING_DATA 0x868d69d4 VA 0x868e4400 LA 0xdb2e4400 -- Owner 0x86801488 Tag: Cmd1 Size 512
dt _COMMAND_DATA 0x86801488
!xhci_commandring 0x867fbff0 <-- This memory is used for command ring.
!xhci_findownerコマンドは、転送要求ブロック(TRB)にアドレスがあり、そのアドレスが属するデバイススロットまで追跡したい場合に特に便利です。 次の例では、!xhci_transferring の出力にリストされたアドレスの一つは、TRB の物理アドレスである 0xda452230 である。 次の例では、そのアドレスを !xhci_findowner に渡しています。 出力は、TRBがデバイススロット8に属していることを示している (!xhci_deviceslots 0x8551d370 8)。
0: kd> !usb3kd.xhci_transferring 0x87652200
[ 0] NORMAL 0xda452200 CycleBit 1 IOC 0 BEI 0 InterrupterTarget 2 TransferLength 6 TDSize 0
[ 1] EVENT_DATA 0xda452210 CycleBit 1 IOC 1 BEI 0 InterrupterTarget 2 Data 0x8511375c TotalBytes 6
[ 2] NORMAL 0xda452220 CycleBit 1 IOC 0 BEI 0 InterrupterTarget 2 TransferLength 6 TDSize 0
[ 3] EVENT_DATA 0xda452230 CycleBit 1 IOC 1 BEI 0 InterrupterTarget 2 Data 0x857d076c TotalBytes 6
0: kd> !xhci_findowner 0xda452230
!xhci_info 0x8551d370 Renesas - PCI: VendorId 0x1912 DeviceId 0x0015 RevisionId 0x02 Firmware 0x0020.0006
dt _TRACKING_DATA 0x8585fd5c VA 0x87652200 LA 0xda452200 -- Owner 0x85894548 Tag: Rng1 Size 512
!xhci_deviceslots 0x8551d370 8
[0] dt _TRANSFERRING_DATA 0x85894548 Events: 0x0 TransferRingState_Idle
------------------------------------------------------------------------------
WdfQueue: !wdfqueue 0x7a76bcb0 (0 waiting)
CurrentRingBufferData: VA 0x87652200 LA 0xda452200 !wdfcommonbuffer 0x7a7a0370 Size 512
Current: !xhci_transferring 0x87652200
PendingTransferList:
[0] dt _TRANSFER_DATA 0x851136f0 !urb 0x84e55468 !wdfrequest 0x7aeec9e8 TransferState_Pending
[1] dt _TRANSFER_DATA 0x857d0700 !urb 0x85733be8 !wdfrequest 0x7a82f9d8 TransferState_Pending