[PATCH 2/3] ARM: MXC: mxcmmc: Teach the driver SDIO operations
Michał Mirosław
mirqus at gmail.com
Wed Mar 31 12:41:36 EDT 2010
2010/3/31 Daniel Mack <daniel at caiaq.de>:
> On Wed, Mar 31, 2010 at 03:03:39PM +0200, Sascha Hauer wrote:
>> On Tue, Mar 30, 2010 at 08:32:00PM +0200, Daniel Mack wrote:
>> > +static void mxcmci_enable_sdio_irq(struct mmc_host *mmc, int enable)
>> > +{
>> > + struct mxcmci_host *host = mmc_priv(mmc);
>> > + unsigned long flags;
>> > + u32 int_cntr;
>> > +
>> > + spin_lock_irqsave(&host->lock, flags);
>> > + host->use_sdio = enable;
>> > + int_cntr = readl(host->base + MMC_REG_INT_CNTR);
>> > +
>> > + if (enable)
>> > + int_cntr |= INT_SDIO_IRQ_EN;
>> > + else
>> > + int_cntr &= ~INT_SDIO_IRQ_EN;
>> > +
>> > + writel(int_cntr, host->base + MMC_REG_INT_CNTR);
>> > + spin_unlock_irqrestore(&host->lock, flags);
>>
>> The other places where MMC_REG_INT_CNTR is touched should be protected
>> by this spinlock aswell.
> Hmm, all other place don't do a read/modify/write cycle, so I'd say the
> don't need protection?
If you miss spinlocks around the unconditional writes they might
happen between your readl() and writel().
Best Regards,
Michał Mirosław
More information about the linux-arm-kernel
mailing list