Message ID | 20110531085139.GA7290@earth.universe (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, May 31, 2011 at 10:51:39AM +0200, Sebastian Reichel wrote: > > The driver is accessing to i2c bus in interrupt handler. > > Therefore, it should use threaded irq. > I think the patch should also remove the local_irq_enable() call in > twl_rtc_interrupt, since it's no longer needed with threaded irq. At > least on the Pandaboard the RTC is still working with the appended > patch. ping. Currently the kernel prints a stacktrace for each rtc-twl interrupt, because its interrupt handler enables interrupts. -- Sebastian
On Mon, 2011-06-27 at 18:45 +0200, Sebastian Reichel wrote: > On Tue, May 31, 2011 at 10:51:39AM +0200, Sebastian Reichel wrote: > > > The driver is accessing to i2c bus in interrupt handler. > > > Therefore, it should use threaded irq. > > I think the patch should also remove the local_irq_enable() call in > > twl_rtc_interrupt, since it's no longer needed with threaded irq. At > > least on the Pandaboard the RTC is still working with the appended > > patch. > > ping. > > Currently the kernel prints a stacktrace for each rtc-twl interrupt, > because its interrupt handler enables interrupts. I've queued both changes. Thanks for the reminder. thanks -john -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
--- a/drivers/rtc/rtc-twl.c 2011-05-19 06:06:34.000000000 +0200 +++ b/drivers/rtc/rtc-twl.c 2011-05-26 20:34:03.000000000 +0200 @@ -362,14 +362,6 @@ int res; u8 rd_reg; -#ifdef CONFIG_LOCKDEP - /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which - * we don't want and can't tolerate. Although it might be - * friendlier not to borrow this thread context... - */ - local_irq_enable(); -#endif - res = twl_rtc_read_u8(&rd_reg, REG_RTC_STATUS_REG); if (res) goto out; @@ -462,7 +454,7 @@ if (ret < 0) goto out1; - ret = request_irq(irq, twl_rtc_interrupt, + ret = request_threaded_irq(irq, NULL, twl_rtc_interrupt, IRQF_TRIGGER_RISING, dev_name(&rtc->dev), rtc); if (ret < 0) {