Hi Here are some patches to reduce maximum time under spinlock in sdhci_send_command(), but also pave the way for an atomic request function. I haven't tried it, but with these patches, something like below should work. static int sdhci_atomic_request(struct mmc_host *mmc, struct mmc_request *mrq) { struct sdhci_host *host = mmc_priv(mmc); struct mmc_command *cmd; unsigned long flags; int ret = 0; spin_lock_irqsave(&host->lock, flags); if (sdhci_present_error(host, mrq->cmd, true)) goto out_finish; cmd = sdhci_manual_cmd23(host, mrq) ? mrq->sbc : mrq->cmd; if (sdhci_send_command(host, cmd)) sdhci_led_activate(host); else ret = -EBUSY; spin_unlock_irqrestore(&host->lock, flags); return ret; out_finish: sdhci_finish_mrq(host, mrq); spin_unlock_irqrestore(&host->lock, flags); return 0; } Adrian Hunter (5): mmc: sdhci: Add helpers for the auto-CMD23 flag mmc: sdhci: Stop exporting sdhci_send_command() mmc: sdhci: Remove unneeded forward declaration of sdhci_finish_data() mmc: sdhci: Tidy sdhci_request() a bit mmc: sdhci: Reduce maximum time under spinlock in sdhci_send_command() drivers/mmc/host/sdhci.c | 182 +++++++++++++++++++++++++++++++++++------------ drivers/mmc/host/sdhci.h | 2 +- 2 files changed, 139 insertions(+), 45 deletions(-) Regards Adrian