From 192cfe16ca5761bb7a5aafc016e79a21b2bd4002 Mon Sep 17 00:00:00 2001 From: Siba Prasad Date: Mon, 5 Dec 2016 18:29:39 +0530 Subject: [PATCH] mmc: bus: Handle error in case bus_ops suspend fails bus_ops->suspend may fail due to some reason (for e.g. due to flush timeout). In such cases, if we return error to PM framework from here without calling pm_generic_resume then mmc request may get stuck since PM framework will assume that mmc bus not suspended (because of error) and it won't call resume again. Thus fix this by calling pm_generic_resume in case of error from bus_ops->suspend in mmc_bus_suspend. Change-Id: Iaef485d0b47b005aa88e61cd77a2b7b65931def1 Signed-off-by: Ritesh Harjani Signed-off-by: Sayali Lokhande Signed-off-by: Siba Prasad --- drivers/mmc/core/bus.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/mmc/core/bus.c b/drivers/mmc/core/bus.c index 8101b77c2acf..ec6075ec5767 100644 --- a/drivers/mmc/core/bus.c +++ b/drivers/mmc/core/bus.c @@ -167,6 +167,19 @@ static int mmc_bus_suspend(struct device *dev) if (mmc_bus_needs_resume(host)) return 0; ret = host->bus_ops->suspend(host); + + /* + * bus_ops->suspend may fail due to some reason + * In such cases if we return error to PM framework + * from here without calling pm_generic_resume then mmc + * request may get stuck since PM framework will assume + * that mmc bus is not suspended (because of error) and + * it won't call resume again. + * + * So in case of error call pm_generic_resume(). + */ + if (ret) + pm_generic_resume(dev); return ret; }