forked from luck/tmp_suning_uos_patched
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);
|
struct rtc_plat_data *pdata = dev_get_drvdata(dev);
|
||||||
void __iomem *ioaddr = pdata->ioaddr;
|
void __iomem *ioaddr = pdata->ioaddr;
|
||||||
u32 reg;
|
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);
|
reg = readw(ioaddr + RTC_RTCIENR);
|
||||||
|
|
||||||
if (enabled)
|
if (enabled)
|
||||||
|
@ -194,7 +195,7 @@ static void mxc_rtc_irq_enable(struct device *dev, unsigned int bit,
|
||||||
reg &= ~bit;
|
reg &= ~bit;
|
||||||
|
|
||||||
writew(reg, ioaddr + RTC_RTCIENR);
|
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. */
|
/* This function is the RTC interrupt service routine. */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user