mmc: at91_mci: reorder timer setup and mmc_add_host() call
authorNicolas Ferre <nicolas.ferre@atmel.com>
Thu, 27 Nov 2008 16:23:49 +0000 (17:23 +0100)
committerPierre Ossman <drzeus@drzeus.cx>
Sun, 30 Nov 2008 22:52:44 +0000 (23:52 +0100)
As said in function comment mmc_add_host() requires that:
"The host must be prepared to start servicing requests
before this function completes."

During this function, at91_mci_request() can be invoqued
without timer beeing setup leading to a kernel Oops.
This has been reported inserting this driver as a module.

Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Reported-by: Wu Xuan <wux@landicorp.com>
Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
drivers/mmc/host/at91_mci.c

index 1f8b5b36222c26645576c3a338673839178ad267..e556d42cc45a755597e435e54e21235113611505 100644 (file)
@@ -1088,6 +1088,8 @@ static int __init at91_mci_probe(struct platform_device *pdev)
                goto fail0;
        }
 
+       setup_timer(&host->timer, at91_timeout_timer, (unsigned long)host);
+
        platform_set_drvdata(pdev, mmc);
 
        /*
@@ -1101,8 +1103,6 @@ static int __init at91_mci_probe(struct platform_device *pdev)
 
        mmc_add_host(mmc);
 
-       setup_timer(&host->timer, at91_timeout_timer, (unsigned long)host);
-
        /*
         * monitor card insertion/removal if we can
         */