Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -189,7 +189,7 @@ int mei_hw_init(struct mei_device *dev)
		mutex_lock(&dev->device_lock);
	}

	if (!err && !dev->recvd_msg) {
	if (err <= 0 && !dev->recvd_msg) {
		dev->mei_state = MEI_DISABLED;
		dev_dbg(&dev->pdev->dev,
			"wait_event_interruptible_timeout failed"
+9 −4
Original line number Diff line number Diff line
@@ -169,10 +169,15 @@ int mei_wd_stop(struct mei_device *dev, bool preserve)
	ret = wait_event_interruptible_timeout(dev->wait_stop_wd,
					dev->wd_stopped, 10 * HZ);
	mutex_lock(&dev->device_lock);
	if (!dev->wd_stopped)
		dev_dbg(&dev->pdev->dev, "stop wd failed to complete.\n");
	else
		dev_dbg(&dev->pdev->dev, "stop wd complete.\n");
	if (dev->wd_stopped) {
		dev_dbg(&dev->pdev->dev, "stop wd complete ret=%d.\n", ret);
		ret = 0;
	} else {
		if (!ret)
			ret = -ETIMEDOUT;
		dev_warn(&dev->pdev->dev,
			"stop wd failed to complete ret=%d.\n", ret);
	}

	if (preserve)
		dev->wd_timeout = wd_timeout;