USB 3.0 デバイスによるサスペンドからの即時復帰

USB 3.0 デバイスによるサスペンドからの即時復帰

私のコンピュータは通常、正常にサスペンドおよび起動します。しかし、USB3.0 ハードディスクを接続すると、アンマウントして切断した後でも、サスペンドしようとするたびにマシンがすぐに起動します。

(下記)ではすべての USB デバイスが無効になっており、 USB ディスク、スタンバイ プロセス、またはウェイクアップ プロセスに関連する/proc/acpi/wakeupエラーは確認できません。/var/log/syslog

同じディスクを USB 2.0 ポートに接続しても、同じ問題は発生しません。USB 2.0 ディスクを USB 3.0 ポートに接続しても、同じ問題は発生しません。USB デバイスがまったく接続されていない場合でも、起動後に USB 3.0 ディスクが接続されていれば、コンピューターはすぐにスタンバイ状態から復帰します。

システムは Dell Precision M6700 であり、問​​題は 14.04 で発生し、14.10 でも継続します。

この原因は何でしょうか? また、さらにデバッグするにはどうすればよいでしょうか?

> cat /proc/acpi/wakeup
Device  S-state   Status   Sysfs node
P0P1      S4    *disabled
USB1      S3    *disabled
USB2      S3    *disabled
USB3      S3    *disabled
USB5      S3    *disabled
USB6      S3    *disabled
USB7      S3    *disabled
RP01      S4    *disabled  pci:0000:00:1c.0
PXSX      S4    *disabled
RP02      S4    *disabled  pci:0000:00:1c.1
PXSX      S4    *disabled  pci:0000:03:00.0
RP05      S4    *disabled
PXSX      S4    *disabled
RP06      S4    *disabled
PXSX      S4    *disabled
RP07      S4    *disabled
PXSX      S4    *disabled
RP08      S4    *disabled  pci:0000:00:1c.7
PXSX      S4    *disabled  pci:0000:0c:00.0
PEG0      S4    *disabled  pci:0000:00:01.0
PEGP      S4    *disabled
PEG1      S4    *disabled
PEG2      S4    *disabled
PEG3      S4    *disabled
USB4      S3    *disabled
RP03      S4    *disabled  pci:0000:00:1c.2
RP04      S4    *disabled  pci:0000:00:1c.3
PXSX      S4    *disabled
GLAN      S4    *enabled   pci:0000:00:19.0
EHC1      S0    *enabled   pci:0000:00:1d.0
EHC2      S0    *enabled   pci:0000:00:1a.0
XHC       S0    *enabled   pci:0000:00:14.0
HDEF      S4    *disabled  pci:0000:00:1b.0
LID0      S3    *enabled 
PBTN      S3    *enabled

編集 - デバイスを明示的に無効にしても問題は解決しません

電源ボタンを除くすべてのデバイスのウェイクアップを無効にしてみました。

まずデバイスを無効にし/proc/acpi/wakeup、念のため/sys/devices/すべてのwakeupファイルを検索しました。

find /sys/devices/ -name "wakeup" -print -exec grep enabled {} \;

次に、それらすべてを明示的に に設定しますdisabled。例:

sudo bash -c "echo disabled > /sys/devices/pci0000:00/0000:00:19.0/power/wakeup"

電源ボタンのみを有効にします。

cat /sys/devices/LNXSYSTM:00/LNXPWRBN:00/power/wakeup
# enabled

その後も、コンピューターは (USB 3.0 ディスクが接続されたときはいつでも) すぐにサスペンドから復帰します。

また、起動後、以下のデバイスが にリセットされましたenabled:

/sys/devices/pci0000:00/0000:00:19.0/power/wakeup
/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0/power/wakeup

PCI デバイスは、次の場所でもリセットされるため、私の LAN であると思われます/proc/acpi/wakeup:

Device  S-state   Status   Sysfs node
...
GLAN      S4    *enabled   pci:0000:00:19.0
...

デバイスに記載されていない、ウェイクアップの原因となる他の要因がある可能性はありますか?

編集 - 詳細な lsusb 情報を追加しました

リクエストされた情報を追加しましたファビー:

