Subject: mmc: mxs: DEADLOCK

From: [email-masked] (Lauri Hintsala)
Date: Tue, 17 Jul 2012 07:54:39 +0300

Shawn,

Could you review this patch? Attila reported it fixes his SDIO 
initialization issue.

Lauri

On 07/16/2012 08:57 AM, Lauri Hintsala wrote:
>> Any hints how to work around or fix this, would be appreciated
>
>
> Does this patch fix your issue?
>
>  >>>>>>>
> --- a/drivers/mmc/host/mxs-mmc.c
> +++ b/drivers/mmc/host/mxs-mmc.c
> @@ -637,11 +637,6 @@ static void mxs_mmc_enable_sdio_irq(struct mmc_host
> *mmc, int enable)
>                  host->base + HW_SSP_CTRL0 + STMP_OFFSET_REG_SET);
>           writel(BM_SSP_CTRL1_SDIO_IRQ_EN,
>                  host->base + HW_SSP_CTRL1(host) + STMP_OFFSET_REG_SET);
> -
> -        if (readl(host->base + HW_SSP_STATUS(host)) &
> -                BM_SSP_STATUS_SDIO_IRQ)
> -            mmc_signal_sdio_irq(host->mmc);
> -
>       } else {
>           writel(BM_SSP_CTRL0_SDIO_IRQ_CHECK,
>                  host->base + HW_SSP_CTRL0 + STMP_OFFSET_REG_CLR);
> @@ -650,6 +645,11 @@ static void mxs_mmc_enable_sdio_irq(struct mmc_host
> *mmc, int enable)
>       }
>
>       spin_unlock_irqrestore(&host->lock, flags);
> +
> +    if (enable && readl(host->base + HW_SSP_STATUS(host)) &
> +            BM_SSP_STATUS_SDIO_IRQ)
> +        mmc_signal_sdio_irq(host->mmc);
> +
>   }
>
>   static const struct mmc_host_ops mxs_mmc_ops = {
> <<<<<<<
>
> mxs_mmc_enable_sdio_irq was called by mmc_signal_sdio_irq.
> mmc_signal_sdio_irq was called inside spin lock. So the lock was tried
> to acquire before it was released.
>
>
> Best regards,
> Lauri Hintsala
> --
> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html