Commit a534bb6e authored by Tomas Winkler's avatar Tomas Winkler Committed by Greg Kroah-Hartman

Staging: mei: fix suspend failure

wait_event_interruptible_timeout return value was wrongly used.
The remaining timeout was used as the error code.
This fix translated wait_event_interruptible_timeout return value
into error code that can be propagated.

[10291.674121] pci_pm_suspend(): mei_pci_suspend+0x0/0x8b [mei] returns 2500
It's thinkpad t400 with
00:03.0 Communication controller [0780]: Intel Corporation Mobile 4 Series Chipset MEI Controller [8086:2a44] (rev 07)
Reported-by: default avatarArkadiusz Miskiewicz <a.miskiewicz@gmail.com>
Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent fdf2df0e
...@@ -189,7 +189,7 @@ int mei_hw_init(struct mei_device *dev) ...@@ -189,7 +189,7 @@ int mei_hw_init(struct mei_device *dev)
mutex_lock(&dev->device_lock); mutex_lock(&dev->device_lock);
} }
if (!err && !dev->recvd_msg) { if (err <= 0 && !dev->recvd_msg) {
dev->mei_state = MEI_DISABLED; dev->mei_state = MEI_DISABLED;
dev_dbg(&dev->pdev->dev, dev_dbg(&dev->pdev->dev,
"wait_event_interruptible_timeout failed" "wait_event_interruptible_timeout failed"
......
...@@ -169,10 +169,15 @@ int mei_wd_stop(struct mei_device *dev, bool preserve) ...@@ -169,10 +169,15 @@ int mei_wd_stop(struct mei_device *dev, bool preserve)
ret = wait_event_interruptible_timeout(dev->wait_stop_wd, ret = wait_event_interruptible_timeout(dev->wait_stop_wd,
dev->wd_stopped, 10 * HZ); dev->wd_stopped, 10 * HZ);
mutex_lock(&dev->device_lock); mutex_lock(&dev->device_lock);
if (!dev->wd_stopped) if (dev->wd_stopped) {
dev_dbg(&dev->pdev->dev, "stop wd failed to complete.\n"); dev_dbg(&dev->pdev->dev, "stop wd complete ret=%d.\n", ret);
else ret = 0;
dev_dbg(&dev->pdev->dev, "stop wd complete.\n"); } else {
if (!ret)
ret = -ETIMEDOUT;
dev_warn(&dev->pdev->dev,
"stop wd failed to complete ret=%d.\n", ret);
}
if (preserve) if (preserve)
dev->wd_timeout = wd_timeout; dev->wd_timeout = wd_timeout;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment