lkml.org 
[lkml]   [2012]   [Oct]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 17/26] mmc: sdhci: panic write: call tasklets inline
    Date
    From: Adrian Hunter <adrian.hunter@intel.com>

    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: Irina Tirdea <irina.tirdea@intel.com>
    ---
    drivers/mmc/host/sdhci.c | 31 +++++++++++++++++++++----------
    1 file changed, 21 insertions(+), 10 deletions(-)

    diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
    index 827e34f..ff72e98 100644
    --- a/drivers/mmc/host/sdhci.c
    +++ b/drivers/mmc/host/sdhci.c
    @@ -914,6 +914,17 @@ static void sdhci_set_transfer_mode(struct sdhci_host *host,
    sdhci_writew(host, mode, SDHCI_TRANSFER_MODE);
    }

    +static void sdhci_tasklet_card(unsigned long param);
    +static void sdhci_tasklet_finish(unsigned long param);
    +
    +#define sdhci_sched_tasklet(host, name) \
    +{ \
    + if (mmc_am_panic_task(host->mmc)) \
    + sdhci_tasklet_##name((unsigned long)host); \
    + else \
    + tasklet_schedule(&host->name##_tasklet); \
    +}
    +
    static void sdhci_finish_data(struct sdhci_host *host)
    {
    struct mmc_data *data;
    @@ -965,7 +976,7 @@ static void sdhci_finish_data(struct sdhci_host *host)

    sdhci_send_command(host, data->stop);
    } else
    - tasklet_schedule(&host->finish_tasklet);
    + sdhci_sched_tasklet(host, finish);
    }

    static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
    @@ -994,7 +1005,7 @@ static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
    "inhibit bit(s).\n", mmc_hostname(host->mmc));
    sdhci_dumpregs(host);
    cmd->error = -EIO;
    - tasklet_schedule(&host->finish_tasklet);
    + sdhci_sched_tasklet(host, finish);
    return;
    }
    timeout--;
    @@ -1015,7 +1026,7 @@ static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
    pr_err("%s: Unsupported response type!\n",
    mmc_hostname(host->mmc));
    cmd->error = -EINVAL;
    - tasklet_schedule(&host->finish_tasklet);
    + sdhci_sched_tasklet(host, finish);
    return;
    }

    @@ -1076,7 +1087,7 @@ static void sdhci_finish_command(struct sdhci_host *host)
    sdhci_finish_data(host);

    if (!host->cmd->data)
    - tasklet_schedule(&host->finish_tasklet);
    + sdhci_sched_tasklet(host, finish);

    host->cmd = NULL;
    }
    @@ -1303,7 +1314,7 @@ static void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)

    if (!present || host->flags & SDHCI_DEVICE_DEAD) {
    host->mrq->cmd->error = -ENOMEDIUM;
    - tasklet_schedule(&host->finish_tasklet);
    + sdhci_sched_tasklet(host, finish);
    } else {
    u32 present_state;

    @@ -2079,7 +2090,7 @@ static void sdhci_tasklet_card(unsigned long param)
    sdhci_reset(host, SDHCI_RESET_DATA);

    host->mrq->cmd->error = -ENOMEDIUM;
    - tasklet_schedule(&host->finish_tasklet);
    + sdhci_sched_tasklet(host, finish);
    }

    sdhci_unlock_irqrestore(host, flags);
    @@ -2174,7 +2185,7 @@ static void sdhci_timeout_timer(unsigned long data)
    else
    host->mrq->cmd->error = -ETIMEDOUT;

    - tasklet_schedule(&host->finish_tasklet);
    + sdhci_sched_tasklet(host, finish);
    }
    }

    @@ -2221,7 +2232,7 @@ static void sdhci_cmd_irq(struct sdhci_host *host, u32 intmask)
    host->cmd->error = -EILSEQ;

    if (host->cmd->error) {
    - tasklet_schedule(&host->finish_tasklet);
    + sdhci_sched_tasklet(host, finish);
    return;
    }

    @@ -2429,7 +2440,7 @@ again:
    sdhci_writel(host, intmask & (SDHCI_INT_CARD_INSERT |
    SDHCI_INT_CARD_REMOVE), SDHCI_INT_STATUS);
    intmask &= ~(SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE);
    - tasklet_schedule(&host->card_tasklet);
    + sdhci_sched_tasklet(host, card);
    }

    if (intmask & SDHCI_INT_CMD_MASK) {
    @@ -3192,7 +3203,7 @@ void sdhci_remove_host(struct sdhci_host *host, int dead)
    " transfer!\n", mmc_hostname(host->mmc));

    host->mrq->cmd->error = -ENOMEDIUM;
    - tasklet_schedule(&host->finish_tasklet);
    + sdhci_sched_tasklet(host, finish);
    }

    sdhci_unlock_irqrestore(host, flags);
    --
    1.7.9.5


    \
     
     \ /
      Last update: 2012-10-23 16:41    [W:4.149 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site