diff mbox

libertas sdio: fix suspend when interface is down

Message ID 20120903194909.A878DFAA0A@dev.laptop.org (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Daniel Drake Sept. 3, 2012, 7:49 p.m. UTC
When the interface is down, the hardware is powered off.
However, the suspend handler currently tries to send host sleep commands
(when wakeup params are set) in this configuration, causing a system hang
when going into suspend (the commands will never complete).

Avoid this by detecting this situation and simply returning from
the suspend handler without doing anything special.

Signed-off-by: Daniel Drake <dsd@laptop.org>
---
 drivers/net/wireless/libertas/if_sdio.c | 5 +++++
 1 file changed, 5 insertions(+)

Comments

Dan Williams Sept. 4, 2012, 2:15 p.m. UTC | #1
On Mon, 2012-09-03 at 15:49 -0400, Daniel Drake wrote:
> When the interface is down, the hardware is powered off.
> However, the suspend handler currently tries to send host sleep commands
> (when wakeup params are set) in this configuration, causing a system hang
> when going into suspend (the commands will never complete).
> 
> Avoid this by detecting this situation and simply returning from
> the suspend handler without doing anything special.
> 
> Signed-off-by: Daniel Drake <dsd@laptop.org>

Acked-by: Dan Williams <dcbw@redhat.com>

> ---
>  drivers/net/wireless/libertas/if_sdio.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
> index e970897..4cb2343 100644
> --- a/drivers/net/wireless/libertas/if_sdio.c
> +++ b/drivers/net/wireless/libertas/if_sdio.c
> @@ -1326,6 +1326,11 @@ static int if_sdio_suspend(struct device *dev)
>  
>  	mmc_pm_flag_t flags = sdio_get_host_pm_caps(func);
>  
> +	/* If we're powered off anyway, just let the mmc layer remove the
> +	 * card. */
> +	if (!lbs_iface_active(card->priv))
> +		return -ENOSYS;
> +
>  	dev_info(dev, "%s: suspend: PM flags = 0x%x\n",
>  		 sdio_func_id(func), flags);
>  


--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/wireless/libertas/if_sdio.c b/drivers/net/wireless/libertas/if_sdio.c
index e970897..4cb2343 100644
--- a/drivers/net/wireless/libertas/if_sdio.c
+++ b/drivers/net/wireless/libertas/if_sdio.c
@@ -1326,6 +1326,11 @@  static int if_sdio_suspend(struct device *dev)
 
 	mmc_pm_flag_t flags = sdio_get_host_pm_caps(func);
 
+	/* If we're powered off anyway, just let the mmc layer remove the
+	 * card. */
+	if (!lbs_iface_active(card->priv))
+		return -ENOSYS;
+
 	dev_info(dev, "%s: suspend: PM flags = 0x%x\n",
 		 sdio_func_id(func), flags);