mmc_rescan causes severe interrupt latency

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I am on an embedded system, and found that we had several ms interrupt delay
(causing UART overrun). The problem was identified as part of the mmc_rescan.

Our setup has enabled polling (MMC_CAP_NEEDS_POLL) to detect if an SD card
is present. This will cause a periodic rescheduling of mmc_rescan.

mmc_rescan -> mmc_rescan_try_freq -> mmc_power_up -> mmc_set_ios ->
host->ops->set_ios(host, ios);

We are using mmc/host/sdhci.c, so host->ops->set_ios(host, ios) -> sdhci_set_ios

And here is the problem:
The routine starts with 'spin_lock_irqsave'. This means I wont get any
interrupts until the lock is released. However this may take some time
(usually 3-5ms), but when looking at the code - in particular -
'sdhci_set_clock', then I see the comment: /* Wait max 20 ms */. We *still*
have interrupts disabled, so it could potentially add further to our delay.

(I know that e.g. sdhci_writew are platform specific, so FYI, I am on a
Freescale imx6 platform).

Q: Is this kind of interrupt delay expected (3-5ms)?
Q: Is it acceptable to have a loop with 20ms timeout with interrupts disabled?

Kind regards,
/Thomas

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux