Hi Dan, On Sun, Jul 17 2011, Daniel Drake wrote: > From: Ohad Ben-Cohen <ohad@xxxxxxxxxx> > > In the case where a driver returns -ENOSYS from its suspend handler > to indicate that the device should be powered down over suspend, the > remove routine of the driver was not being called, leading to lots of > confusion during resume. > > The problem is that runtime PM is disabled during this process, > and when we reach mmc_sdio_remove, calling the runtime PM functions here > (validly) return errors, and this was causing us to skip the remove > function. > > Fix this by ignoring the error value of pm_runtime_get_sync(), which > can return valid errors. This also matches the behaviour of > pci_device_remove(). > > Signed-off-by: Daniel Drake <dsd@xxxxxxxxxx> > --- > drivers/mmc/core/sdio_bus.c | 8 ++------ > 1 files changed, 2 insertions(+), 6 deletions(-) > > For linux-3.1. > > diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c > index d2565df..e4e6822 100644 > --- a/drivers/mmc/core/sdio_bus.c > +++ b/drivers/mmc/core/sdio_bus.c > @@ -167,11 +167,8 @@ static int sdio_bus_remove(struct device *dev) > int ret = 0; > > /* Make sure card is powered before invoking ->remove() */ > - if (func->card->host->caps & MMC_CAP_POWER_OFF_CARD) { > - ret = pm_runtime_get_sync(dev); > - if (ret < 0) > - goto out; > - } > + if (func->card->host->caps & MMC_CAP_POWER_OFF_CARD) > + pm_runtime_get_sync(dev); > > drv->remove(func); > > @@ -191,7 +188,6 @@ static int sdio_bus_remove(struct device *dev) > if (func->card->host->caps & MMC_CAP_POWER_OFF_CARD) > pm_runtime_put_sync(dev); > > -out: > return ret; > } Thanks very much, pushed to mmc-next for 3.1. - Chris. -- Chris Ball <cjb@xxxxxxxxxx> <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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html