rtc: mxc: use spin_lock_irqsave instead of spin_lock_irq in IRQ context
As spin_unlock_irq will enable interrupts. mxc_rtc_irq_enable is called from interrupt handler mxc_rtc_interrupt. Interrupts are enabled in interrupt handler. Use spin_lock_irqsave/spin_unlock_irqrestore instead of spin_(un)lock_irq in IRQ context to avoid this. Signed-off-by: Fuqian Huang <huangfq.daxian@gmail.com> Link: https://lore.kernel.org/r/20190807082310.10135-1-huangfq.daxian@gmail.com Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
This commit is contained in:
parent
41a8e19f47
commit
b0a3fa4465
|
@ -184,8 +184,9 @@ static void mxc_rtc_irq_enable(struct device *dev, unsigned int bit,
|
|||
struct rtc_plat_data *pdata = dev_get_drvdata(dev);
|
||||
void __iomem *ioaddr = pdata->ioaddr;
|
||||
u32 reg;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irq(&pdata->rtc->irq_lock);
|
||||
spin_lock_irqsave(&pdata->rtc->irq_lock, flags);
|
||||
reg = readw(ioaddr + RTC_RTCIENR);
|
||||
|
||||
if (enabled)
|
||||
|
@ -194,7 +195,7 @@ static void mxc_rtc_irq_enable(struct device *dev, unsigned int bit,
|
|||
reg &= ~bit;
|
||||
|
||||
writew(reg, ioaddr + RTC_RTCIENR);
|
||||
spin_unlock_irq(&pdata->rtc->irq_lock);
|
||||
spin_unlock_irqrestore(&pdata->rtc->irq_lock, flags);
|
||||
}
|
||||
|
||||
/* This function is the RTC interrupt service routine. */
|
||||
|
|
Loading…
Reference in New Issue