-----Original Message----- From: Martin Wilck [mailto:mwilck@xxxxxxxx] Subject: Re: [PATCH V3 23/25] smartpqi: correct system hangs when resuming from hibernation > @@ -8688,6 +8688,11 @@ static __maybe_unused int pqi_resume(struct > pci_dev *pci_dev) > pci_set_power_state(pci_dev, PCI_D0); > pci_restore_state(pci_dev); > > + pqi_ctrl_unblock_device_reset(ctrl_info); > + pqi_ctrl_unblock_requests(ctrl_info); > + pqi_scsi_unblock_requests(ctrl_info); > + pqi_ctrl_unblock_scan(ctrl_info); > + > return pqi_ctrl_init_resume(ctrl_info); } Like I said in my comments on 14/25: pqi_ctrl_unblock_scan() and pqi_ctrl_unblock_device_reset() expand to mutex_unlock(). Unlocking an already-unlocked mutex is wrong, and a mutex has to be unlocked by the task that owns the lock. How can you be sure that these conditions are met here? Don: I updated this patch to: @@ -8661,9 +8661,17 @@ static __maybe_unused int pqi_resume(struct pci_dev *pci_dev) return 0; } + pqi_ctrl_block_device_reset(ctrl_info); + pqi_ctrl_block_scan(ctrl_info); + pci_set_power_state(pci_dev, PCI_D0); pci_restore_state(pci_dev); + pqi_ctrl_unblock_device_reset(ctrl_info); + pqi_ctrl_unblock_requests(ctrl_info); + pqi_scsi_unblock_requests(ctrl_info); + pqi_ctrl_unblock_scan(ctrl_info); + return pqi_ctrl_init_resume(ctrl_info); } Don: So the mutexes are set and unset in the same task. I updated the other patch 14 accordingly, but I'll reply in that patch also. Is there a specific driver that initiates suspend/resume? Like acpi? Or some other pci driver? Thanks for your hard work on these patches Don