
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/syslog
relacionado 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/wakeup
y luego, para asegurarme, busqué /sys/devices/
todos wakeup
los 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 XHC
lista en el wakeup
resultado 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 unbind
usar bind
el 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_hcd
componente 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_hcd
otros tipos de dispositivos de almacenamiento.sdhci-pci
ehci-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:
- Apagar la máquina
- Desenchufe todos los dispositivos USB
- Retire todos los cables de alimentación, UPS, baterías, ...
- Encienda la máquina (sí: ¡sin cables de alimentación!)
- Vuelva a colocar toda la energía eliminada en el paso 3.
- Arrancar la máquina
- Haz un:
lsusb --verbose > /tmp/good-bus.txt 2>&1
- Conecte el disco
- Haz un:
lsusb --verbose > /tmp/bad-bus.txt 2>&1
- Desmontar el disco
- Expulsar el disco
- Retire el disco
- Haz un:
lsusb --verbose > /tmp/worse-bus.txt 2>&1
- Haz un:
diff --text /tmp/good-bus.txt /tmp/bad-bus.txt > /tmp/test-g-b.txt
- 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