From: John Stultz <john.stultz@linaro.org>
To: Richard Weinberger <richard@nod.at>
Cc: Thomas Gleixner <tglx@linutronix.de>,
a.zummo@towertech.it, rtc-linux@googlegroups.com,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: RTC regression
Date: Tue, 06 Mar 2012 15:36:01 -0800 [thread overview]
Message-ID: <1331076961.2191.165.camel@work-vm> (raw)
In-Reply-To: <4F4E9B71.2010407@nod.at>
On Wed, 2012-02-29 at 22:41 +0100, Richard Weinberger wrote:
> Hi!
>
> hwclock calls the RTC_UIE_ON ioctl to wait for a timer tick.
> If RTC_UIE_ON was successful it opens /dev/rtcX and waits up to 5 seconds using select()
> for a tick.
> Some RTC drivers have no support for RTC_UIE_ON and ioctl just returns -EINVAL.
> Drivers indicated this by setting rtc_class_ops->update_irq_enable to NULL.
> In this case hwclock waits in a busy loop for the next timer tick.
>
> These two commits changed this behavior:
> 6610e08 (RTC: Rework RTC code to use timerqueue for events)
> 51ba60c (RTC: Cleanup rtc_class_ops->update_irq_enable())
>
> rtc_class_ops->update_irq_enable was removed and rtc_update_irq_enable()
> is now using rtc_class_ops->set_alarm instead of rtc_class_ops->update_irq_enable.
>
> Some RTC devices (like mpc515x) don't support intervals smaller than one
> minute.
> rtc-mpc5121.c deals with this by rounding up to one minute.
> But now after commit 6610e08 RTC_UIE_ON will no longer return -EINVAL and
> the next tick comes somewhen within the next 60 seconds, because the driver rounded up...
> hwclock's select() is not happy about this and timeouts in most cases.
Thanks for diagnosing and pointing out this issue! I hadn't been aware
of such hardware.
Would something like the following be a better generic interface?
Basically allow the RTC drivers to flag that UIE is unsupported (much as
setting the update_irq_enable to null did prior).
Let me know if this works for you, and I'll look to see what other
drivers might be affected here.
thanks
-john
Add generic infrastructure to handle rtc devices that don't support UIE
mode.
Signed-off-by: John Stultz <john.stultz@linaro.org>
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c
index dc87eda..eb415bd 100644
--- a/drivers/rtc/interface.c
+++ b/drivers/rtc/interface.c
@@ -458,6 +458,11 @@ int rtc_update_irq_enable(struct rtc_device *rtc, unsigned int enabled)
if (rtc->uie_rtctimer.enabled == enabled)
goto out;
+ if (rtc->uie_unsupported) {
+ err = -EINVAL;
+ goto out;
+ }
+
if (enabled) {
struct rtc_time tm;
ktime_t now, onesec;
diff --git a/drivers/rtc/rtc-mpc5121.c b/drivers/rtc/rtc-mpc5121.c
index 9d3cacc..be6d4f4 100644
--- a/drivers/rtc/rtc-mpc5121.c
+++ b/drivers/rtc/rtc-mpc5121.c
@@ -360,6 +360,8 @@ static int __devinit mpc5121_rtc_probe(struct platform_device *op)
&mpc5200_rtc_ops, THIS_MODULE);
}
+ rtc->rtc.uie_unsupported = 1;
+
if (IS_ERR(rtc->rtc)) {
err = PTR_ERR(rtc->rtc);
goto out_free_irq;
diff --git a/include/linux/rtc.h b/include/linux/rtc.h
index 93f4d03..fcabfb4 100644
--- a/include/linux/rtc.h
+++ b/include/linux/rtc.h
@@ -202,7 +202,8 @@ struct rtc_device
struct hrtimer pie_timer; /* sub second exp, so needs hrtimer */
int pie_enabled;
struct work_struct irqwork;
-
+ /* Some hardware can't support UIE mode */
+ int uie_unsupported;
#ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
struct work_struct uie_task;
next prev parent reply other threads:[~2012-03-06 23:36 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-29 21:41 RTC regression Richard Weinberger
2012-03-06 23:36 ` John Stultz [this message]
2012-03-08 18:53 ` Richard Weinberger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1331076961.2191.165.camel@work-vm \
--to=john.stultz@linaro.org \
--cc=a.zummo@towertech.it \
--cc=linux-kernel@vger.kernel.org \
--cc=richard@nod.at \
--cc=rtc-linux@googlegroups.com \
--cc=tglx@linutronix.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.