Commit b59f6d1febd6cbe9fae4589bf72da0ed32bc69e0
Committed by
Linus Torvalds
1 parent
41b9e2d7ec
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
drivers/rtc/rtc-mxc.c: fix irq enabled interrupts warning
Fixes WARNING: at irq/handle.c:146 handle_irq_event_percpu+0x19c/0x1b8() irq 25 handler mxc_rtc_interrupt+0x0/0xac enabled interrupts Modules linked in: (unwind_backtrace+0x0/0xf0) from (warn_slowpath_common+0x4c/0x64) (warn_slowpath_common+0x4c/0x64) from (warn_slowpath_fmt+0x30/0x40) (warn_slowpath_fmt+0x30/0x40) from (handle_irq_event_percpu+0x19c/0x1b8) (handle_irq_event_percpu+0x19c/0x1b8) from (handle_irq_event+0x28/0x38) (handle_irq_event+0x28/0x38) from (handle_level_irq+0x80/0xc4) (handle_level_irq+0x80/0xc4) from (generic_handle_irq+0x24/0x38) (generic_handle_irq+0x24/0x38) from (handle_IRQ+0x30/0x84) (handle_IRQ+0x30/0x84) from (avic_handle_irq+0x2c/0x4c) (avic_handle_irq+0x2c/0x4c) from (__irq_svc+0x40/0x60) Exception stack(0xc050bf60 to 0xc050bfa8) bf60: 00000001 00000000 003c4208 c0018e20 c050a000 c050a000 c054a4c8 c050a000 bf80: c05157a8 4117b363 80503bb4 00000000 01000000 c050bfa8 c0018e2c c000e808 bfa0: 60000013 ffffffff (__irq_svc+0x40/0x60) from (default_idle+0x1c/0x30) (default_idle+0x1c/0x30) from (cpu_idle+0x68/0xa8) (cpu_idle+0x68/0xa8) from (start_kernel+0x22c/0x26c) Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com> Cc: Alessandro Zummo <a.zummo@towertech.it> Cc: Sascha Hauer <kernel@pengutronix.de> Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 1 changed file with 3 additions and 2 deletions Side-by-side Diff
drivers/rtc/rtc-mxc.c
... | ... | @@ -202,10 +202,11 @@ |
202 | 202 | struct platform_device *pdev = dev_id; |
203 | 203 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); |
204 | 204 | void __iomem *ioaddr = pdata->ioaddr; |
205 | + unsigned long flags; | |
205 | 206 | u32 status; |
206 | 207 | u32 events = 0; |
207 | 208 | |
208 | - spin_lock_irq(&pdata->rtc->irq_lock); | |
209 | + spin_lock_irqsave(&pdata->rtc->irq_lock, flags); | |
209 | 210 | status = readw(ioaddr + RTC_RTCISR) & readw(ioaddr + RTC_RTCIENR); |
210 | 211 | /* clear interrupt sources */ |
211 | 212 | writew(status, ioaddr + RTC_RTCISR); |
... | ... | @@ -224,7 +225,7 @@ |
224 | 225 | events |= (RTC_PF | RTC_IRQF); |
225 | 226 | |
226 | 227 | rtc_update_irq(pdata->rtc, 1, events); |
227 | - spin_unlock_irq(&pdata->rtc->irq_lock); | |
228 | + spin_unlock_irqrestore(&pdata->rtc->irq_lock, flags); | |
228 | 229 | |
229 | 230 | return IRQ_HANDLED; |
230 | 231 | } |