mmc: core: Invoke ->card_event() callback only when needed
authorUlf Hansson <ulf.hansson@linaro.org>
Thu, 5 Nov 2015 15:08:07 +0000 (16:08 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 22 Dec 2015 10:32:02 +0000 (11:32 +0100)
The ->card_event() callback may be called when re-scan is disabled and for
non-removable cards, which both cases are unnecessary.

Instead let's move the call later in mmc_rescan() where these constraints
have been validated.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/core/core.c

index 5ae89e48fd85b575cf743363b3a298b49872b7db..c1027a432785056005a66eb4782533bd05c8644a 100644 (file)
@@ -2567,11 +2567,6 @@ void mmc_rescan(struct work_struct *work)
                container_of(work, struct mmc_host, detect.work);
        int i;
 
-       if (host->trigger_card_event && host->ops->card_event) {
-               host->ops->card_event(host);
-               host->trigger_card_event = false;
-       }
-
        if (host->rescan_disable)
                return;
 
@@ -2580,6 +2575,11 @@ void mmc_rescan(struct work_struct *work)
                return;
        host->rescan_entered = 1;
 
+       if (host->trigger_card_event && host->ops->card_event) {
+               host->ops->card_event(host);
+               host->trigger_card_event = false;
+       }
+
        mmc_bus_get(host);
 
        /*