> Bus 004 Device 002: ID 357d:7788  
> Device Descriptor:
>   bLength                18
>   bDescriptorType         1
>   bcdUSB               3.00
>   bDeviceClass            0 (Defined at Interface level)
>   bDeviceSubClass         0 
>   bDeviceProtocol         0 
>   bMaxPacketSize0         9
>   idVendor           0x357d 
>   idProduct          0x7788 
>   bcdDevice            0.00
>   iManufacturer          10 
>   iProduct               11 
>   iSerial                 3 
>   bNumConfigurations      1
>   Configuration Descriptor:
>     bLength                 9
>     bDescriptorType         2
>     wTotalLength          121
>     bNumInterfaces          1
>     bConfigurationValue     1
>     iConfiguration          0 
>     bmAttributes         0xc0
>       Self Powered
>     MaxPower                2mA
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        0
>       bAlternateSetting       0
>       bNumEndpoints           2
>       bInterfaceClass         8 Mass Storage
>       bInterfaceSubClass      6 SCSI
>       bInterfaceProtocol     80 Bulk-Only
>       iInterface              0 
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x81  EP 1 IN
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0400  1x 1024 bytes
>         bInterval               0
>         bMaxBurst              15
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x02  EP 2 OUT
>     Couldn't open device, some information will be missing
>     bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0400  1x 1024 bytes
>         bInterval               0
>         bMaxBurst              15
>     Interface Descriptor:
>       bLength                 9
>       bDescriptorType         4
>       bInterfaceNumber        0
>       bAlternateSetting       1
>       bNumEndpoints           4
>       bInterfaceClass         8 Mass Storage
>       bInterfaceSubClass      6 SCSI
>       bInterfaceProtocol     98 
>       iInterface              0 
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x01  EP 1 OUT
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0400  1x 1024 bytes
>         bInterval               0
>         bMaxBurst               0
>         Command pipe (0x01)
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x82  EP 2 IN
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0400  1x 1024 bytes
>         bInterval               0
>         bMaxBurst               0
>         MaxStreams             32
>         Status pipe (0x02)
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x83  EP 3 IN
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0400  1x 1024 bytes
>         bInterval               0
>         bMaxBurst              15
>         MaxStreams             32
>         Data-in pipe (0x03)
>       Endpoint Descriptor:
>         bLength                 7
>         bDescriptorType         5
>         bEndpointAddress     0x04  EP 4 OUT
>         bmAttributes            2
>           Transfer Type            Bulk
>           Synch Type               None
>           Usage Type               Data
>         wMaxPacketSize     0x0400  1x 1024 bytes
>         bInterval               0
>         bMaxBurst              15
>         MaxStreams             32
>         Data-out pipe (0x04)
> 

答え1

XHCまず、出力にリストされているのがwakeupUSB 3.0 デバイスであることは私には分かりませんでした。

XHC       S0    *enabled   pci:0000:00:14.0

ただし、このデバイスのウェイクアップ ステータスを無効にしても問題は解決されません。

sudo bash -c "echo disabled > \
    /sys/devices/pci0000:00/0000:00:14.0/power/wakeup"  # Problem persists.

私が見つけた唯一の有効な解決策は、次のコマンドを使用してデバイス ドライバーを実行することunbindですbind

sudo bash -c ' \
  echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/unbind && \
  echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/bind;'

USB 3.0 ストレージ デバイスを接続してからコンピューターをサスペンドするまでの間、毎回これを実行する必要がありますが、一貫して機能します。

xhci_hcdパスのコンポーネントは USB 3.0 デバイスにのみ有効であることに注意してください。パスのこの部分は、リセットする必要があるバスの種類に応じて変更する必要があり、他の種類のストレージ デバイスの場合はuhci_hcdsdhci-pciまたはのいずれかehci-pciになる可能性があります。

答え2

回答を追加して申し訳ありませんが、コメントを追加するには評判が足りません...

(これは私があなたの問題に注目している理由! ;-) :P

サスペンドする前に、ディスクが切断された USB バスをリセットしてみましたか?

方法が分からない場合は、次のことを行ってください。

  1. マシンをシャットダウンする
  2. すべてのUSBデバイスを取り外します
  3. すべての電源ケーブル、UPS、バッテリーなどを取り外します。
  4. マシンの電源を入れます (はい、電源ケーブルは不要です)。
  5. 手順3で取り外した電源をすべて元に戻します
  6. マシンを起動する
  7. 以下を実行します:lsusb --verbose > /tmp/good-bus.txt 2>&1
  8. ディスクを挿入する
  9. 以下を実行します:lsusb --verbose > /tmp/bad-bus.txt 2>&1
  10. ディスクをアンマウントする
  11. ディスクを取り出す
  12. ディスクを取り出す
  13. 以下を実行します:lsusb --verbose > /tmp/worse-bus.txt 2>&1
  14. 以下を実行します:diff --text /tmp/good-bus.txt /tmp/bad-bus.txt > /tmp/test-g-b.txt
  15. 以下を実行します:diff --text /tmp/good-bus.txt /tmp/worse-bus.txt > /tmp/test-g-w.txt

そして、/tmp/test-gb.txtと/tmp/test-gw.txtの出力をここに報告します。

関連情報