mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
mmc: sdhci: Do not lock spinlock around mmc_gpio_get_ro()
commitab069ce125upstream. sdhci_check_ro() can call mmc_gpio_get_ro() while holding the sdhci host->lock spinlock. That would be a problem if the GPIO access done by mmc_gpio_get_ro() needed to sleep. However, host->lock is not needed anyway. The mmc core ensures that host operations do not race with each other, and asynchronous callbacks like the interrupt handler, software timeouts, completion work etc, cannot affect sdhci_check_ro(). So remove the locking. Fixes:6d5cd068ee("mmc: sdhci: use WP GPIO in sdhci_check_ro()") Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20240614080051.4005-3-adrian.hunter@intel.com Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
52e0091644
commit
10698dbba9
@@ -2516,11 +2516,8 @@ EXPORT_SYMBOL_GPL(sdhci_get_cd_nogpio);
|
||||
static int sdhci_check_ro(struct sdhci_host *host)
|
||||
{
|
||||
bool allow_invert = false;
|
||||
unsigned long flags;
|
||||
int is_readonly;
|
||||
|
||||
spin_lock_irqsave(&host->lock, flags);
|
||||
|
||||
if (host->flags & SDHCI_DEVICE_DEAD) {
|
||||
is_readonly = 0;
|
||||
} else if (host->ops->get_ro) {
|
||||
@@ -2535,8 +2532,6 @@ static int sdhci_check_ro(struct sdhci_host *host)
|
||||
allow_invert = true;
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&host->lock, flags);
|
||||
|
||||
if (is_readonly >= 0 &&
|
||||
allow_invert &&
|
||||
(host->quirks & SDHCI_QUIRK_INVERTED_WRITE_PROTECT))
|
||||
|
||||
Reference in New Issue
Block a user