mmc: core: If controller drv had not registed shutdown callback,

mmc_bus_shutdown SHOULD NOT fall throught it

           We find  kernel panic when rebooting system for nandflash based machine

           [  105.821908] PC is at mmc_bus_shutdown+0xc/0x18
           [  105.826376] LR is at device_shutdown+0x114/0x174
           [  105.831015] pc : [<c03e1818>]    lr : [<c02c94a0>]    psr: 600f0013
           [  105.831015] sp : cf0d9e58  ip : 00000000  fp : 00036864
           [  105.842499] r10: cdd888fc  r9 : cf0d8000  r8 : c09e001c
           [  105.847738] r7 : c0f9edd4  r6 : cdd8f1c8  r5 : cdd888c8  r4 : cdd888d4
           [  105.854275] r3 : 00000000  r2 : 00000001  r1 : 00000002  r0 : cdd888c0
           [  105.860815] Flags: nZCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment user
           [  105.867963] Control: 10c53c7d  Table: 6df9004a  DAC: 00000015
             .....
           [  106.799170] [<c03e1818>] (mmc_bus_shutdown+0xc/0x18) from [<c02c94a0>] (device_shutdown+0x114/0x174)
           [  106.808341] [<c02c94a0>] (device_shutdown+0x114/0x174) from [<c003ec10>] (kernel_restart+0xc/0x50)
           [  106.817331] [<c003ec10>] (kernel_restart+0xc/0x50) from [<c003edbc>] (SyS_reboot+0x160/0x1dc)
           [  106.825891] [<c003edbc>] (SyS_reboot+0x160/0x1dc) from [<c000da80>] (ret_fast_syscall+0x0/0x48)
This commit is contained in:
lintao
2014-03-14 09:26:54 +08:00
parent 860361510b
commit 1b360afa71

View File

@@ -126,8 +126,19 @@ static void mmc_bus_shutdown(struct device *dev)
{
struct mmc_driver *drv = to_mmc_driver(dev->driver);
struct mmc_card *card = mmc_dev_to_card(dev);
struct mmc_host *host = card->host;
int ret;
if (dev->driver && drv->shutdown)
drv->shutdown(card);
if (host->bus_ops->shutdown) {
ret = host->bus_ops->shutdown(host);
if (ret)
pr_warn("%s: error %d during shutdown\n",mmc_hostname(host), ret);
}
drv->shutdown(card);
}
#ifdef CONFIG_PM_SLEEP