Activación inmediata tras una suspensión causada por dispositivos USB 3.0

Activación inmediata tras una suspensión causada por dispositivos USB 3.0

Mi computadora normalmente se suspende y se reactiva normalmente. Pero cuando conecto un disco duro USB3.0, incluso después de haberlo desmontado y desconectado, la máquina se activa inmediatamente cada vez que intento suspenderla.

Todos los dispositivos USB están deshabilitados en /proc/acpi/wakeup(abajo) y no veo ningún error /var/log/syslogrelacionado con el disco USB o el proceso de espera o reactivación.

El mismo disco conectado a un puerto USB 2.0 no causa el mismo problema, tampoco los discos USB 2.0 conectados a los puertos USB 3.0. Incluso cuando no hay ningún dispositivo USB conectado, la computadora se activa inmediatamente desde el modo de espera si alguna vez se ha conectado un disco USB 3.0 desde el inicio.

El sistema es un Dell Precision M6700 y el problema ocurrió con 14.04 y persiste con 14.10.

¿Qué podría estar causando esto y cómo puedo depurarlo más?

> 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

Editar: deshabilitar explícitamente los dispositivos no resuelve el problema

Ahora intenté deshabilitar la activación para todos los dispositivos (excepto el botón de encendido).

Primero desactivé los dispositivos /proc/acpi/wakeupy luego, para asegurarme, busqué /sys/devices/todos wakeuplos archivos:

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

Luego los configuro explícitamente a todos disabled, por ejemplo:

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

Dejando solo el botón de encendido habilitado:

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

Después de eso, la computadora aún se reactiva inmediatamente después de la suspensión (siempre que se haya conectado un disco USB 3.0).

Además, después de despertarse, los siguientes dispositivos se han restablecido a enabled:

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

El dispositivo PCI parece ser mi LAN porque también se restablece en /proc/acpi/wakeup:

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

¿Puede haber otros factores no enumerados en los dispositivos responsables del despertar?

Editar: se agregó información detallada de lsusb

Información agregada solicitada porfabby:

> 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)
> 

Respuesta1

En primer lugar, no era obvio para mí que la XHClista en el wakeupresultado fuera un dispositivo USB 3.0.

XHC       S0    *enabled   pci:0000:00:14.0

Sin embargo, incluso desactivar el estado de activación de este dispositivo no resuelve el problema.

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

La única solución funcional que he encontrado es unbindusar bindel controlador del dispositivo con los siguientes comandos:

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

Debo hacer esto cada vez que conecto un dispositivo de almacenamiento USB 3.0 y suspendo la computadora, pero funciona de manera consistente.

Cabe señalar que el xhci_hcdcomponente de la ruta sólo es válido para dispositivos USB 3.0. Esta parte de la ruta deberá variarse según el tipo de bus que deba restablecerse y podría ser uno de u uhci_hcdotros tipos de dispositivos de almacenamiento.sdhci-pciehci-pci

Respuesta2

Perdón por agregar una respuesta pero no tengo suficiente reputación para agregar comentarios...

(Cual espor qué estoy mirando tu problema!) ;-) :PAG

¿Ha intentado restablecer el bus USB del que se desconectó el disco antes de suspenderlo?

Si no sabes cómo, ¿podrías:

  1. Apagar la máquina
  2. Desenchufe todos los dispositivos USB
  3. Retire todos los cables de alimentación, UPS, baterías, ...
  4. Encienda la máquina (sí: ¡sin cables de alimentación!)
  5. Vuelva a colocar toda la energía eliminada en el paso 3.
  6. Arrancar la máquina
  7. Haz un:lsusb --verbose > /tmp/good-bus.txt 2>&1
  8. Conecte el disco
  9. Haz un:lsusb --verbose > /tmp/bad-bus.txt 2>&1
  10. Desmontar el disco
  11. Expulsar el disco
  12. Retire el disco
  13. Haz un:lsusb --verbose > /tmp/worse-bus.txt 2>&1
  14. Haz un:diff --text /tmp/good-bus.txt /tmp/bad-bus.txt > /tmp/test-g-b.txt
  15. Haz un:diff --text /tmp/good-bus.txt /tmp/worse-bus.txt > /tmp/test-g-w.txt

Y luego informe aquí con el resultado de /tmp/test-gb.txt y /tmp/test-gw.txt

información relacionada