On 30 May 2011 15:26, Daniel Drake <dsd@xxxxxxxxxx> wrote: > Hi, > > The libertas_sdio driver has a suspend routine which returns -ENOSYS > when the card should effectively be removed and powered during > suspend, to be re-probed during resume. > > This is broken in linus master. Actually, it only breaks when I enable runtime PM via the patch we are discussing in the other thread. Here is the call trace: mmc_suspend_host mmc_sdio_remove sdio_remove_func device_del sdio_bus_remove In sdio_bus_remove, we hit: /* 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; } pm_runtime_get_sync returns -11, therefore we skip the following drv->remove call, causing this confusion. -11 is EAGAIN Digging further, in the pm_runtime_get_sync() call we reach rpm_resume() in drivers/base/power where we hit: else if (dev->power.disable_depth > 0) retval = -EAGAIN; Not sure what this means. Any thoughts? Thanks, Daniel -- 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