Can anyone reproduce a hanging system when trying to use S3 suspend-to-ram, immediately after the first uhci driver instance gets suspended? Most likely this is an issue only on systems where uhci is sharing it's interrupt vector with other devices.
My Toshiba Tecra S1 laptop used to be able to enter S3 suspend-to-ram mode. Seems that since the putback for 6681221 "Solaris hangs during early boot when EHCI-2 is enabled from BIOS" S3-suspend is broken. As soon as the first uhci controller gets suspended (uhci0), system hangs (with an interrupt storm?). The laptop doesn't reach S3-STR state any more. There is an interrupt pending for uhci0 (intr_status == 1), but interrupts are supposed to be disabled (intr_reg == 0), so the code returns from uhci_intr without acknowledging the pending interrupt (lines 954 - 952 in uhci.c) . Interrupt handler is immediately re-entered; there's no more progress with S3-suspend. usr/src/uts/common/io/usb/hcd/uhci/uhci.c: 940 /* Get the status of the interrupts */ 941 intr_status = Get_OpReg16(USBSTS); 942 intr_reg = Get_OpReg16(USBINTR); 943 944 USB_DPRINTF_L3(PRINT_MASK_INTR, uhcip->uhci_log_hdl, 945 "uhci_intr: intr_status = %x, intr_reg = %x", 946 intr_status, intr_reg); 947 948 /* 949 * If uhci interrupts are all disabled, the driver should return 950 * unclaimed. 951 * HC Process Error and Host System Error interrupts cannot be 952 * disabled by intr register, and need to be judged separately. 953 */ 954 if (((intr_reg & ENABLE_ALL_INTRS) == 0) && 955 ((intr_status & USBSTS_REG_HC_PROCESS_ERR) == 0) && 956 ((intr_status & USBSTS_REG_HOST_SYS_ERR) == 0)) { 957 958 USB_DPRINTF_L3(PRINT_MASK_INTR, uhcip->uhci_log_hdl, 959 "uhci_intr: interrupts disabled, unclaim"); 960 mutex_exit(&uhcip->uhci_int_mutex); 961 962 return (DDI_INTR_UNCLAIMED); 963 } -- This message posted from opensolaris.org