diff options
author | David Brownell <david-b@pacbell.net> | 2006-11-25 14:09:28 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2006-11-25 16:28:33 -0500 |
commit | d728b1e69fd5829ec2ab2434381e5a268d4f684a (patch) | |
tree | e11b3dea35247074628f04f5441e4a458bdbd86b /drivers/rtc/rtc-ds1553.c | |
parent | 2601a46474db2dcbc08ee690e56f08a10abe65cb (diff) |
[PATCH] rtc class locking bugfixes
I got a lockdep warning when running "rtctest" so I though it'd be good
to see what was up.
- The warning was for rtc->irq_task_lock, gotten from rtc_update_irq()
by irq handlerss ... but in a handful of other cases, grabbed without
blocking IRQs.
- Some callers to rtc_update_irq() were not ensuring IRQs were blocked,
yet the routine expects that; make sure all callers block IRQs.
It would appear that RTC API tests haven't been part of anyone's kernel
regression test suite recently, at least not with lockdep running.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/rtc/rtc-ds1553.c')
-rw-r--r-- | drivers/rtc/rtc-ds1553.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/rtc/rtc-ds1553.c b/drivers/rtc/rtc-ds1553.c index 78552e6e76aa..001eb1123a65 100644 --- a/drivers/rtc/rtc-ds1553.c +++ b/drivers/rtc/rtc-ds1553.c | |||
@@ -340,7 +340,8 @@ static int __init ds1553_rtc_probe(struct platform_device *pdev) | |||
340 | 340 | ||
341 | if (pdata->irq >= 0) { | 341 | if (pdata->irq >= 0) { |
342 | writeb(0, ioaddr + RTC_INTERRUPTS); | 342 | writeb(0, ioaddr + RTC_INTERRUPTS); |
343 | if (request_irq(pdata->irq, ds1553_rtc_interrupt, IRQF_SHARED, | 343 | if (request_irq(pdata->irq, ds1553_rtc_interrupt, |
344 | IRQF_DISABLED | IRQF_SHARED, | ||
344 | pdev->name, pdev) < 0) { | 345 | pdev->name, pdev) < 0) { |
345 | dev_warn(&pdev->dev, "interrupt not available.\n"); | 346 | dev_warn(&pdev->dev, "interrupt not available.\n"); |
346 | pdata->irq = -1; | 347 | pdata->irq = -1; |