web-dev-qa-db-fra.com

Réveil immédiat après une suspension causée par des périphériques USB 3.0

Mon ordinateur est généralement suspendu et réveillé normalement. Mais lorsque je connecte un disque dur USB3.0, même après son démontage et sa déconnexion, la machine se met immédiatement en veille à chaque fois que j'essaie de suspendre.

Tous les périphériques USB sont désactivés dans /proc/acpi/wakeup (ci-dessous) et je ne vois aucune erreur dans /var/log/syslog concernant le disque USB ou le processus de veille ou de réveil.

Le même disque connecté à un port USB 2.0 ne pose pas le même problème, pas plus que les disques USB 2.0 connectés aux ports USB 3.0. Même si aucun périphérique USB n'est connecté, l'ordinateur se met immédiatement en veille si un disque USB 3.0 a déjà été connecté depuis le démarrage.

Le système est un Dell Precision M6700 et le problème est survenu avec 14.04 et persiste avec 14.10.

Qu'est-ce qui pourrait causer ceci et comment puis-je le déboguer plus loin?

> 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

Modifier - La désactivation explicite de périphériques ne résout pas le problème.

J'ai maintenant essayé de désactiver le réveil pour tous les appareils (sauf le bouton d'alimentation).

J'ai tout d'abord désactivé les périphériques dans /proc/acpi/wakeup, puis pour rechercher avec certitude /sys/devices/ tous les fichiers wakeup:

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

Ensuite, je les définit explicitement sur disabled, par exemple:

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

Ne laissant que le bouton d'alimentation activé:

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

Après cela, l’ordinateur se réveille toujours immédiatement de la suspension (chaque fois qu’un disque USB 3.0 a été connecté).

De plus, après le réveil, les périphériques suivants ont été réinitialisés sur enabled:

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

Le périphérique PCI semble être mon réseau local, car il est également réinitialisé dans /proc/acpi/wakeup:

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

Peut-il y avoir d'autres facteurs non énumérés dans les appareils qui sont responsables du réveil?

Edit - Ajout d'informations détaillées sur lsusb

Ajout des informations demandées par Fabby :

> 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)
> 
5
Ian Mackinnon

Premièrement, il n’était pas évident pour moi que la liste XHC dans la sortie wakeup était un périphérique USB 3.0.

XHC       S0    *enabled   pci:0000:00:14.0

Cependant, même la désactivation de l'état de réveil de ce périphérique ne résout pas le problème.

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

La seule solution de travail que j'ai trouvée consiste à unbind et bind le pilote de périphérique à l'aide des commandes suivantes:

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;'

Je dois le faire chaque fois entre la connexion d’un périphérique de stockage USB 3.0 et la suspension de l’ordinateur, mais cela fonctionne de manière constante.

Il est à noter que le composant xhci_hcd du chemin d'accès n'est valide que pour les périphériques USB 3.0. Cette partie du chemin devra être modifiée en fonction du type de bus devant être réinitialisé. Il peut s'agir de l'un des uhci_hcd, sdhci-pci ou ehci-pci pour d'autres types de périphérique de stockage. .

3
Ian Mackinnon

Désolé d'avoir ajouté une réponse, mais je n'ai pas assez de réputation pour ajouter des commentaires ...

(Ce qui est pourquoi je regarde votre problème !) ;-): P

Avez-vous essayé de réinitialiser le bus USB sur lequel le disque venait d'être déconnecté avant de le suspendre?

Si vous ne savez pas comment, pourriez-vous:

  1. Éteindre la machine
  2. Débranchez tous les périphériques USB
  3. Retirez tous les câbles d'alimentation, UPS, batteries, ...
  4. Mettez la machine sous tension (oui: sans câbles d'alimentation!)
  5. Remettre tout le pouvoir enlevé à l'étape 3
  6. Démarrer la machine
  7. Faites un: lsusb --verbose > /tmp/good-bus.txt 2>&1
  8. Branchez le disque
  9. Faites un: lsusb --verbose > /tmp/bad-bus.txt 2>&1
  10. Démonter le disque
  11. Éjecter le disque
  12. Retirer le disque
  13. Faites un: lsusb --verbose > /tmp/worse-bus.txt 2>&1
  14. Faites un: diff --text /tmp/good-bus.txt /tmp/bad-bus.txt > /tmp/test-g-b.txt
  15. Faites un: diff --text /tmp/good-bus.txt /tmp/worse-bus.txt > /tmp/test-g-w.txt

Et rapportez ici avec les résultats de /tmp/test-g-b.txt et /tmp/test-g-w.txt

2
Fabby