mmc: remove MMC bus legacy suspend/resume method
PATCH v4 1/1 mmc: remove MMC bus legacy suspend/resume method
MMC bus is using legacy suspend/resume method, which is not compatible if runtime pm callbacks are used. In this scenario, MMC bus suspend/resume callbacks cannot be called when system entering S3. So change to use the new defined dev_pm_ops for system sleeping mode
---
Changes in v2:
use SET_SYSTEM_SLEEP_PM_OPS to define sleep callbacks as Rafael suggested
Changes in v3:
remove NULL pointer define for runtime callbacks when PM_RUNTIME is not selected, as Ulf Hansson suggested
Changes in v4:
fix the warning when disable CONFIG_PM_RUNTIME
drivers/mmc/card/block.c | 2 +- drivers/mmc/core/bus.c | 24 ++++++++---------------- include/linux/mmc/card.h | 2 +- 3 files changed, 10 insertions(+), 18 deletions(-)
drivers/mmc/card/block.c +1 -1
@@ -1826,7 +1826,7 @@ static void mmc_blk_remove(struct mmc_card *card) }#ifdef CONFIG_PM -static int mmc_blk_suspend (struct mmc_card *card,pm_message_t state) +static int mmc_blk_suspend (struct mmc_card *card) {struct mmc_blk_data *part_md;struct mmc_blk_data *md =mmc_get_drvdata (card);
drivers/mmc/core/bus.c +8 -16
@@ -122,14 +122,14 @@ static int mmc_bus_remove(struct device *dev)return 0 ; } -static int mmc_bus_suspend (struct device *dev,pm_message_t state) +static int mmc_bus_suspend (struct device *dev) {struct mmc_driver *drv =to_mmc_driver (dev->driver);struct mmc_card *card =mmc_dev_to_card (dev);int ret =0 ;if (dev->driver && drv->suspend) - ret = drv->suspend (card, state); + ret = drv->suspend (card);return ret; }
@@ -165,20 +165,14 @@ static int mmc_runtime_idle(struct device *dev)return pm_runtime_suspend (dev); } +#endif /* !CONFIG_PM_RUNTIME */ +static const struct dev_pm_ops mmc_bus_pm_ops = { - .runtime_suspend = mmc_runtime_suspend, - .runtime_resume = mmc_runtime_resume, - .runtime_idle = mmc_runtime_idle, + SET_RUNTIME_PM_OPS(mmc_runtime_suspend, mmc_runtime_resume, + mmc_runtime_idle) +SET_SYSTEM_SLEEP_PM_OPS (mmc_bus_suspend, mmc_bus_resume) }; -#define MMC_PM_OPS_PTR (&mmc_bus_pm_ops) - -#else /* !CONFIG_PM_RUNTIME */ - -#define MMC_PM_OPS_PTR NULL - -#endif /* !CONFIG_PM_RUNTIME */ -static struct bus_type mmc_bus_type = { .name ="mmc" , .dev_attrs = mmc_dev_attrs,
@@ -186,9 +180,7 @@ static struct bus_type mmc_bus_type = { .uevent = mmc_bus_uevent, .probe = mmc_bus_probe, .remove = mmc_bus_remove, - .suspend = mmc_bus_suspend, - .resume = mmc_bus_resume, - .pm = MMC_PM_OPS_PTR, + .pm = &mmc_bus_pm_ops, };int mmc_register_bus (void )
include/linux/mmc/card.h +1 -1
@@ -480,7 +480,7 @@ struct mmc_driver {struct device_driver drv;int (*probe)(struct mmc_card *);void (*remove)(struct mmc_card *); -int (*suspend)(struct mmc_card *,pm_message_t ); +int (*suspend)(struct mmc_card *);int (*resume)(struct mmc_card *); };
Signature · 1 line
1.7.1
Quoted 11 lines · Chuanxiao Dong
MMC bus is using legacy suspend/resume method, which is not compatible if runtime pm callbacks are used. In this scenario, MMC bus suspend/resume callbacks cannot be called when system entering S3. So change to use the new defined
dev_pm_opsfor system sleeping modeSigned-off-by Chuanxiao Dong<[email protected]>---
Changes in v2:
useSET_SYSTEM_SLEEP_PM_OPSto define sleep callbacks as Rafael suggested
Quoted 7 lines
Changes in v3:
remove NULL pointer define for runtime callbacks whenPM_RUNTIMEis not selected, as Ulf Hansson suggestedChanges in v4:
fix the warning when disableCONFIG_PM_RUNTIME
Looks good to me! Acked-by: Ulf Hansson <[email protected]>
Kind regards
Ulf Hansson
Hi,
Quoted 16 lines · Ulf Hansson
Quoted 15 lines · Chuanxiao Dong
MMC bus is using legacy suspend/resume method, which is not compatible if runtime pm callbacks are used. In this scenario, MMC bus suspend/resume callbacks cannot be called when system entering S3. So change to use the new defined
dev_pm_opsfor system sleeping modeSigned-off-by Chuanxiao Dong<[email protected]>---
Changes in v2:
useSET_SYSTEM_SLEEP_PM_OPSto define sleep callbacks as Rafael suggestedChanges in v3:
remove NULL pointer define for runtime callbacks whenPM_RUNTIMEis not selected, as Ulf Hansson suggested
Quoted 5 lines
Quoted 3 lines
Changes in v4:
fix the warning when disableCONFIG_PM_RUNTIMELooks good to me! Acked-by: Ulf Hansson <[email protected]>
Thanks! Pushed to mmc-next for 3.4.
- Chris.
Signature · 2 lines
Chris Ball <[email protected]> <http://printf.net/> One Laptop Per Child
Hebbar, Gururaja
Tested-byQuoted 19 lines · Chris Ball
Hi,
Quoted 16 lines · Ulf Hansson
Quoted 15 lines · Chuanxiao Dong
MMC bus is using legacy suspend/resume method, which is not compatible if runtime pm callbacks are used. In this scenario, MMC bus suspend/resume callbacks cannot be called when system entering S3. So change to use the new defined
dev_pm_opsfor system sleeping modeSigned-off-by Chuanxiao Dong<[email protected]>---
Changes in v2:
useSET_SYSTEM_SLEEP_PM_OPSto define sleep callbacks as Rafael suggestedChanges in v3:
remove NULL pointer define for runtime callbacks whenPM_RUNTIMEis not selected, as Ulf Hansson suggested
Quoted 7 lines
Quoted 5 lines
Quoted 3 lines
Changes in v4:
fix the warning when disableCONFIG_PM_RUNTIMELooks good to me! Acked-by: Ulf Hansson <[email protected]>
Thanks! Pushed to mmc-next for 3.4.
Can you consider my Tested-by for this patch.
Tested on AM335x Platform. Solves major issue/crash reported at
http://www.mail-archive.com/[email protected]/msg65425.html
Quoted 10 lines
- Chris.
Signature · 6 lines
Chris Ball <[email protected]> <http://printf.net/> One Laptop Per Child -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Regards,
Gururaja
Quoted 11 lines · Chuanxiao Dong
MMC bus is using legacy suspend/resume method, which is not compatible if runtime pm callbacks are used. In this scenario, MMC bus suspend/resume callbacks cannot be called when system entering S3. So change to use the new defined
dev_pm_opsfor system sleeping modeSigned-off-by Chuanxiao Dong <[email protected]>---
Changes in v2:
useSET_SYSTEM_SLEEP_PM_OPSto define sleep callbacks as Rafael suggested
Quoted 6 lines
Changes in v3:
remove NULL pointer define for runtime callbacks whenPM_RUNTIMEis not selected, as Ulf Hansson suggestedChanges in v4:
fix the warning when disableCONFIG_PM_RUNTIME
Tested on AM335x Platform. Solves major issue/crash reported at
http://www.mail-archive.com/[email protected]/msg65425.html
Quoted 98 lines
drivers/mmc/card/block.c | 2 +- drivers/mmc/core/bus.c | 24 ++++++++---------------- include/linux/mmc/card.h | 2 +- 3 files changed, 10 insertions(+), 18 deletions(-)drivers/mmc/card/block.c +1
-1@@ -1826,7 +1826,7 @@ static void mmc_blk_remove(struct mmc_card *card) }#ifdef CONFIG_PM -static int mmc_blk_suspend (struct mmc_card *card,pm_message_t state) +static int mmc_blk_suspend (struct mmc_card *card) {struct mmc_blk_data *part_md;struct mmc_blk_data *md =mmc_get_drvdata (card);drivers/mmc/core/bus.c +8
-16@@ -122,14 +122,14 @@ static int mmc_bus_remove(struct device *dev)return 0 ; } -static int mmc_bus_suspend (struct device *dev,pm_message_t state) +static int mmc_bus_suspend (struct device *dev) {struct mmc_driver *drv =to_mmc_driver (dev->driver);struct mmc_card *card =mmc_dev_to_card (dev);int ret =0 ;if (dev->driver && drv->suspend) - ret = drv->suspend (card, state); + ret = drv->suspend (card);return ret; }@@ -165,20 +165,14 @@ static int mmc_runtime_idle(struct device *dev)return pm_runtime_suspend (dev); } +#endif /* !CONFIG_PM_RUNTIME */ +static const struct dev_pm_ops mmc_bus_pm_ops = { - .runtime_suspend = mmc_runtime_suspend, - .runtime_resume = mmc_runtime_resume, - .runtime_idle = mmc_runtime_idle, + SET_RUNTIME_PM_OPS(mmc_runtime_suspend, mmc_runtime_resume, + mmc_runtime_idle) +SET_SYSTEM_SLEEP_PM_OPS (mmc_bus_suspend, mmc_bus_resume) }; -#define MMC_PM_OPS_PTR (&mmc_bus_pm_ops) - -#else /* !CONFIG_PM_RUNTIME */ - -#define MMC_PM_OPS_PTR NULL - -#endif /* !CONFIG_PM_RUNTIME */ -static struct bus_type mmc_bus_type = { .name ="mmc" , .dev_attrs = mmc_dev_attrs,@@ -186,9 +180,7 @@ static struct bus_type mmc_bus_type = { .uevent = mmc_bus_uevent, .probe = mmc_bus_probe, .remove = mmc_bus_remove, - .suspend = mmc_bus_suspend, - .resume = mmc_bus_resume, - .pm = MMC_PM_OPS_PTR, + .pm = &mmc_bus_pm_ops, };int mmc_register_bus (void )include/linux/mmc/card.h +1
-1@@ -480,7 +480,7 @@ struct mmc_driver {struct device_driver drv;int (*probe)(struct mmc_card *);void (*remove)(struct mmc_card *); -int (*suspend)(struct mmc_card *,pm_message_t ); +int (*suspend)(struct mmc_card *);int (*resume)(struct mmc_card *); };Signature · 6 lines
1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Regards,
Gururaja