lkml.org 
[lkml]   [2011]   [Jun]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[staging] staging/mei: fix suspend failure
    Date
    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: Arkadiusz Miskiewicz <a.miskiewicz@gmail.com>
    Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
    ---
    drivers/staging/mei/init.c | 2 +-
    drivers/staging/mei/wd.c | 13 +++++++++----
    2 files changed, 10 insertions(+), 5 deletions(-)

    diff --git a/drivers/staging/mei/init.c b/drivers/staging/mei/init.c
    index eb70e70..0fa8216 100644
    --- a/drivers/staging/mei/init.c
    +++ b/drivers/staging/mei/init.c
    @@ -185,7 +185,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"
    diff --git a/drivers/staging/mei/wd.c b/drivers/staging/mei/wd.c
    index 18516a8..42f04ef 100644
    --- a/drivers/staging/mei/wd.c
    +++ b/drivers/staging/mei/wd.c
    @@ -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;
    --
    1.7.4.4
    ---------------------------------------------------------------------
    Intel Israel (74) Limited
    This e-mail and any attachments may contain confidential material for
    the sole use of the intended recipient(s). Any review or distribution
    by others is strictly prohibited. If you are not the intended
    recipient, please contact the sender and delete all copies.



    \
     
     \ /
      Last update: 2011-06-13 15:41    [W:0.035 / U:128.520 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site